Mac 应用程序沙盒和 forkpty()

Posted

技术标签:

【中文标题】Mac 应用程序沙盒和 forkpty()【英文标题】:Mac app sandboxing and forkpty() 【发布时间】:2012-02-19 22:31:08 【问题描述】:

我希望对应用进行沙盒处理,以符合 Mac App Store 3 月 1 日的沙盒要求。我的应用程序包含一个内置终端仿真器,它利用forkpty() 调用在伪 tty 环境中启动进程。不幸的是,尽管fork() 调用工作正常,但此调用在沙箱下失败并显示错误“不允许操作”。大概forkpty() 调用需要对 /dev/ 目录的读/写访问权限以创建伪 tty(根据手册页)。我尝试添加一个具有对 / 的读/写访问权限的临时沙盒权利 (com.apple.security.temporary-exception.files.absolute-path.read-write),现在我确实可以在文件系统,但 forkpty() 调用仍然失败并出现相同的错误。有谁知道我如何让forkpty() 在沙箱下工作?

我的应用程序是一个带有内置终端模拟器和文件浏览器的编程文本编辑器,因此它本质上需要访问整个文件系统。除了forkpty() 问题之外,这个临时权利似乎可以满足我的需要。但是,Apple 会接受具有如此松散定义的临时例外权利的应用程序吗?

提前谢谢各位。我真的希望我能启动并运行这个沙盒,所以我继续通过 App Store 分发我的应用程序。

【问题讨论】:

嗯,如果你正在启动一个shell,这个shell应该有完全的权限以避免烦人,这与沙盒的想法相矛盾...... 【参考方案1】:

在沙盒应用程序中实现有用的终端仿真器是不可能的——即使在您为 PTY 设备添加权利之后,shell 最终还是与应用程序位于同一个沙盒中,从而阻止了它做很多事情。

【讨论】:

以上是关于Mac 应用程序沙盒和 forkpty()的主要内容,如果未能解决你的问题,请参考以下文章

Mac 沙盒和文件 ioctl

10.7.3 之前的 Mac App Store 沙盒和处理安全范围的书签

沙盒和简单的对象的写入和读取(预习)

沙盒和App Group

沙盒和App Group

沙盒和App Group