首页/安全/取证与溯源速查/文件能力位(capabilities)排查
Linux 取证135 条

文件能力位(capabilities)排查

capabilities 把 root 权限拆分到具体能力,设置了 cap_setuid、cap_dac_read_search 等能力的程序可绕过常规权限模型,需单独核查。

取证与溯源速查安全更新于 2026-10-13

把 root 权限拆成能力位

capabilities 机制把传统上只有 root 才能做的事拆成若干独立能力,例如修改文件属主、绕过文件读权限检查、绑定低端口、加载内核模块。一个普通权限的可执行文件一旦被赋予某些能力,运行时就能完成对应的高权限操作,这让提权后门可以脱离 SUID 存在,靠传统的权限检查往往发现不了。

怎么清点

用 getcap 递归扫描文件系统可以得到当前所有带能力位的文件,输出里会标明具体能力。判断时要与基线对比:ping 这类工具带网络原始套接字能力属于正常,而某个位于临时目录或用户可写目录下的文件带 cap_setuid、cap_dac_read_search 则明显异常。

基本信息

适用平台Linux(libcap、内核 capabilities 支持)
命令getcap -r / 递归扫描;setcap 设置与移除
常见基线ping 的 cap_net_raw、部分网络服务的绑定低端口能力
高风险能力cap_setuid、cap_setgid、cap_dac_read_search、cap_sys_admin
注意能力存在文件的扩展属性中,复制方式不当会丢失

典型使用场景

  • 提权点排查:与 SUID 文件清单一并扫描,覆盖完整的权限异常面
  • 发现异常程序:位于用户可写目录却带高权限能力,值得深查
  • 处置前取证:记录原始能力位状态,再决定是否移除
  • 合规检查:确认关键系统文件的能力位未偏离基线
  • 打包证据:确保所用的打包方式能够保留扩展属性

清点与对照

清点与对照
# 递归扫描整个文件系统,输出带能力位的文件
getcap -r / 2>/dev/null

# 只扫当前文件系统,避免进入挂载点
find / -xdev -type f -exec getcap {} + 2>/dev/null | head

# 与 SUID 文件一起看,权限异常面才完整
find / -xdev -perm -4000 -type f 2>/dev/null | head

# 单文件确认,处置前先记录原始状态
getcap /usr/bin/ping
# getcap /tmp/suspicious 2>/dev/null

常见能力与风险

能力作用风险判断
cap_net_raw使用原始套接字ping 类工具带此项属正常
cap_net_bind_service绑定低端口网络服务常用,路径正常即可信
cap_setuid切换用户身份出现在普通程序上高度可疑
cap_dac_read_search绕过文件读权限可用于读取 shadow 等敏感文件
cap_sys_admin系统管理操作范围极广,出现即需核实
能力设置存放在扩展属性里,普通复制(如不带相应选项的 tar、cp)可能丢失。打包证据前先确认方式能保留扩展属性,否则记录状态与实物会对不上。
移除能力位用 setcap -r 文件路径,但处置前应先把原始状态写入清单;擅自清理会破坏后续核验与追责依据。

易错点

  • 只查 SUID 不查能力位:两者是并列的提权面,只查一项会漏
  • 把 ping 之类正常能力当异常:未建立基线就会产生大量误报
  • 打包证据丢失扩展属性:记录的能力状态与实物无法对应
  • 处置时先清理后取证:原始状态无法还原,追责依据消失
  • 只扫根目录不扫全部文件系统:边缘目录里的异常文件被漏掉

数据来源与参考

  • man 8 getcap(libcap)
  • capabilities(7) 手册页
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌