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

抓包权限与 capabilities(免 sudo)

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

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

权限配置

权限配置
# 一次性授予能力(发行版路径可能不同):
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
需求CAP_NET_RAW(读原始套接字);部分场景还需 CAP_NET_ADMIN
最小权限setcap 授权比长期 sudo 更可控
容器默认无 NET_RAW,需 --cap-add 或特权模式
给程序加 capabilities 会扩大攻击面:仅对可信、固定版本的 tcpdump 授权,升级后记得重新执行 setcap(新文件会丢能力)。

易错点

  • 改完权限没生效:把 tcpdump 复制/替换后 capabilities 丢失,需要重新 setcap
  • 在容器里抓宿主机流量却不加 --net=host,什么都抓不到

数据来源与参考

  • man 7 capabilities(CAP_NET_RAW)
  • man 8 setcap

相关工具

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