应去除不必要的suid/sgid文件以防范权限提升攻击;需先用find / -type f -perm -4000和-perm -2000扫描,保留passwd、sudo等必要项,移除mount、chsh等高风险文件,再用chmod u-s/g-s精准清除,并纳入自动化巡检与镜像构建管控。

服务器上残留的 SUID 和 SGID 权限是权限提升攻击的常见入口,尤其在生产环境中,多数这类文件并不真正需要特权运行。关键不是“能不能用”,而是“该不该有”——能去掉的,就该去掉。
识别哪些文件设置了 SUID/SGID
先全面摸底,避免误删或漏查:
- 查找所有 SUID 文件(属主提权):find / -type f -perm -4000 2>/dev/null
- 查找所有 SGID 文件(属组提权):find / -type f -perm -2000 2>/dev/null
- 加参数精简输出,例如只看 /usr/bin 和 /bin 下的:find /usr/bin /bin -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null
区分必要与非必要特权文件
不是所有带 s 位的文件都要删。核心原则:仅保留业务强依赖且无替代方案的少数几个。
- 通常必须保留:/usr/bin/passwd(普通用户改密必需)、/usr/bin/sudo(若启用 sudo 管理)
- 高风险且常可移除:/bin/mount、/bin/umount、/usr/bin/chsh、/usr/bin/newgrp、/usr/bin/write
- 桌面环境才需考虑保留:/usr/bin/gpasswd、/usr/bin/chfn,服务器场景建议禁用
安全清除特权位的操作方式
清除操作要精准、可回溯,不建议直接批量 chmod:
- 去掉单个文件的 SUID:chmod u-s /usr/bin/chage
- 去掉单个文件的 SGID:chmod g-s /usr/bin/write
- 确认已生效:执行 ls -l /path/to/file,原显示 -rwsr-xr-x 的,现在应变为 -rwxr-xr-x(s 变为 x 或 -)
- 如需批量处理已确认安全的路径,可用循环:for f in /usr/bin/chsh /usr/bin/mount; do chmod u-s "$f"; done
建立长效管控机制
人工清理是一次性动作,持续防护靠流程和自动化:
- 将 SUID/SGID 扫描加入日常巡检脚本,例如每天凌晨运行并邮件告警新增项
- 在 CI/CD 流程中对基础镜像做构建时检查,禁止含非白名单 SUID/SGID 的镜像上线
- 配合最小权限原则:服务进程以非 root 用户运行,容器内禁用 --privileged,挂载卷时加 noexec,nosuid 选项
- 定期 review sudoers 配置,用 sudo 替代大量 SUID 命令,更细粒度可控











