在 sudo 命令上设置单独的密码超时

在 sudo 命令上设置单独的密码超时

我有一个长时间运行的脚本,它以普通用户身份运行,然后在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

相关内容