如果我使用 运行一个耗时的命令sudo
,在它运行完成后,如果我使用 运行另一个命令sudo
,似乎我不需要再次输入密码。似乎我输入的密码在前一个命令运行时一直被缓存,并且在前一个命令运行完成后仍被缓存一段时间。
什么时候开始计算密码缓存设置的时间限制sudo
?
谢谢。
更新:
$ sudo sleep 14m ; sudo ls;
[sudo] password for t:
file file1 file2
$ sudo sleep 15m; sudo ls;
[sudo] password for t:
[sudo] password for t:
上述命令是否意味着密码缓存的时间限制从我输入密码时开始计算?
答案1
只有一每个用户的超时时间。超时的开始时间戳存储在文件中。文件的位置因操作系统而异。使用 sudo 的大多数有效操作都会重置时间戳。像这样的操作sudo -n
不会重置时间戳。像这样的操作sudo -k
将删除时间戳。
要检查该文件,您需要一个以 root 身份运行的控制台,以便能够随时列出该文件,并需要另一个控制台来启动、擦除和测试时间戳文件。
打开控制台,登录root;列出时间戳文件:
$ sudo su - [sudo] password for thisuser: ****** # ls -la /var/lib/sudo/ts/thisuser -rw------- 1 root thisuser 240 Jul 24 07:20 thisuser
在里面第二控制台,重置时间戳(大写 K):
$ sudo -K
使用第一个控制台检查文件是否已被删除。
启动新的 sudo 会话
$ sudo su - [sudo] password for thisuser: ****** # ls -la /var/lib/sudo/ts/thisuser -rw------- 1 root thisuser 240 Jul 24 07:25 thisuser
该文件中的时间是上次更新时间,可能是默认时间戳超时开始的时间点。实际上它是包含在文件内的时间戳,但在大多数情况下两者是相同的。
文档
来自 man sudoers (默认超时以分钟为单位 ( 15
))。 (强调我的)
timestamp_timeout
sudo 再次要求输入密码之前可以经过的分钟数。如果微小粒度不够,则超时可以包括小数部分,例如 2.5。默认值为 15。将其设置为 0 以始终提示输入密码。如果设置为小于 0 的值,则用户的时间戳在系统重新启动之前不会过期。这可用于允许用户分别通过 sudo-v
和 sudo创建或删除自己的时间戳。-k
也来自man sudoers
(时间戳目录(/var/lib/sudo/ts在Linux中/var/run/sudo/ts在 FreeBSD 和其他))(强调我的):
时间戳目录
sudo 存储其时间戳文件的目录。系统重新启动时应清除该目录。默认为/var/lib/sudo/ts。
答案2
这可能因操作系统而异,但在 Ubuntu 中,默认情况下您的管理权限持续 15 分钟。您可以按照此处所述修改此超时值:https://www.maketecheasier.com/change-the-sudo-password-timeout-in-ubuntu/,例如