![在 sudo 命令上设置单独的密码超时](https://linux22.com/image/1621018/%E5%9C%A8%20sudo%20%E5%91%BD%E4%BB%A4%E4%B8%8A%E8%AE%BE%E7%BD%AE%E5%8D%95%E7%8B%AC%E7%9A%84%E5%AF%86%E7%A0%81%E8%B6%85%E6%97%B6.png)
我有一个长时间运行的脚本,它以普通用户身份运行,然后在sudo make install
结束时(如果我没有注意到它在 5 分钟内完成)超时并失败。
在人 sudoers它描述了这个选项来改变等待的时间:
passwd_timeout' sudo 密码提示超时前的分钟数,或 0 表示无超时。如果分钟粒度不够,超时可能包含小数部分,例如 2.5。默认值为 5。
这在全球范围内有效 - 例如将超时设置为 15 秒
~ $ sudo grep passwd /etc/sudoers
Defaults passwd_timeout=0.25
~ $ sudo -k
~ $ date && sudo date && date || date
Fri 17 Apr 2020 10:23:26 CEST
[sudo] password for hali:
sudo: timed out reading password
Fri 17 Apr 2020 10:23:41 CEST
~ $
但是我想将默认的 sudo 密码超时保留为 5 分钟,但能够让 sudo
脚本中的这个特定项永远等待密码。是否可以在命令上设置单独的密码超时 sudo
,或者是否有其他方法可以让我的脚本无限期地等待我输入密码?
man 中没有提到这个密码超时设置须藤- 唯一的超时选项 -T
是“用于设置命令的超时时间。如果在命令退出之前超时到期,则命令将被终止。”
我没有尝试通过脚本输入我的密码,就像这个问题一样在一个命令行中使用密码进行 sudo 吗?也不会尝试更改凭证缓存的时间长度更改默认 sudo 密码超时
这是我的 sudo 版本:
~ $ sudo -V
Sudo version 1.8.31p1
Sudoers policy plugin version 1.8.31p1
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.31p1
答案1
手册sudo
页上说:
如果需要身份验证,则如果用户未在可配置的时间限制内输入密码,sudo 将退出。此限制是特定于策略的;sudoers 安全策略的默认密码提示超时为 0 分钟。
要配置此功能,您需要更改 sudoers 安全策略配置,但我认为您无法即时完成此操作。最简单的解决方法是使用 向用户请求密码,read
然后使用-S
标志将密码传输到 sudo 命令中。
read -s -p "Enter sudo password:" PASS # will wait as long as it takes
# do whatever you want to do with sudo, providing the password on stdin with -S
echo "$PASS" | sudo -S date