应用程序沙箱、XPC服务和不同的权限

4
我的Cocoa应用程序设计是一个单一的.app文件(用户界面)和三个XPC服务。
主要应用程序需要只读文件来显示powerbox并在UI中显示所选路径。
  • com.apple.security.app-sandbox
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.read-only

两个XPC服务需要文件只读

  • com.apple.security.app-sandbox
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.read-only

一个XPC服务需要文件读写

  • com.apple.security.app-sandbox
  • com.apple.security.files.bookmarks.app-scope
  • com.apple.security.files.user-selected.read-write
由于用户交互的流程,主应用程序打开一个电源框对话框,允许用户选择目录并在UI中显示它。然后,主应用程序将其保存为安全范围的书签。书签数据根据需要通过XPC连接发送,并且每个单独的XPC进程解析书签以在其自己的沙箱中访问这些文件。
问题是,除非我将打开电源框的主应用程序设置为具有文件读写访问权限,否则需要写访问权限的XPC服务将无法获得它,即使其授权文件指定了文件读写访问权限。以下内容记录在控制台中:
deny file-write-unlink <file path>

唯一的解决方法是给打开powerbox文件的主应用程序授予读写权限,或重新设计UI流程,使需要写入访问权限的进程显示powerbox。最终目标是让每个进程拥有尽可能少的权限。理想的权限是在主.app进程中没有文件访问权限,在两个XPC服务中具有文件只读权限,在一个XPC服务中具有文件读写权限。谢谢!
编辑: Powerbox and File System Access Outside of Your Container:
与用户交互以扩展您的沙箱的OS X安全技术称为Powerbox。 Powerbox没有API。使用NSOpenPanel和NSSavePanel类时,您的应用程序会透明地使用Powerbox。

我已经更新了我的问题,并附上了与Powerbox相关的文档链接。 - user836263
1个回答

5

我不是沙箱专家,但是就算是编写它的人也不是。开玩笑!

总之,从架构上讲,如果嵌入式XPC服务只允许使用包含应用程序的子集,那么这是有道理的。可以提出反对意见,但支持的论点是:如果应用程序必须在顶层声明所有内容,并且较低级别(XPC)只允许做的事情不多或更少,那么系统和用户更容易理解应用程序可能做什么。

尽管尽可能将您的权限保持较小是值得钦佩的,但在这种情况下,您确实需要打开文件进行读写,因此最好声明它。


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