为什么盯这两个权限位
SUID 位让可执行文件以文件属主身份运行,SGID 位让它以文件属组身份运行——这正是 passwd、sudo 这类工具能改系统文件的原因,也是提权攻击最直接的落点。基线管理要求不是消灭所有 SUID 文件,而是掌握完整存量清单,并持续比对差异:重点看清单外的、近期新增的、以及位于 /home、/tmp 等可写目录里的条目。
基本信息
| SUID 扫描 | find / -xdev -type f -perm -4000 -print |
|---|---|
| SGID 扫描 | find / -xdev -type f -perm -2000 -print |
| 组合与详情 | find / -xdev -type f -perm /6000 -ls |
| 限定文件系统 | -xdev 避免跨挂载点,减少网络存储上的遍历 |
| 确认来源 | rpm -qf 文件路径(是否由软件包自带) |
| 变更方式 | chmod u-s / g-s 去掉权限位 |
典型使用场景
- 安全巡检时复核 SUID/SGID 清单与基线的差异
- 入侵排查中寻找异常提权入口
- 等保与内控检查要求提供权限位清单与处置记录
- 系统交付前建立基线文件,为后续比对提供依据
- 发现清单外条目后判断是业务需要还是遗留风险
扫描
扫描
find / -xdev -type f -perm -4000 -print 2>/dev/null # SUID 文件清单
find / -xdev -type f -perm -2000 -print 2>/dev/null # SGID 文件清单
find / -xdev -type f -perm /6000 -ls 2>/dev/null | head -60 # 组合扫描并显示权限、属主、时间
find / -xdev -type f -perm /6000 -newermt '-30 days' 2>/dev/null # 只看近 30 天新增或变更的
find / -xdev -type f -perm /6000 -print 2>/dev/null > /opt/baseline/suid-sgid-$(date +%F).txt # 落盘基线核查与处理
核查与处理
rpm -qf /usr/bin/sudo # 确认是否由软件包自带,自带的一般属正常设计
rpm -Vf /usr/bin/sudo 2>/dev/null | head # 顺带校验该文件是否被改动过
ls -l /path/to/suspicious # 看属主、时间与是否位于可写目录
chmod u-s /path/to/binary # 评估确认不需要后去掉 SUID
chmod g-s /path/to/binary # 去掉 SGID
diff <(cat /opt/baseline/suid-sgid-旧日期.txt) <(cat /opt/baseline/suid-sgid-新日期.txt) # 差异即需排查项核查优先级
| 特征 | 风险 | 处置思路 |
|---|---|---|
| 位于 /home、/tmp、/var/tmp | 任何可写目录下的提权点 | 高度可疑,优先确认来源 |
| 近期新增或修改时间异常 | 可能是新植入或被替换 | 核对安装记录与包校验 |
| rpm -qf 查不到归属 | 非软件包管理,来源不明 | 追查来源,必要时删除或移除权限位 |
| 包自带且被 rpm -V 标记为变更 | 包内工具被改动 | 重装该包恢复原始文件 |
| 业务自研程序带 SUID | 自有风险,需评估必要性 | 评估是否可改为 sudo 授权方式 |
| 系统自带认证类工具 | 正常设计 | 纳入基线,无需处理 |
passwd、su、sudo、ping、mount 等自带 SUID 属正常设计:关注点是清单外的、来源不明的以及位于可写目录中的条目。
只扫一次没有意义:先留基线清单,之后按差异比对排查新增项,这样才能把有限的排查精力放在变化上。