是否可以以具有 sudo 权限的用户身份运行启动代理?

是否可以以具有 sudo 权限的用户身份运行启动代理?

我有一个可执行文件,需要在每次用户登录时运行。它需要在该用户的上下文中运行,但具有 root 权限,就好像用户使用 运行它一样sudo

我看过苹果的文档以及网站launchd.info寻找一种方法来做到这一点,但却找不到任何东西。

如果我创建一个启动代理(在~/Library/LaunchAgents或中/Library/LaunchAgents),或者一个具有属性集的启动守护程序UserName,它会以用户身份运行(按需要),但我无法做任何需要提升权限的事情。

如果我创建启动守护进程(在 中/Library/LaunchDaemons),它将以 root 身份运行(具有所需的权限),但没有任何用户上下文。如果我使用启动守护进程中的su <username> -c "<command>"sudo -u <username> <command>,那么我可以以用户身份运行命令,但它运行时没有 sudo 权限。

有没有办法使用 sudo 权限运行启动代理?

答案1

我不是大师,所以我不知道这是否是坏建议。如果是坏建议,我肯定会被坏建议搞死,但以下是:

如果您将密码插入用户的钥匙串,则可以在脚本中访问和使用它。

提取密码(在用户的钥匙串中存储为“scriptsudo”):

PASS=$(security find-generic-password -l "scriptsudo" -a USER -w | tr -d '\n')

在脚本中使用“chown”命令的密码:

rslt=$(echo "$PASS" | sudo -S chown -R :GR-Access /Users/XXX/folder 2>&1)

sudo 的 -S 选项告诉它从 sysin 获取密码。echo 命令使 sudo 可以使用该密码。在此示例中,sudo 命令的输出存储在“rslt”中。这不是必需的,我这样做是为了记录结果。

可以使用常用的 plist 方法从 launchd 运行该脚本。

要将“rslt”拆分为数组,请参见https://stackoverflow.com/a/45201229/8245469(错误答案 #7)

相关内容