应缩短或禁用sudo时间戳有效期以降低提权风险;默认15分钟易被利用,可通过/etc/sudoers设timestamp_timeout为0(每次验证)或1–5分钟(如defaults timestamp_timeout=3),支持按用户/组差异化配置,并配合sudo -k主动清理。

关键在于控制 sudo 的时间戳有效期,不让认证状态长期有效。默认 15 分钟的缓存期容易被他人利用,缩短或禁用它能显著降低风险。
理解密码超时机制的本质
sudo 并不真正“记住密码”,而是生成一个时间戳文件(通常在 /var/db/sudo 或 /run/sudo/ts),记录你最近一次成功认证的时间。只要该文件存在且未过期,后续 sudo 命令就跳过密码验证。攻击者只要在有效期内接入你的终端,就能直接提权执行命令。
设置合理的 timestamp_timeout 值
这是最直接有效的防护手段,通过 /etc/sudoers 文件配置:
- 设为 0:每次执行 sudo 都需输入密码,安全性最高,适合高敏环境或单人终端
- 设为 1–5:平衡安全与效率,例如 Defaults timestamp_timeout=3 表示仅缓存 3 分钟
- 避免 -1:永久有效的时间戳等于放弃防护,不应启用
使用 sudo visudo 编辑,添加或修改 Defaults 行即可生效,无需重启服务。
按用户或组差异化配置
不同角色的安全需求不同,可在 sudoers 中分层设定:
- Defaults:ops timestamp_timeout=2:运维人员允许 2 分钟缓存
- Defaults:%admin timestamp_timeout=1:管理员组统一设为 1 分钟
- Defaults:!root timestamp_timeout=0:除 root 外所有用户强制每次验证
规则按书写顺序匹配,靠后的更具体规则会覆盖前面的通用设置。
主动清理时间戳作为补充习惯
即使设置了较短有效期,手动清除仍是良好实践:
- sudo -k:使当前终端的当前用户时间戳立即失效
- sudo -K:删除全部时间戳文件,影响所有终端会话
- 可将 alias sudoclean='sudo -k' 加入 ~/.bashrc,方便一键执行
建议在完成敏感操作后、离开工位前、或共享桌面环境中养成运行 sudo -k 的习惯。










