首页/安全/漏洞与攻击面速查/SUID/SGID 文件盘点与收敛
主机与服务风险面53 条

SUID/SGID 文件盘点与收敛

带 SUID/SGID 位的可执行文件以文件属主权限运行,是本地提权的常见观察点;存量盘点、与包管理器对账、以及对新增项的监控是主要手段。

漏洞与攻击面速查安全更新于 2026-10-13

SUID/SGID 为什么值得盘点

带 SUID 位的可执行文件以文件属主(通常是 root)权限运行,带 SGID 位的文件以属组权限运行。它们既是系统正常功能(passwd、sudo、ping 都需要),也是本地提权的常见观察点:任何一个存在缺陷或被误配的 SUID 程序,都可能把普通用户变成 root。适用平台为 Linux 与类 Unix 系统。

基本信息

适用系统Linux、BSD 等类 Unix
盘点目标-perm -4000(SUID)与 -perm -2000(SGID)
权限要求读取全盘目录需 root,审计用普通用户可跳过无权限项
对账方式与包管理器的文件清单比对
监控手段建立基线清单,新增项触发告警

典型使用场景

  • 存量盘点:新接手主机时先摸清有哪些 SUID/SGID 文件
  • 合规检查:基线要求说明每个 SUID 文件的必要性
  • 变更监控:定期比对清单,发现『新增』这类异常
  • 提权排查:应急时按 SUID 清单逐个核对是否为已知后门
  • 挂载加固:对 /tmp、/home 等目录应用 nosuid,缩小可利用面

盘点与对账

盘点与对账
find / -xdev -perm -4000 -type f 2>/dev/null | sort        # SUID
find / -xdev -perm -2000 -type f 2>/dev/null | sort        # SGID
find / -xdev \( -perm -4000 -o -perm -2000 \) -type f -ls  # 含属主与属组
rpm -qf /usr/bin/passwd                                    # RPM 系:确认文件属于哪个包
dpkg -S /usr/bin/sudo                                     # DEB 系:反查归属包
debsums -e /usr/bin/sudo                                   # 校验文件是否被改动

常见文件与风险判断

文件正常用途风险信号
/usr/bin/passwd用户改密被替换或版本异常
/usr/bin/sudo提权执行命令sudoers 过宽比 SUID 本身更危险
/bin/ping原始套接字现代发行版多已改用 cap_net_raw
解释器类文件不应有 SUID被误加 SUID 时影响面极大
自研脚本通常不需要历史上多为临时『解决问题』留下
现代 Linux 对 ping 等程序更多使用能力位(cap_net_raw)而不是 SUID,因此盘点时同时查看 getcap -r / 的输出,否则会漏掉真正的权限来源。
许多教程式配置会把权限放宽到 4755 来『解决问题』,盘点时应优先复核这类历史遗留,它们往往无人认领也无人敢动。
盘点结果要按主机类型分组:Web 服务器与数据库服务器的合理清单差异很大,同一份基线套到所有机器上会产生大量无意义的例外申请,最终没人再看这份清单。

复核节奏建议

  • 每月自动跑一次盘点并与基线比对,差异直接进工单
  • 每季度人工复核一次基线本身:新增软件带来的合理 SUID 项要登记入基线
  • 重大变更(装机、装中间件、运维脚本上线)后即时复查,不等下个月

易错点

  • 只做一次性盘点,没有变更监控:新增的异常 SUID 文件无法及时发现
  • 给解释器或脚本加 SUID:等于开放任意代码以 root 执行,风险远超普通工具
  • 只清 SUID 忽略能力位:用 getcap 设置的权限同样可被利用
  • 根目录未加 xdev 导致扫描跨越挂载点:耗时极长且结果被网络目录污染

数据来源与参考

  • CIS Benchmark(Linux 文件权限基线)
  • man7.org(find 手册)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌