我想开始许多需要root权限的NSTasks,我发现我应该使用Apple的授权工具包,我找到了专门为此设计的STPrivilegedTask.
问题是,当我启动STPrivilegedTask时,它会每次都询问我的root密码.有没有办法输入第一个特权任务的root密码,然后对于其他任务,应用程序将记住root密码,这样用户就不必再次输入密码?
小智 1
根据您的用例,您可能会很高兴将authorizationRefin的初始化替换STPrivilegedTask -launch为诸如...
// create authorization reference\nstatic AuthorizationRef authorizationRef = NULL;\n@synchronized(self) {\n if (!authorizationRef) {\n err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);\n if (err != errAuthorizationSuccess) { return err; }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n...然后删除AuthorizationFree:
// free the auth ref\nAuthorizationFree(authorizationRef, kAuthorizationFlagDefaults);\nRun Code Online (Sandbox Code Playgroud)\n\n这将允许您在五分钟内启动任务而无需密码提示。
\n\n如果您需要更多控制,请创建一个使用普通命令执行所需命令的Command Line Tool命令XcodeNSTask。
STPrivilegedTask当您使用或启动该工具时AuthorizationExecuteWithPrivileges,NSTask命令将以管理员权限运行(euid = 0 ) 运行。
SM工作祝福是启动 \xe2\x80\x94 工具的方法,特别是当您需要定期执行特权操作而不提示输入密码时。
\n\n使用正确的方法来做到这一点要困难得多AuthorizationExecuteWithPrivileges。
注意事项SMJobBless
SMJobBless提示输入密码并安装帮助程序。
当您与助手交谈时,不会出现密码提示。
\n\n\n\n某些页面建议只允许您的应用程序与您的助手交谈。苹果在任何地方都没有这么说。安装助手后,我很确定任何人都可以与它交谈。
\n\n您可能可以强制执行代码签名要求(本文档PROPERTY LISTS的部分),但我找不到任何这样做的示例。
我AuthorizationExecuteWithPrivileges几年前使用过安装launchd守护进程,但我还没有纠结过SMJobBless。
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |