服务器应清理非必要的SUID/SGID文件以防提权,用find命令扫描并精准删除高危项(如mount、umount),保留passwd等必需项,结合巡检、CI/CD检查和sudo替代实现长效防护。

服务器上不该存在的 SUID 和 SGID 文件,是攻击者提权的快捷通道。清理不是为了“看起来干净”,而是把不必要的特权执行入口直接关掉。
先看清系统里有哪些特权文件
不扫一遍,你根本不知道风险藏在哪。用这两条命令快速摸底:
- 查所有 SUID 文件(属主提权):find / -xdev -type f -perm -4000 2>/dev/null
- 查所有 SGID 文件(属组提权):find / -xdev -type f -perm -2000 2>/dev/null
加 -xdev 是跳过挂载点,避免扫描 NFS 或容器卷等非根文件系统;加 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 —— 服务端基本用不到,删掉更安全
特别注意:/usr/bin/find、/usr/bin/vim、/usr/bin/nmap 这类工具一旦设了 SUID,极易被用于逃逸执行命令,除非有强审计和隔离,否则一律清除。
安全清除,不误伤也不留痕
别用模糊的批量 chmod,要逐个确认、精准操作:
- 去掉单个文件的 SUID:chmod u-s /usr/bin/chsh
- 去掉单个文件的 SGID:chmod g-s /usr/bin/write
- 验证是否生效:ls -l /usr/bin/chsh —— 原来 -rwsr-xr-x 应变成 -rwxr-xr-x(s 变成 x)
确认一批安全目标后,可用循环处理:for f in /usr/bin/mount /usr/bin/umount; do chmod u-s "$f"; done
让防护机制跑起来,不止靠手动
一次清理顶不了多久,得靠流程兜住:
- 把扫描命令写进每日巡检脚本,发现新增 SUID/SGID 文件自动告警
- 在 CI/CD 构建镜像阶段加入检查,非白名单项禁止上线
- 服务进程默认以非 root 用户运行;容器启动禁用 --privileged;挂载卷加 nosuid,noexec 选项
- 用 sudo 替代大量 SUID 命令,权限控制更细、日志更全

















