sudoers 的 defaults 参数可精细调控 sudo 行为:缩短 timestamp_timeout 防会话劫持,启用 tty_tickets+requiretty 实现终端隔离与交互式强制认证,env_reset+env_delete 清理敏感变量,logfile+log_input/log_output+syslog 强化审计追溯。

在 Linux 系统中,sudoers 文件不仅控制谁可以执行什么命令,还能通过 Defaults 参数精细调整 sudo 会话的行为,显著提升操作安全性。关键在于理解哪些参数真正影响会话生命周期、凭证验证和上下文隔离。
限制密码重用时效,防止会话劫持
默认情况下,sudo 缓存用户密码 15 分钟(timestamp_timeout),期间无需重复输入密码。攻击者若在该窗口内获取终端控制权,即可直接提权。建议缩短或禁用缓存:
-
Defaults timestamp_timeout=3:仅保留 3 分钟缓存,平衡安全与便利 -
Defaults timestamp_timeout=0:每次 sudo 命令都需重新输入密码(适合高敏环境) -
Defaults passwd_tries=2:限制连续输错密码次数,避免暴力试探
强制每次执行前重新认证(tty_tickets + requiretty)
启用 tty_tickets 后,sudo 为每个 TTY(终端会话)单独创建时间戳文件,不同终端间不共享认证状态。配合 requiretty 可防止非交互式环境(如脚本、SSH 命令行)绕过密码验证:
-
Defaults tty_tickets:确保 SSH 多标签、tmux 多窗等场景互不影响认证状态 -
Defaults requiretty:禁止后台进程或 ssh user@host 'sudo cmd' 类调用(需配合Defaults !requiretty白名单例外)
清除敏感环境变量,防止信息泄露
默认 sudo 会继承部分用户环境变量(如 HOME、PATH),可能被恶意程序利用。使用 env_reset 和 env_delete 主动清理:
-
Defaults env_reset:启用环境变量重置(推荐始终开启) -
Defaults env_delete += "SSH_AUTH_SOCK SSH_CONNECTION":显式删除 SSH 相关套接字和连接信息,阻断代理链路复用 -
Defaults env_keep += "LANG LC_*":有选择地保留本地化变量,避免命令执行异常
记录完整命令与上下文,支持事后审计
仅靠系统日志难以还原 sudo 行为全貌。启用详细日志并绑定关键上下文可大幅提升追溯能力:
-
Defaults logfile="/var/log/sudo.log":指定独立日志路径,避免混入 auth.log -
Defaults log_input, log_output:记录命令输入/输出流(需配合sudo_logsrvd或 I/O 重定向工具) -
Defaults syslog=local1:将 sudo 日志发往独立 syslog 设施,便于集中收集与告警










