STPrivilegedTask要求为每个任务提供密码

Usm*_*sar 12 macos helper

我想开始许多需要root权限的NSTasks,我发现我应该使用Apple的授权工具包,我找到了专门为此设计的STPrivilegedTask.

问题是,当我启动STPrivilegedTask时,它会每次都询问我的root密码.有没有办法输入第一个特权任务的root密码,然后对于其他任务,应用程序将记住root密码,这样用户就不必再次输入密码?

小智 1

根据您的用例,您可能会很高兴将authorizationRefin的初始化替换STPrivilegedTask -launch为诸如...

\n\n
// 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}\n
Run Code Online (Sandbox Code Playgroud)\n\n

...然后删除AuthorizationFree

\n\n
// free the auth ref\nAuthorizationFree(authorizationRef, kAuthorizationFlagDefaults);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将允许您在五分钟内启动任务而无需密码提示

\n\n

如果您需要更多控制,请创建一个使用普通命令执行所需命令的Command Line Tool命令XcodeNSTask

\n\n

STPrivilegedTask当您使用或启动该工具时AuthorizationExecuteWithPrivilegesNSTask命令将以管理员权限运行(euid = 0 ) 运行。

\n\n

SM工作祝福是启动 \xe2\x80\x94 工具的方法,特别是当您需要定期执行特权操作而不提示输入密码时。

\n\n

使用正确的方法来做到这一点要困难得多AuthorizationExecuteWithPrivileges

\n\n

注意事项SMJobBless

\n\n

SMJobBless提示输入密码并安装帮助程序。

\n\n

当您与助手交谈时,不会出现密码提示。

\n\n

苹果自己的例子相当复杂,但还有其他例子

\n\n

某些页面建议只允许您的应用程序与您的助手交谈。苹果在任何地方都没有这么说。安装助手后,我很确定任何人都可以与它交谈

\n\n

您可能可以强制执行代码签名要求(本文档PROPERTY LISTS的部分),但我找不到任何这样做的示例。

\n\n

AuthorizationExecuteWithPrivileges几年前使用过安装launchd守护进程,但我还没有纠结过SMJobBless

\n