通过sudoers的defaults参数可提升sudo安全性:限制密码缓存时间(timestamp_timeout)、隔离终端凭证(tty_tickets)、清除危险环境变量(env_delete)、强制可信路径(secure_path)、启用详细日志(logfile、log_input等)及约束交互行为(requiretty、noexec)。

通过 sudoers 文件中的 Defaults 参数,可以显著提升用户使用 sudo 时的安全性,避免权限滥用、会话泄露和误操作风险。关键不在于禁用 sudo,而是在保留必要权限的前提下,收紧执行环境、限制生命周期、阻断危险行为。
限制密码缓存时间,防止会话劫持
默认情况下,sudo 会在 15 分钟内免密执行命令,这在共享终端或无人看管的会话中构成风险。可通过 timestamp_timeout 缩短有效期,并设置为 0 强制每次输入密码:
-
Defaults timestamp_timeout=3:仅允许连续操作后 3 分钟内免密(单位为分钟) -
Defaults timestamp_timeout=0:每次sudo均需重新认证(适合高敏环境) - 搭配
Defaults tty_tickets:为每个终端单独维护时间戳文件,避免跨 TTY 复用凭证
禁用危险环境变量,阻断 LD_PRELOAD 等注入攻击
攻击者常利用 LD_PRELOAD、PATH 或 SHELL 等变量劫持 sudo 命令执行流程。应显式清除或重置关键变量:
-
Defaults env_reset:启用环境重置(默认已开启,但建议显式声明) -
Defaults env_delete += "LD_PRELOAD LD_LIBRARY_PATH PS4 PROMPT_COMMAND":主动移除易被滥用的变量 -
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin":强制使用可信路径,绕过用户自定义PATH
强制日志记录与审计追踪
确保所有 sudo 行为可追溯,尤其对 root 权限调用和参数变更:
-
Defaults logfile="/var/log/sudo.log":指定独立日志路径(需确保 syslog 或 sudo 日志服务启用) -
Defaults log_input, log_output:记录命令的标准输入/输出(需配合sudo_logsrvd或配置syslog的local2设备) -
Defaults iolog_dir=/var/log/sudo-io/%{user}:按用户隔离 I/O 会话录屏(需启用log_input并创建目录、设置权限)
约束终端交互与执行上下文
防止 sudo 被用于启动交互式 shell 或脱离原始会话控制:
-
Defaults requiretty:强制要求必须在真实 TTY 中运行(阻止后台脚本或 SSH 非交互式提权) -
Defaults !shell_noargs:禁止仅执行sudo sh类无参数 shell(需配合NOEXEC标签进一步限制) -
Defaults noexec:禁用 exec 系统调用,阻止子进程替换(如sudo vim中执行!sh)
修改 /etc/sudoers 后务必用 sudo visudo -c 验证语法,避免锁死管理员访问。安全增强不是一劳永逸,需结合最小权限原则、定期审计日志和用户行为培训同步实施。










