防止sudo提权的核心是构建纵深防御体系:严格限制sudoers配置、锁定sudo版本并定期升级、启用审计与异常行为拦截、重构权限模型减少sudo依赖。

防止普通用户通过 sudo 利用 CVE 漏洞提权到 root,核心不是“堵住某一个 EXP”,而是构建纵深防御体系:从漏洞源头收敛、权限最小化、行为监控到快速响应。以下四类措施在生产环境中已验证有效。
严格限制 sudoers 配置,杜绝宽泛授权
绝大多数 sudo 提权漏洞(如 CVE-2019-14287、CVE-2021-3156、CVE-2025-32462/32463)都依赖宽松甚至错误的 sudoers 规则。必须做到:
- 禁用 ALL=(ALL)、ALL=(ALL:ALL) 这类通配符配置;禁止使用 !root 这类排除逻辑(CVE-2019-14287 正是利用该写法绕过)
- 显式指定目标用户和命令路径,例如:
deploy ALL=(www-data) /usr/bin/systemctl restart nginx,不带通配符、不加 NOPASSWD 除非绝对必要 - 启用 requiretty 和 env_reset,防止环境变量污染和伪终端绕过
- 定期用
sudo -l -U username审计每个用户的实际可执行命令,结合脚本自动扫描 /etc/sudoers 及 /etc/sudoers.d/ 下所有文件
及时升级与版本锁定
sudo 是高危组件,漏洞频发且利用门槛低。不能只靠“打补丁”,要建立主动管控机制:
- 将 sudo 版本纳入基线管理,禁止使用已知存在高危漏洞的版本(如:1.8.2–1.8.20 含 CVE-2017-1000367;1.9.0–1.9.17 含 CVE-2025-32462/32463;1.8.2–1.8.31p2 含 CVE-2021-3156)
- 在 yum/apt 源中配置版本锁(
yum versionlock sudo或apt-mark hold sudo),升级前必须经过变更评审与靶场验证 - 对无法立即升级的遗留系统,部署临时缓解措施——例如禁用 pkexec(
chmod 000 /usr/bin/pkexec)、移除 SUID 位(chmod u-s /usr/bin/sudo,仅限测试环境评估影响后操作)
启用审计与异常行为拦截
攻击者利用 sudo 提权往往伴随非常规调用模式,可通过系统级日志与运行时控制提前发现:
- 开启 sudo 日志记录:确保
/etc/sudoers中含Defaults logfile="/var/log/sudo.log"和Defaults log_input,log_output - 用 auditd 监控关键 execve 调用:
-a always,exit -F path=/usr/bin/sudo -F perm=x,并关联 UID/EUID 判断是否为非预期提权尝试 - 对容器或云主机环境,部署 eBPF 工具(如 Tracee、libbpf-based 检测器)实时识别
sudo -u#-1、sudo -h、chroot等高风险参数组合 - 将 sudo 日志接入 SIEM,设置规则告警:1 分钟内同一用户触发 >3 次失败 sudo、EUID 从非 0 突变为 0、调用参数含
#-1或超长十六进制 UID
权限模型重构:减少 sudo 依赖本身
最根本的防护,是让“需要 sudo”这件事变少:
- 用 systemd 的
DynamicUser=yes启动服务,避免长期以 root 运行守护进程 - 对运维自动化任务(如部署、备份),改用专用 service account + scoped API token,而非给普通用户 sudo 权限
- 敏感操作(如修改 /etc/shadow、加载内核模块)全部通过 PAM 或 Polkit 策略控制,禁用直接 sudo 执行
- 在开发/测试环境默认启用用户命名空间(
kernel.unprivileged_userns_clone=1),但生产环境关闭,防止被用于构造 CAP_NET_ADMIN 等能力(如 CVE-2026-46331)











