sudo 默认15分钟免密,通过/etc/sudoers中defaults timestamp_timeout控制:0为每次验证,-1永不过期(不安全),正整数设分钟数,空值或注释用默认值;visudo编辑,sudo -k清空当前用户时间戳,tmout可联动shell空闲自动登出。

sudo 权限默认有时间戳(timestamp)机制,即用户成功输入一次密码后,在一定时间内(默认 15 分钟)再次执行 sudo 命令无需重复验证密码。这个有效期可调整,也可配合自动注销实现更严格的安全控制。
修改 sudo 时间戳有效期(timeout)
通过 /etc/sudoers 文件中的 timestamp_timeout 参数控制有效期(单位:分钟):
- 设为 0:每次执行 sudo 都需重新输入密码
- 设为 -1:时间戳永不过期(不推荐,存在安全风险)
- 设为正整数(如 5):5 分钟内免密,超时后需重输密码
- 设为 空值或注释掉:使用默认值(通常为 15 分钟)
配置方法(使用 visudo 安全编辑):
sudo visudo在文件中添加或修改行:
Defaults timestamp_timeout=5清除当前用户的时间戳(手动失效)
用户可主动清空自己的 sudo 时间戳,强制下次 sudo 需验密:
sudo -k若要清除所有用户(包括其他终端会话)的时间戳,需 root 权限运行:
sudo sudo -k注意:sudo -K(大写 K)会彻底删除时间戳文件(更彻底),而 -k 是使当前用户时间戳失效。
结合 shell 空闲超时自动注销(增强 sudo 安全)
仅调 sudo timeout 不够——用户可能长时间保持终端登录且未操作,但 sudo 时间戳仍有效。可通过 shell 空闲超时联动实现自动退出:
- 在用户 shell 配置文件(如 ~/.bashrc 或 /etc/bash.bashrc)中设置:
export TMOUT=300(5 分钟无操作自动登出) - 确保 ignoreeof 未启用(避免 Ctrl+D 被忽略),或配合 readonly TMOUT 防止用户覆盖
- 该设置不影响图形界面终端,仅对交互式 bash/sh 有效;SSH 连接还可额外配置 ClientAliveInterval 和 ClientAliveCountMax 在服务端强制断连
验证与排查常见问题
确认当前时间戳状态:
sudo -n true 2>/dev/null && echo "有效" || echo "已过期或无权限"查看时间戳文件位置(通常为 /var/run/sudo/ts/用户名 或 /var/db/sudo/ts/用户名,取决于系统);注意该文件由 sudo 自动管理,不应手动修改。
若修改 sudoers 后不生效,请确认:
- 是否用 visudo 编辑(避免语法错误导致 sudo 失效)
- 是否遗漏 Defaults 前缀(直接写 timestamp_timeout=5 无效)
- 是否针对特定用户/组设置了冲突的 Defaults 行(后者优先级更高)










