Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动守护程序是读取/写入Cocoa中特权文件的最佳途径吗?_Cocoa_Daemon_Privileges_Launchd - Fatal编程技术网

启动守护程序是读取/写入Cocoa中特权文件的最佳途径吗?

启动守护程序是读取/写入Cocoa中特权文件的最佳途径吗?,cocoa,daemon,privileges,launchd,Cocoa,Daemon,Privileges,Launchd,我有一个应用程序,它需要能够写入任何用户/当前主机首选项文件(每个首选项实用程序引用需要管理员权限),还需要通过其plist启用/禁用启动代理(只能由root用户写入) 我使用SFAuthorizationView要求用户在更改这些值之前以管理员身份进行身份验证 我正试图决定对这些值进行实际更改的最佳方法 廉价的黑客选项似乎是使用authorization executewithprivileges()和mv或默认值,或者通过blaauthentication或者自己创建类似的东西。这样做的缺点

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

我使用
SFAuthorizationView
要求用户在更改这些值之前以管理员身份进行身份验证

我正试图决定对这些值进行实际更改的最佳方法

廉价的黑客选项似乎是使用
authorization executewithprivileges()
mv
默认值
,或者通过blaauthentication或者自己创建类似的东西。这样做的缺点是无法获得我正在执行的任何命令行应用程序的返回值,以及我遇到的一些奇怪的深奥错误(例如在某些情况下获得-60008错误)。显然,苹果强烈反对这种做法,但人们似乎确实这样做了,并取得了一些成功

第二个最粗俗的选项似乎是使用suid位设置和
--self-repair
选项创建一个助手应用程序,正如在各个地方讨论的那样。这似乎是可能的,但它可能不会比第三种选择少多少麻烦

第三个选项是创建一个成熟的
launchd
守护进程,它将以root用户身份运行,并通过套接字与我的应用程序通信。读写一些plist文件似乎有点过火,但我也可能会发现它的其他用途,而且它不会是我的应用程序的唯一守护进程,因此只添加另一个也不是不合理的

我正在考虑为我的目的修改这个

我的两个问题是:

  • 启动守护程序选项似乎是实现这一点的最佳途径,还是我错过了一条更简单的途径

  • 是否有其他人成功地将该代码用作类似内容的基础,是否有人看到我遗漏的任何突出问题?我已经在一个测试应用程序中成功地使用了它,但我很想听听你们对它的看法

  • launchd
    绝对是最好、最安全的方法:你需要一个安装程序包来安装你的助手。一定要确保你的助手除了编辑你想要的目标文件之外,什么都不做,什么都不能做

  • 没有代码方面的经验,但它基于BetterAuthorizationSample,所以这是一个很好的开始


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

    感谢您提供有关限制帮助程序范围的建议。安装包不会是一个问题,因为我需要一个不管。