/etc/sudoers 中配置 defaults 参数可从会话生命周期、环境隔离、凭证验证和行为审计四层面收紧管理员操作风险:收缩 timestamp_timeout 至3分钟、启用 tty_tickets 和 requiretty、重置并清理环境变量、强制 secure_path、记录完整日志与 i/o、禁用 exec 及无参 shell、强制 use_pty。

直接在 /etc/sudoers 中配置 Defaults 参数,能从会话生命周期、环境隔离、凭证验证和行为审计四个层面收紧管理员操作风险,而不是简单限制谁可以 sudo。
缩短并隔离密码缓存窗口
默认 15 分钟的 timestamp_timeout 容易被利用——只要终端未锁屏,攻击者就能复用认证状态。应主动收缩该窗口,并绑定终端粒度:
-
Defaults timestamp_timeout=3:仅保留 3 分钟免密期,兼顾效率与防劫持 -
Defaults tty_tickets:为每个 TTY(如 SSH 单会话、tmux 窗格、GNOME 终端标签)生成独立时间戳文件,避免多开终端共享一个认证状态 -
Defaults requiretty:强制命令必须在真实交互式终端中执行,阻断ssh user@host 'sudo reboot'类非交互提权
清理危险环境变量,阻断注入路径
普通用户环境中的 LD_PRELOAD、PATH 或 SSH_AUTH_SOCK 可被用于绕过权限控制或窃取凭据:
-
Defaults env_reset:重置环境变量为最小可信集(建议显式声明,不依赖默认) -
Defaults env_delete += "LD_PRELOAD LD_LIBRARY_PATH SSH_AUTH_SOCK":精准剔除高危变量 -
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin":强制所有 sudo 命令只从系统可信路径查找二进制,忽略用户自定义 PATH
强制完整日志与输入输出记录
仅靠 auth.log 无法还原“执行了什么、输入了什么、输出了什么”。需启用结构化记录:
-
Defaults logfile="/var/log/sudo.log":写入独立日志文件,避免混杂其他系统事件 -
Defaults log_input, log_output:捕获命令的标准输入和标准输出(需确保sudo_logsrvd运行或 syslog 配置正确) -
Defaults iolog_dir="/var/log/sudo-io/%{user}":按用户隔离 I/O 录像目录,便于事后回溯具体操作流
约束执行上下文,防逃逸与误操作
管理员常在 sudo 下启动 shell 或编辑器,这类场景极易被用于提权逃逸:
-
Defaults noexec:禁用exec()系统调用,使sudo vim中的!sh或sudo less的!命令失效 -
Defaults !shell_noargs:阻止sudo sh、sudo bash这类无参数 shell 启动(需配合NOEXEC标签生效) -
Defaults use_pty:强制所有 sudo 命令通过伪终端运行,防止后台进程脱离控制、隐藏驻留










