首页/安全/应急响应速查/Linux capabilities 提权点排查

Linux capabilities 提权点排查

文件 capabilities 让普通程序获得部分 root 能力(如 cap_setuid 直接切换身份):比 SUID 更隐蔽,用 getcap 全盘检查。

应急响应速查安全更新于 2026-10-13

文件 capabilities 是什么

Linux capabilities 把 root 的特权拆成若干细粒度能力,可以单独授予某个可执行文件。例如给程序加上 cap_setuid,普通用户运行它就能任意切换身份,效果等同本地 root。它比 SUID 更隐蔽:ls -l 看不出任何特殊权限位,只能用 getcap 全盘检查。

基本信息

查看命令getcap -r /(需 root,递归全盘)
高危能力cap_setuid、cap_setgid、cap_sys_admin、cap_dac_read_search
正常样例ping 与 traceroute 的 cap_net_raw
授权命令setcap cap_net_raw+ep /path/to/bin
清除命令setcap -r /path/to/bin
与 SUID 关系并列的两类提权面,必须一起排查

典型使用场景

  • 排查本地提权点:找出被授予高能力、又可由普通用户执行的文件
  • 处置中核对业务文件是否被偷偷加上了高危能力
  • 加固巡检,建立本机正常能力基线
  • 排查「为什么这个进程能读别人的文件」这类怪现象
  • 与 SUID 文件清单一起梳理完整提权面
  • 清理测试或调试阶段遗留的授权
  • 容器镜像构建前检查基础镜像里预置的高危能力

列出全部文件能力

列出全部文件能力
sudo getcap -r / 2>/dev/null | head -n 40                     # 全盘列出文件能力
sudo getcap -r / 2>/dev/null | grep -E 'cap_setuid|cap_setgid|cap_sys_admin'   # 只看高危能力
sudo find / -perm -4000 -type f 2>/dev/null | head -n 40      # 对照:SUID 文件清单
ls -l /path/to/suspect                                        # 权限位看不出能力
sudo getcap /path/to/suspect                                  # 查看该文件的能力
sudo setcap -r /path/to/suspect                               # 清除能力后再复核

常见能力与风险

能力含义风险判断
cap_setuid切换任意用户身份等同本地 root,最高危
cap_setgid切换任意组身份常与 setuid 组合使用
cap_sys_admin近乎全能的系统管理能力与容器逃逸密切相关
cap_dac_read_search绕过文件读权限可读取任意文件内容
cap_net_raw使用原始套接字诊断类工具正常使用
capabilities 保存在文件的扩展属性里,ls -l 完全看不出来:靠权限位做安全巡检会整片漏掉这类提权配置。
清除能力前先确认业务依赖:删掉 DNS 服务或容器运行时的能力会让服务直接起不来,先用包查询与官方文档核实。
全盘 getcap 在文件量大的主机上耗时明显,可先用 find 限定常见可执行目录(/usr/bin、/usr/sbin、/usr/local/bin)快速过一遍,再做全盘核对。

易错点

  • 只查 SUID 不查 capabilities:漏掉一半提权面,本地提权点被放过
  • 把 ping 的能力当异常:先建立正常基线再比对,ping、traceroute 属正常
  • 跨机复制文件后能力丢失:能力不在包内容里,迁移脚本要单独记录与恢复
  • 发现高危能力直接清除:可能当场搞挂业务,先确认真实依赖再动手
  • 只看 /usr/bin 不看业务目录:被加能力的往往是自研或第三方程序,全盘范围不能省

数据来源与参考

  • capabilities(7) 手册
  • getcap(8) 手册

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌