sudo 默认缓存密码验证结果,有效期由 /etc/sudoers 中 timestamp_timeout 控制,默认通常为15分钟;推荐设为0(每次需输密)或较小值,并支持按用户/组精细化配置,还可通过 sudo -k/-k 手动清除时间戳。

sudo 默认会缓存密码验证结果(即时间戳),在有效期内再次执行 sudo 命令无需重新输入密码。这个机制提升了便利性,但也带来风险:若终端被他人短暂接管(如离开座位未锁屏),攻击者可能直接执行高危命令。控制时间戳有效期是降低该风险的关键一步。
查看当前 sudo 时间戳策略
运行以下命令可查看系统当前的 timestamp_timeout 设置:
sudo -V | grep "timestamp timeout"
输出类似 timestamp timeout = 15 minutes 表示默认有效期为15分钟(多数发行版默认值)。该值由 /etc/sudoers 中的 timestamp_timeout 参数决定。
修改时间戳有效期(推荐设为 0 或较小值)
使用 visudo 安全编辑 sudoers 文件(避免语法错误导致无法提权):
sudo visudo
在文件中添加或修改以下行:
- Defaults timestamp_timeout=0:每次执行 sudo 都需重新输入密码(最安全)
- Defaults timestamp_timeout=3:有效期设为3分钟(兼顾安全与可用性)
- Defaults timestamp_timeout=-1:时间戳永不过期(不推荐,存在明显风险)
保存退出后立即生效,无需重启服务。
针对特定用户或组单独设置(精细化管控)
可在 sudoers 中为不同主体设定独立策略,例如:
- Defaults:alice timestamp_timeout=1:仅对用户 alice 设为1分钟
- Defaults:%admin timestamp_timeout=2:对 admin 组成员统一设为2分钟
- Defaults:!root timestamp_timeout=0:除 root 外所有用户均需每次验证
注意:规则顺序影响优先级,靠后的匹配项会覆盖前面的通用设置。
手动清除时间戳(应急与日常习惯)
即使设置了较短有效期,主动清理时间戳仍是良好习惯:
- sudo -k:立即失效当前用户的时间戳(下次 sudo 必须输密码)
- sudo -K:彻底删除时间戳文件(全局清除,包括其他终端会话)
- 可将 alias sudoclean='sudo -k' 加入 ~/.bashrc,方便一键清理
建议在敏感操作后、离开终端前或共享环境中养成运行 sudo -k 的习惯。










