通过提升的助手和SMJobBless获得root访问权限



我正在研究需要定期将文件安装到/Library中的文件夹中的东西。

我知道过去我可以使用身份验证方法之一,但这些方法在 10.7 中已被弃用。

到目前为止,我从阅读中了解到:

我应该创建一个以某种方式进行身份验证的帮助程序,并让该帮助程序执行所有移动任务。我看了一些示例代码,包括一些涉及XPC的代码和一个名为Elevator的代码,但我有点困惑。

其中很多似乎都涉及设置某种客户端/服务器模型,但我不确定这将如何转化为我实际将我的文件安装到正确的目录中。大多数示例只是传递字符串。

我的问题很简单:如何以编程方式在/Library 中创建我的文件夹并定期向其写入文件,同时只提示用户输入密码一次,再也不输入密码?我真的不确定如何处理这个问题,而且似乎没有太多文档。

你是对的,没有太多的文档。你基本上会编写另一个应用程序,帮助程序应用程序,它将与SMJobBless()一起安装。毫不奇怪,这里棘手的部分是代码签名。对我来说最不明显的部分是,每个应用程序的信息列表文件中的SMAuthorizedClientSMPrivilegedExecutables条目取决于您用于对应用程序进行签名的身份/证书。编译器/链接器还有一个技巧,可以将 info plist 文件编译到帮助工具中,它将是一个可执行文件,而不是一个捆绑包。

启动并运行帮助程序应用程序后,您必须设计一种与之通信的方法,因为这是两个不同的过程。XPC是一种选择,也许是最简单的选择。XPC 通常与服务器进程一起使用,但您在此处使用的只是 XPC 的通信端。基本上,它在两个应用程序之间来回传递字典。为字典创建标准格式。我使用了@"action","@"source"和@"destination"以及3个不同的操作值,@"filemove","@filecopy"和@"makedirectory"。这些是我的助手应用程序可以做的 3 件事,如有必要,我可以轻松添加更多。

帮助程序应用程序基本上将设置XPC连接和事件处理程序的内容,并等待连接和命令。这些命令只是一个字典,因此您可以检查适当的键/值并执行任何操作。

如果您需要更多帮助,我可以提供更多细节和代码,但这个问题已经 9 个月了,所以我不想浪费时间为您提供您已经弄清楚的详细信息。

最新更新