关键在于从账户、权限、执行链和监控四层面切断提权路径:禁用root远程登录(PermitRootLogin no)、锁定本地root密码(passwd -l root)、普通用户不加入sudo组、sudo权限命令级白名单化、服务降权运行(User=nginx等)、启用auditd监控sudo调用及EUID变更。

避免普通用户越权提权,关键在于从账户、权限、执行链和监控四个层面切断提权路径。不是靠某一个开关,而是让每一步都“卡住”非授权行为。
账户与登录入口必须收窄
禁用 root 远程登录是第一道硬门槛。在 /etc/ssh/sshd_config 中设 PermitRootLogin no,再执行 sudo passwd -l root 锁定本地 root 密码。所有运维人员使用独立账号(如 ops 或 admin),不加入 wheel 或 sudo 组。普通用户账户禁止设置 shell(/sbin/nologin),删除系统默认无用账户(如 games、lp、ftp)。
sudo 权限必须命令级白名单化
绝不能出现 ALL=(ALL) ALL 或 ALL=(ALL:ALL) 这类通配配置。每个 sudo 规则要精确到:目标用户、绝对路径命令、是否需要密码。例如:
- deploy ALL=(www-data) /usr/bin/systemctl restart nginx
- backup ALL=(root) /usr/bin/rsync --archive /data/ /backup/
禁用 !root 等排除逻辑(CVE-2019-14287 利用点),启用 requiretty 和 env_reset。定期运行 sudo -l -U username 验证实际可执行项,并用脚本扫描 /etc/sudoers 及 /etc/sudoers.d/ 下全部文件。
服务与进程必须降权运行
Web 服务(如 Nginx、PHP-FPM)、数据库(如 MySQL)、中间件等,一律禁止以 root 启动。在 systemd unit 文件中明确指定:
- User=nginx、Group=nginx
- NoNewPrivileges=true(阻止 execve 提权)
- ProtectSystem=strict(锁定 /usr、/boot、/etc 为只读)
- ProtectHome=true(屏蔽 /home 和 /root)
PHP 进程应以 www-data 或专用低权用户运行;MySQL 应用账号禁止授予 DROP、ALTER、FILE、SUPER 等高危权限,且 Host 必须限定为具体 IP 或内网段,禁用 %。
审计与异常行为必须实时捕获
开启 sudo 审计:在 /etc/sudoers 中添加 Defaults logfile="/var/log/sudo.log" 和 Defaults log_input,log_output。用 auditd 监控关键调用:
- -a always,exit -F path=/usr/bin/sudo -F perm=x
- 关联 UID/EUID 判断是否发生 EUID 从非 0 突变为 0 的提权尝试
将日志接入 SIEM,设置告警规则:1 分钟内同一用户触发 >3 次失败 sudo、调用 sudo -u#-1 或 pkexec 等高风险组合。对无法立即升级的旧版 sudo(如含 CVE-2025-32462 的 1.9.12),临时移除 SUID 位(chmod u-s /usr/bin/sudo)或禁用 pkexec(chmod 000 /usr/bin/pkexec)。

















