应用程序沙盒,XPC服务和不同的权利

时间:2014-01-09 02:29:48

标签: macos cocoa appstore-sandbox entitlements xpc

我的cocoa app设计是单个.app(UI)和三个XPC服务。

主应用需要文件只读以显示powerbox并在用户界面中显示所选路径

  • com.apple.security.app的沙箱
  • com.apple.security.files.bookmarks.app-范围
  • com.apple.security.files.user-selected.read仅

其中两个XPC服务需要文件只读

  • com.apple.security.app的沙箱
  • com.apple.security.files.bookmarks.app-范围
  • com.apple.security.files.user-selected.read仅

一个XPC服务需要文件读写

  • com.apple.security.app的沙箱
  • com.apple.security.files.bookmarks.app-范围
  • com.apple.security.files.user-selected.read写

由于用户交互流程,主应用程序打开一个电源箱对话框,允许用户选择目录并在UI中显示。然后主应用程序将其保存为安全范围的书签。书签数据根据需要通过XPC连接发送,每个单独的XPC进程都会解析书签,以便在自己的沙箱中访问这些文件。

问题是,除非我将主应用程序(打开电源箱)设置为具有文件读写访问权限,否则即使其权利,需要写访问权限的XPC服务也不会获得它file指定文件读写访问。控制台中记录以下内容:

deny file-write-unlink <file path>

唯一能解决这个问题的方法是打开powerbox文件读写权利的主应用程序,或重新设计UI流程,以便需要写访问权限的进程显示电源箱?最终目标是让每个进程拥有尽可能少的权限。理想的权利是在主.app进程中没有文件访问权限,两个XPC服务具有文件只读和一个XPC服务文件读写。谢谢!

修改

Powerbox and File System Access Outside of Your Container

  

OS X安全技术,与用户交互以进行扩展   你的沙盒叫做Powerbox。 Powerbox没有API。您的应用使用   使用NSOpenPanel和NSSavePanel时,Powerbox透明   类。

1 个答案:

答案 0 :(得分:4)

我不是沙盒中的专家,但是,嘿,甚至不是那些写它的人。诚!

无论如何,在架构上,嵌入式XPC服务只允许包含应用程序的一个子集,如果确实发生了这种情况,那么它是有道理的。可以针对它进行争论,但争论的结果是系统和用户更容易理解应用程序可能会做什么,如果它必须在顶级声明一切,而较低级别(XPC)只是允许做多或少。

虽然尝试保持您的权利尽可能小是令人钦佩的,但在这种情况下,您确实打开了一个用于读写的文件,所以您不妨声明它。