sudo密码缓存默认15分钟,可通过修改/etc/sudoers中timestamp_timeout值缩短有效期,设为0或负数则每次执行均需输密;支持按用户、命令粒度配置,并建议搭配use_pty和requiretty增强安全性。

Sudo 默认会缓存用户密码验证结果,默认有效期为 15 分钟(即 timestamp_timeout=15),在这期间重复执行 sudo 命令无需再次输入密码。但出于安全考虑,你可能希望缩短这个有效期,让管理权限“更快过期”,从而降低提权窗口被滥用的风险。
修改 /etc/sudoers 中的 timestamp_timeout
这是最直接的方式:调整 sudo 记录时间戳的有效时长(单位为分钟)。值设为 0 表示每次执行 sudo 都需重新输入密码;设为负数(如 -1)则禁用时间戳功能(完全不缓存,等效于每次都输密码)。
- 运行 sudo visudo 安全编辑配置文件
- 添加或修改这一行:Defaults timestamp_timeout=2(例如设为 2 分钟)
- 保存退出后立即生效(无需重启服务)
按用户或命令组单独设置更细粒度的超时
不同用户或不同权限范围可设定不同有效期,避免“一刀切”。例如,普通运维人员设为 1 分钟,而值班主管允许 5 分钟。
- 针对特定用户:Defaults:alice timestamp_timeout=1
- 针对某类命令(如仅限重启服务):Defaults!/sbin/reboot timestamp_timeout=0
- 组合使用 Cmnd_Alias 可进一步分类控制
配合 use_pty 和 requiretty 提升会话级安全性
单纯缩短 timestamp_timeout 不足以防范所有风险。建议搭配以下选项限制提权上下文:
- Defaults use_pty:强制 sudo 在伪终端中运行命令,防止某些绕过行为和键盘记录干扰
- Defaults requiretty:禁止从非终端环境(如 cron、SSH 无 TTY)调用 sudo,减少自动化滥用可能
- 注意:requiretty 在较新系统中默认关闭,启用前请确认脚本类任务是否受影响
检查与调试当前时间戳状态
实际环境中可通过以下方式确认设置是否生效及当前缓存状态:
- 查看当前生效的默认值:sudo -V | grep timestamp
- 手动清除已有时间戳(强制下次输密码):sudo -k
- 仅清空其他用户的缓存:sudo -k -u username
- 查看时间戳文件位置(通常为 /var/db/sudo 或 /var/lib/sudo)——不建议手动删,用 -k 更安全










