有没有办法在每次运行“sudo”时运行脚本?

有没有办法在每次运行“sudo”时运行脚本?

我正在使用 Arch Linux。这主要是为了安装东西yay,以及希望收到sudo安全监控呼叫的通知。

一个恼人但常见的问题是yay,它经常需要sudo在安装软件包的过程中调用某个地方,但我们通常不知道什么时候,并且缺少密码提示可能意味着必须为软件包重新运行一堆东西,我可以不要指望自己每 5 分钟检查一次,因为我会忘记。我希望每次yay需要时都能收到通知sudo,以便我可以输入密码并继续。

我还希望收到调用通知,sudo以便我可以更好地查看(也许还可以记录)每次sudo调用时的情况,而无需我自己显式运行它。如果每一个sudo都记录在某个地方,这样如果出现问题我可以回溯,那就太好了。

有没有办法在sudo每次调用脚本时都执行它?

答案1

鉴于 mesr 建议的 PAM 集成,我看到的另一种选择是将 sudo 配置为使用唯一标识符通过 syslog 进行记录,并让系统的 rsyslog/syslog-ng 为这些消息调用外部程序/脚本。或者也许只是记录到与 /var 中的传统日志文件不同的文件。

我手头没有示例,但如果您需要,我可以编写一个。

答案2

从字面上回答问题:是的,有这样的方法,凭借须藤的(苏多尔斯插件,更准确地说)与 PAM 集成。只需添加一行调用pam_exec.so在 中/etc/pam.d/sudo,位于 PAM 堆栈中适合脚本用途的位置。

但是,从更广泛的背景来看您的问题,可能不需要编写脚本。另一种方法可能是运行作为专用的非登录 sudoer 并配置须藤允许该用户无需密码即可运行命令。这也将回答日志问题,因为这样就可以检查须藤用户的日志和过滤器

警告!!!如果你的帐户已被禁用,使用维苏多强烈建议编辑时须藤的配置。

如果软件包在安装时尚未创建专用用户,您可以使用以下命令手动创建一个:

# useradd --system --home /tmp --shell /bin/nologin yay

添加以下行/etc/sudoers(或其中之一/etc/sudoers.d/*)将允许用户无需密码即可运行任何命令:

yay ALL=(ALL) NOPASSWD: ALL

如果你能缩小需求范围对于一组固定的命令,以下形式将只允许那些没有密码的命令(如果列表很长,您可以使用以下命令定义命令别名)Cmnd_别名):

yay ALL=(ALL) NOPASSWD: /usr/bin/something, /sbin/another, ...

然后,您可以启动像这样。一开始您仍然需要输入一次密码,但是惯于:

$ sudo -u yay yay

相关内容