防范高权限进程越权的核心是“提权有边界、有痕迹、有约束”,具体包括:以专用低权限用户运行服务、禁用非必要suid/sgid、启用selinux强制访问控制、限制capabilities、结合auditd审计与实时响应。

防范高权限进程越权恶意行为,核心不是“禁止提权”,而是让提权有边界、有痕迹、有约束。关键在于:进程即使获得较高权限,也不能随意读写敏感资源、不能逃逸执行环境、不能绕过策略拦截。
以专用低权限用户运行服务进程
绝大多数系统服务(如nginx、mysql、redis)本就不该用root启动。强制降权是第一道防线。
- 修改服务单元文件(systemd),在
[Service]段添加:User=www-dataGroup=www-dataNoNewPrivileges=true(阻止后续提权) - 确保二进制文件和配置目录属主为该用户,例如:
sudo chown -R www-data:www-data /var/wwwsudo chmod 750 /etc/nginx - 禁用SUID/SGID位:
find /usr/bin -perm /6000 -ls | grep -E "(curl|ping|sudo)",对非必要SUID程序执行sudo chmod u-s
启用SELinux强制访问控制(MAC)
传统DAC(自主访问控制)靠文件权限,而SELinux在内核层拦截——即使进程以root身份运行,也无法突破策略定义的上下文边界。
- 确认已启用:
getenforce返回Enforcing;若为Permissive,编辑/etc/selinux/config设SELINUX=enforcing并重启 - 为关键服务打标并收紧策略:
sudo semanage fcontext -a -t httpd_exec_t "/usr/local/bin/myapp"sudo restorecon -v /usr/local/bin/myapp - 捕获越权尝试并生成拒绝规则:
sudo ausearch -m avc -ts recent | audit2allow -M myapp_policysudo semodule -i myapp_policy.pp
限制进程能力集(Capabilities)
避免直接给root,改用细粒度能力授权。例如Web服务只需绑定低端口,无需cap_sys_admin。
- 查看进程当前能力:
getpcaps $(pgrep nginx) - 启动时丢弃无关能力:
sudo setcap cap_net_bind_service=+pe /usr/local/bin/myapp
并在systemd服务中加:CapabilityBoundingSet=CAP_NET_BIND_SERVICEAmbientCapabilities=CAP_NET_BIND_SERVICE - 全局禁用危险能力(可选):
在/etc/security/limits.conf中加:* hard capability 0
结合auditd审计与实时响应
权限限制是防御,审计是兜底。所有高危行为(如execve调用、openat读取/etc/shadow)都应被记录并触发告警。
- 监控特权进程行为:
sudo auditctl -a always,exit -F arch=b64 -S execve -F uid!=1000sudo auditctl -w /etc/shadow -p wa -k sensitive_file_access - 将日志转发至SIEM或本地告警脚本:
在/etc/audit/rules.d/custom.rules中持久化规则,再sudo augenrules --load - 配合
faillock与pam_faildelay延缓暴力提权尝试











