timestamp_timeout控制sudo时间戳文件有效期,默认15分钟;设为0需每次验证,-1永不过期(不安全);支持按用户、组、命令精细化配置,并可用sudo -k清除缓存。

通过设置 timestamp_timeout,可以限制用户在输入一次密码后,sudo 权限自动失效的时间(单位:分钟),从而降低提权窗口期,提升系统安全性。
理解 timestamp_timeout 的作用机制
该参数控制的是“时间戳文件”的有效时长。当用户成功执行 sudo 命令后,系统会在 /var/db/sudo/(macOS)或 /var/lib/sudo/(Linux)下为该用户创建或更新一个时间戳文件。后续 sudo 命令若在此期限内发起,将跳过密码验证;超时后则需重新输入密码。
- 默认值通常为 15 分钟(不同发行版可能略有差异)
- 设为 0 表示每次执行 sudo 都需验证密码
- 设为 -1 表示时间戳永不过期(不推荐,存在安全风险)
- 负值除 -1 外均视为 0(即强制每次验证)
临时修改当前会话的 timeout 值
无需编辑配置文件,可通过命令行快速测试:
- 仅对当前 shell 会话生效:
sudo -v -n && sudo sh -c 'echo "Defaults timestamp_timeout=3" >> /etc/sudoers.d/local' - 更稳妥的做法是用
visudo编辑:sudo visudo -f /etc/sudoers.d/local,然后添加一行:Defaults timestamp_timeout=3 - 立即清除现有时间戳(强制下次 sudo 验证密码):
sudo -k
按用户或命令组精细化控制
可在 /etc/sudoers 或 /etc/sudoers.d/ 中为特定用户、用户组或命令设置独立 timeout:
- 仅对用户 alice 限制为 2 分钟:
Defaults:alice timestamp_timeout=2 - 对 %admin 组统一设为 5 分钟:
Defaults:%admin timestamp_timeout=5 - 对特定命令(如 reboot)强制每次验证:
Defaults!/sbin/reboot timestamp_timeout=0
验证与排查常见问题
修改后建议验证是否生效,并注意权限和语法细节:
- 检查语法是否正确:
sudo visudo -c,避免因格式错误导致 sudo 不可用 - 确认时间戳目录可写(尤其在 SELinux 或 macOS 上,路径和上下文可能受限)
- 测试行为:
sudo -v更新时间戳,等待设定时间后再次执行sudo ls /root,应提示输入密码 - 若未生效,检查是否被其他 Defaults 行覆盖(sudo 按读取顺序应用,后出现的同名设置会覆盖前面的)










