在MacOS上,如何对守护进程进行沙盒化?

3
我正在寻找一种在MacOS上“沙盒化”“守护进程”的方法。 在Linux上,我们有各种内核机制来限制某些进程的操作(Linux命名空间、seccomp。容量也是如此)。 在OpenBSD上,我们有chroot和pledge。 在FreeBSD上,我们有jails。
我知道在最近版本的MacOSX上可用的App Sandboxing机制。 但据我所知,它仅适用于用户可以从/Applications启动的经典GUI应用程序。
这里我只有一个系统守护程序(=进程),我想将其沙盒化。 例如,该守护程序不需要写入文件系统,或者不需要使用网络等。 因此,我希望MacOS系统通过禁止访问某些资源来强制执行此操作。 launchd也没有帮助。 使用launchd,我可以正确“守护化”我的进程,保留一些套接字端口,但我没有看到任何“围栏”该进程的方式。
sandbox_init看起来更有趣,但它已被“弃用”。
这只留下了MacOS上的chroot。当然,chroot仅防止某些文件系统使用。
还有其他可用的沙盒化机制吗?
1个回答

4

Chromium仍然使用sandbox_init(),因为他们说苹果没有提供合适的替代方法。请参见seatbelt.cc

但是我怀疑做这件事的非废弃方式是使用codesign将授权的plist嵌入到二进制文件中。关于如何实现这一点,在网上并没有太多的信息,可以查看 Mac OS app, sandbox with command line tool?How to sandbox a command line tool?

您还可以使用Xcode创建一个命令行工具项目,在其上启用沙盒,并查看其的操作流程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接