在 MacOS 上,如何对守护进程进行沙盒处理?
On MacOS, how to sandbox a daemon process?
我正在寻找在 MacOS 上 "sandbox" "daemon" 进程的方法。
在 Linux 上,我们有各种内核机制来限制某些进程可以做什么(Linux 命名空间,seccomp。在某种程度上也是功能)。在 OpenBSD 上,我们有 chroot 和承诺。在 FreeBSD 上我们有监狱。
我知道最新版本的 MacOSX 上可用的应用程序沙盒机制。但据我所知,它应该包含一个用户可以从 /Applications 启动的经典 GUI 应用程序。
这里我所拥有的只是一个我想要沙箱化的系统守护进程(= 进程)。例如,该守护进程不需要写入文件系统,或者不需要使用网络等。所以我希望 MacOS 系统通过禁止访问某些资源来强制执行此操作。
launchd 也无济于事。使用 launchd,我可以 'daemonize' 正确地处理我的进程,保留一些套接字端口,但我没有看到 "encage" 进程的任何方法。
sandbox_init
看起来比较有意思,其实是"DEPRECATED".
在 MacOS 上只剩下 chroot
。当然 chroot 只会阻止 一些 文件系统的使用。
还有其他可用的沙盒机制吗?
Chromium 仍然使用 sandbox_init()
,因为他们说 Apple 从未提供合适的替代品。参见 seatbelt.cc
但我怀疑未弃用的方法是使用 codesign
将权利的 plist 嵌入到二进制文件中。虽然网上没有太多关于这样做的信息,请参阅 Mac OS app, sandbox with command line tool? and How to sandbox a command line tool?
您还可以使用 Xcode 创建命令行工具项目,在其上启用沙盒,然后查看它的作用。
我正在寻找在 MacOS 上 "sandbox" "daemon" 进程的方法。
在 Linux 上,我们有各种内核机制来限制某些进程可以做什么(Linux 命名空间,seccomp。在某种程度上也是功能)。在 OpenBSD 上,我们有 chroot 和承诺。在 FreeBSD 上我们有监狱。
我知道最新版本的 MacOSX 上可用的应用程序沙盒机制。但据我所知,它应该包含一个用户可以从 /Applications 启动的经典 GUI 应用程序。
这里我所拥有的只是一个我想要沙箱化的系统守护进程(= 进程)。例如,该守护进程不需要写入文件系统,或者不需要使用网络等。所以我希望 MacOS 系统通过禁止访问某些资源来强制执行此操作。
launchd 也无济于事。使用 launchd,我可以 'daemonize' 正确地处理我的进程,保留一些套接字端口,但我没有看到 "encage" 进程的任何方法。
sandbox_init
看起来比较有意思,其实是"DEPRECATED".
在 MacOS 上只剩下 chroot
。当然 chroot 只会阻止 一些 文件系统的使用。
还有其他可用的沙盒机制吗?
Chromium 仍然使用 sandbox_init()
,因为他们说 Apple 从未提供合适的替代品。参见 seatbelt.cc
但我怀疑未弃用的方法是使用 codesign
将权利的 plist 嵌入到二进制文件中。虽然网上没有太多关于这样做的信息,请参阅 Mac OS app, sandbox with command line tool? and How to sandbox a command line tool?
您还可以使用 Xcode 创建命令行工具项目,在其上启用沙盒,然后查看它的作用。