![有没有办法在每次运行“sudo”时运行脚本?](https://linux22.com/image/208798/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%9C%A8%E6%AF%8F%E6%AC%A1%E8%BF%90%E8%A1%8C%E2%80%9Csudo%E2%80%9D%E6%97%B6%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我正在使用 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