直接审计SUID/SGID二进制权限是阻断本地提权最有效手段之一,需识别高风险文件、核查权限宽松性、建立基线比对机制,并实施chmod u-s、sudoers限制或capabilities替代等最小化加固措施。

直接审计关键二进制程序的执行权限位,是阻断本地提权路径最有效的手段之一。重点不是“能不能运行”,而是“谁有权限运行它、以什么身份运行它”。
识别高风险SUID/SGID可执行文件
带有SUID(setuid)或SGID(setgid)位的程序在执行时会临时获得文件所有者或所属组的权限。若这些程序存在漏洞或被滥用,极易导致普通用户提权至root或高权限组。
- 用find / -perm -4000 -type f 2>/dev/null列出所有SUID文件
- 用find / -perm -2000 -type f 2>/dev/null列出所有SGID文件
- 重点关注/usr/bin/sudo、/usr/bin/passwd、/usr/bin/chsh、/bin/ping等系统工具的实际权限和所有者
- 剔除确需SUID的合法程序(如sudo、passwd),对其他SUID文件保持高度怀疑
检查权限是否过度开放
即使程序本身合法,若其权限设置过宽(如属主为root但other可执行),也可能被构造恶意调用链利用。
- 运行ls -l /usr/bin/sudo,确认输出类似-rwsr-xr-x——即仅属主有SUID位,组和其他用户无写权限
- 警惕-rwsrwxrwx或-rwsrwxr-x这类宽松权限,尤其是非标准路径下的SUID二进制(如/tmp或/home目录下)
- 使用stat /path/to/binary查看完整权限、所有者、SELinux上下文(如启用)
定期自动化审计与基线比对
人工检查易遗漏,应建立可重复、可验证的权限基线,并纳入日常巡检流程。
- 导出当前可信SUID/SGID清单:find /usr /bin /sbin -perm -4000 -o -perm -2000 2>/dev/null | xargs ls -ld > /etc/security/suid_baseline.txt
- 每周执行比对脚本,检测新增、删除或权限变更项
- 将异常结果接入日志系统(如rsyslog或journalctl),并触发告警(例如通过auditd监控/usr/bin下文件属性变更)
- 对生产环境禁止新增SUID程序,除非经安全团队书面审批并完成漏洞评估
修复与加固建议
发现风险项后,不能只删权限,要结合业务影响做最小化处置。
- 对非必要SUID程序,直接移除SUID位:chmod u-s /path/to/binary
- 对必须保留SUID但仅限特定用户使用的程序,配合sudoers限制调用方式,而非开放全局执行
- 考虑用capabilities替代SUID(如setcap cap_net_raw+ep /bin/ping),降低权限粒度
- 启用内核保护机制:确保fs.suid_dumpable=0、kernel.yama.ptrace_scope=1等参数已生效

















