首页/网络/网络排障速查/抓包权限与 capabilities(免 sudo)

抓包权限与 capabilities(免 sudo)

抓包需要 CAP_NET_RAW;生产上更安全的做法是给 tcpdump 单独授权 capabilities 或用受限用户,而不是长期放开 root 登录与 sudo。

网络排障速查网络更新于 2026-10-13

抓包权限与 capabilities 是什么

抓包需要读取原始套接字,在 Linux 上对应 CAP_NET_RAW 能力。生产环境里长期放开 root 或 sudo 风险更大,更合适的做法是给 tcpdump 这个可执行文件单独授予 capabilities,或者用受限用户加文件能力组合。要注意:能力绑定在文件上,tcpdump 被升级或替换后能力会丢失,需要重新授权;授权范围也要定期审计,避免留下被遗忘的高能力二进制。

基本信息

适用平台Linux(setcap、getcap)+ 容器(--cap-add)
所需能力CAP_NET_RAW 读原始套接字,部分场景还需 CAP_NET_ADMIN
查看方式getcap /usr/sbin/tcpdump
典型路径/usr/sbin/tcpdump 或 /usr/bin/tcpdump,按发行版不同

典型使用场景

  • 生产机免 sudo 抓包:用最小能力授权替代长期 root
  • 容器内抓包:确认容器是否具备 NET_RAW 与 NET_ADMIN
  • 安全基线核查:审计哪些文件被授予了过高能力
  • 升级后回归:tcpdump 更新后确认能力是否仍存在
  • 受限用户排障:为特定用户提供抓包能力而不提升其整体权限

权限配置

权限配置
# 授予抓包所需能力(路径按发行版实际情况调整)
sudo setcap cap_net_raw,cap_net_admin+eip /usr/sbin/tcpdump
# 查看是否已授权
getcap /usr/sbin/tcpdump
# 容器内抓包需显式添加能力(谨慎使用)
docker run --rm --net=host --cap-add=NET_RAW --cap-add=NET_ADMIN nicolaka/netshoot tcpdump -i eth0 -c 5
# 验证:以普通用户执行抓包
id -u; tcpdump -i eth0 -c 1 -nn

常见场景与要求

场景需要的能力备注
物理机普通用户抓包CAP_NET_RAW走 setcap 授权文件
容器抓包NET_RAW,必要时加 NET_ADMIN默认被丢弃,需显式添加
抓宿主机流量还需共享宿主网络命名空间仅加能力不够,需 --net=host
带文件写入的抓包通常仅 NET_RAW写文件权限由目录权限决定
给 tcpdump 授权前先确认它的真实路径:不同发行版可能是 /usr/sbin/tcpdump 或 /usr/bin/tcpdump,授权错文件不会生效,容易误判为权限配置失败。

审计与回退

审计与回退
# 列出系统中被授予能力的文件,用于安全基线核查
sudo getcap -r / 2>/dev/null | head -20
# 撤销错误或不再需要的授权
sudo setcap -r /usr/sbin/tcpdump
# 升级后核对能力是否仍然存在
dpkg -l tcpdump 2>/dev/null | tail -2
getcap /usr/sbin/tcpdump
临时排查授权与例行安全审计要分开看待:前者只需 getcap 单点确认,后者要用 getcap -r 全盘扫描并纳入基线清单,避免能力长期积累却无人知晓。
给程序加 capabilities 会扩大攻击面:只对可信且版本固定的 tcpdump 授权,并在升级或替换二进制后立即重新执行 setcap,否则能力静默失效。

易错点

  • 复制或替换二进制后能力丢失:抓包突然报权限错误,需要重新 setcap
  • 容器里抓宿主机流量却不加 --net=host:什么都抓不到,误判为没有流量
  • 授权路径写错:能力加在别的文件上,命令依旧报权限不足
  • 给 tcpdump 授予过高能力:扩大了攻击面,应遵循最小必要原则
  • 长期依赖 root 或全域 sudo 抓包:安全基线不合格,且难以审计授权范围

数据来源与参考

  • man 7 capabilities(CAP_NET_RAW)
  • man 8 setcap

相关工具

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