直接修改timestamp_timeout参数可缩短sudo免密窗口期,默认15分钟,设为0则每次均需输密;支持全局、用户、组及命令级精细化配置,并可用sudo -k或sudo -k手动清除时间戳。

修改全局超时时间
最常用也最直接的方式是编辑 sudoers 配置文件:
- 用 sudo visudo 安全打开配置(不要用普通编辑器,避免语法错误锁死 sudo)
- 在文件里添加或修改这一行:Defaults timestamp_timeout=2(比如设为 2 分钟)
- 保存退出后立即生效,不用重启、不用重登
常见取值含义:
- 0:每次执行 sudo 都必须重新输密码,安全性最高
- 负数(除 -1 外):等效于 0,强制每次验证
- -1:时间戳永不过期——不推荐,相当于放弃时间防护
按用户或命令单独设置
不同角色或操作敏感度不同,可以分层控制,避免“一刀切”:
- 只对用户 alice 设为 1 分钟:Defaults:alice timestamp_timeout=1
- 给运维组 %ops 统一设为 3 分钟:Defaults:%ops timestamp_timeout=3
- 对高危命令如 /sbin/reboot 强制每次验证:Defaults!/sbin/reboot timestamp_timeout=0
规则按顺序匹配,靠后的会覆盖靠前的,适合精细化权限管理。
手动清除当前时间戳
即使设置了较短有效期,主动清理仍是好习惯,尤其在执行敏感操作后或离开终端前:
- sudo -k:仅清空当前终端当前用户的时间戳,下次 sudo 就要输密码
- sudo -K:彻底删除所有时间戳文件(含其他 TTY 或 SSH 会话),适合交接或离席前
- 可加别名简化操作,比如在 ~/.bashrc 里写:alias sudoclean='sudo -k'
验证和排查设置是否生效
改完别忘了确认效果:
- 运行 sudo -V | grep "timestamp timeout",看输出是否是你设的值
- 执行一次 sudo 命令后,等待设定时间过去,再试一次 sudo,应提示输密码
- 时间戳文件通常存放在 /var/lib/sudo(Linux)或 /var/db/sudo(macOS),但不建议手动删,用 -k 更稳妥











