1

我有一个应用程序,它需要能够写入任何用户/当前主机首选项文件(这需要每个首选项实用程序参考的管理员权限),并且还需要通过其 plist 启用/禁用启动代理(只能由 root 写入)。

SFAuthorizationView过去常常要求用户在更改这些值之前以管理员身份进行身份验证。

我正在尝试确定实际更改这些值的最佳方法。

便宜的hackish选项似乎是使用AuthorizationExecuteWithPrivileges()and mvor defaults,或者通过BLAuthentication 或者我自己创建类似的东西。这样做的缺点是没有得到我正在执行的任何命令行应用程序的返回值,以及我遇到的一些奇怪的深奥错误(例如在某些情况下得到 -60008 错误)。显然,Apple 强烈建议不要这样做,但人们似乎确实这样做了,并且取得了一些成功。

第二个最骇人听闻的选项似乎是整个创建一个设置了 suid 位的助手应用程序以及--self-repair在各个地方讨论的选项。这似乎是可能的,但它可能并不比第三种选择少多少麻烦。

第三个选项是创建一个成熟的launchd守护进程,它将以 root 身份运行并通过套接字与我的应用程序通信。读取和写入一些 plist 文件似乎有点矫枉过正,但我​​也有可能在以后找到它的其他用途,而且它不会是我的应用程序的唯一守护进程,所以看起来并不合理加上另一个。

我正在考虑为我的目的修改此示例代码

我的两个问题是:

  1. launchd 守护程序选项似乎是最好的途径,还是我错过了更简单的途径?

  2. 有没有其他人成功地使用该代码作为类似东西的基础,是否有人看到我遗漏的任何明显问题?我已经在一个测试应用程序中成功使用了它,但我很想听听你们对此的看法。

4

2 回答 2

2
  1. launchd绝对是最好和最安全的方法:您需要一个安装程序包来让您的助手到位。请确保您的助手除了编辑您希望定位的文件之外什么都不做并且绝对不能做任何事情。

  2. 没有代码经验,但它基于 BetterAuthorizationSample,所以这是一个不错的开始。

于 2009-07-16T14:37:20.623 回答
0

还有openauthAPI,它允许您打开需要 root 权限的文件。

于 2009-09-16T21:32:01.690 回答