我有一个应用程序需要能够写入任何用户/当前主机首选项文件(这需要每个“首选项实用程序参考”的管理员权限),还要通过其plist启用/禁用启动代理(仅可由root写入) 。
我正在使用SFAuthorizationView
要求用户在更改这些值之前以管理员身份进行身份验证。
我正在尝试确定实际更改这些值的最佳方法。
廉价的hackish选项似乎是使用AuthorizationExecuteWithPrivileges()
和mv
或defaults
,通过BLAuthentication或自己创建类似的东西。这样做的缺点是没有得到我正在执行的任何命令行应用程序的返回值,加上我遇到的一些奇怪的深奥错误(例如在某些情况下得到-60008错误)。很明显,苹果公司强烈推荐这样做,但人们似乎确实这样做并且取得了一些成功。
第二个最糟糕的选择似乎是整个创建一个辅助应用程序,其中包含suid位设置和--self-repair
选项,如各处讨论的那样。这似乎是可能的,但是它可能没有第三种选择那么麻烦。
第三个选项是创建一个完全成熟的launchd
守护进程,该守护进程将以root身份运行并通过套接字与我的应用程序通信。这对于读取和写入一些plist文件似乎有些过分,但是我也可能会在其中找到其他用途,它不会是我的应用程序的唯一守护进程,所以它似乎不合理添加另一个。
我正在考虑为我的目的修改此sample code。
我的两个问题是:
launchd守护程序选项看起来是最好的选择吗,还是我错过了一条更容易的路线?
是否还有其他人成功使用该代码作为类似内容的基础,是否有人看到任何明显的问题我都错过了?我在测试应用程序中成功使用它,但我很想听听你们对它的看法。
答案 0 :(得分:2)
launchd
绝对是最好,最安全的方式:你需要一个安装程序包才能让你的助手到位。除了编辑你想要定位的文件外,确保你的帮助者能够做到并且除了编辑你想要定位的文件之外什么都不做。
没有代码的经验,但它基于BetterAuthorizationSample,所以这是一个不错的开始。
答案 1 :(得分:0)
还有openauth
API,允许您打开需要root权限的文件。