gpt4 book ai didi

macos - STPrivilegedTask 要求为每个任务输入密码

转载 作者:行者123 更新时间:2023-12-04 01:14:18 29 4
gpt4 key购买 nike

我想启动很多需要 root 权限的 NSTasks,我发现我应该使用 Apple 的 Authorization Kit,我找到了 STPrivilegedTask,它是为此而设计的。

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

最佳答案

根据您的用例,您可能会很高兴只需替换 authorizationRef 的初始化即可。在 STPrivilegedTask -launch像...

// create authorization reference
static AuthorizationRef authorizationRef = NULL;
@synchronized(self) {
if (!authorizationRef) {
err = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
if (err != errAuthorizationSuccess) { return err; }
}
}

...然后删除 AuthorizationFree :
// free the auth ref
AuthorizationFree(authorizationRef, kAuthorizationFlagDefaults);

这将允许您在没有密码提示的情况下启动任务 five minutes .

如果您需要更多控制,请创建 Command Line ToolXcode使用普通 NSTask 执行所需的命令调用。

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

SMJobBless是 future 启动工具的方式——特别是如果您需要定期执行特权操作,而不提示输入密码。

它是 much harder使用 AuthorizationExecuteWithPrivileges 正确地做到这一点.

关于SMJobBless的注意事项
SMJobBless提示输入密码并安装帮助程序。

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

Apple's own example关于这一点相当复杂,但有 other examples在那里。

有些页面建议只允许您的应用程序与您的助手交谈。苹果没有在任何地方这么说。安装好助手后,我很确定 anyone can talk to it .

您可以自己强制执行代码签名要求( this documentPROPERTY LISTS 部分),但我找不到任何这样做的示例。

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

关于macos - STPrivilegedTask 要求为每个任务输入密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31653934/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com