Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

捕获权限

抓包权限的核心边界是:Wireshark 图形界面不应长期以管理员或 root 身份运行;真正需要高权限的是底层捕获组件、驱动或设备访问。安全做法是只把捕获所需的最小权限授给 dumpcap、Npcap/NPF、BPF、usbmon 或容器 capability,而不是把整个分析程序放进最高权限环境。

适用场景:解决“看不到接口”“不能开始实时捕获”“容器/虚拟机里无法混杂模式抓包”“USB 或 802.11 等特殊接口权限不足”。不要把它和抓包位置混淆;即使权限正确,如果交换机没有把目标流量送到你的接口,仍然抓不到。

先判断缺的是哪层权限

环境需要授权的对象推荐边界常见误区
WindowsNpcap/WinPcap NPF 驱动访问普通用户运行 Wireshark,驱动按需或受限授权长期以 Administrator 运行 Wireshark
Linuxdumpcap 的 CAP_NET_RAWCAP_NET_ADMIN,或受限 setuid只给 dumpcap 权限,并限制到 wireshark 组直接用 root 跑整个 Wireshark
BSD/macOS/dev/bpf* 读权限调整 BPF 设备权限或启动项只改一次权限却忘了 devfs 重启后会重建
容器主机和容器的 NET_RAW/NET_ADMIN capabilities只授予必要 capability给容器完整特权模式
虚拟机虚拟化平台允许混杂模式在宿主机/虚拟交换机上开启只在 guest 内设置混杂模式
USB/无线/extcap对应设备或 extcap 的额外权限按具体捕获类型单独授权以为普通网络捕获权限覆盖所有类型

总原则

  • 优先让 Wireshark GUI 或 TShark 以普通用户运行。
  • 只给负责捕获的组件必要权限,例如 dumpcap、Npcap 驱动、BPF 设备或 usbmon 设备。
  • 把可抓包用户限制到明确的本地管理员或专用组。
  • 抓包权限等同于读取网络或设备上的敏感数据,应按安全权限管理。
  • 特殊捕获类型可能需要额外授权,例如原始 USB、monitor mode 802.11、androiddump 等 extcap。

容器

容器内运行 Wireshark 或 dumpcap 时,容器内部权限不够;宿主机也必须允许容器拥有捕获需要的 capability。Linux 容器通常需要与 Linux dumpcap 类似的 NET_RAWNET_ADMIN

为安全起见,只添加这两项 capability,而不是给容器完整特权。

Docker 示例:

text
--cap-add=NET_ADMIN --cap-add=NET_RAW

Docker Compose 示例:

text
cap_add:
  - NET_ADMIN
  - NET_RAW

Kubernetes 示例:

text
securityContext:
  capabilities:
    add: ["NET_ADMIN", "NET_RAW"]

Podman 示例:

text
--cap-add=NET_ADMIN --cap-add=NET_RAW

Podman Quadlet 示例:

text
AddCapability=CAP_NET_ADMIN CAP_NET_RAW

Flatpak

Flatpak 同时是打包机制和沙盒环境。原始页面指出,Wireshark 的 Flatpak 包不能在网络适配器上进行普通实时捕获;它可以读取已有捕获文件,并且可能通过 extcap 捕获部分流量。

如果目标是本机网卡实时抓包,应使用非 Flatpak 的安装方式,或选择符合权限需求的部署方式。

虚拟机

在虚拟机内抓包时,guest 系统里的权限只是其中一层。宿主机虚拟化平台还必须允许虚拟网卡进入 promiscuous mode,并允许目标流量到达该虚拟网卡。

需要同时检查:

  • guest OS 内的 Wireshark/dumpcap 权限。
  • 虚拟交换机或端口组是否允许 promiscuous mode。
  • 虚拟机连接的网络模式是否能看到目标流量。

Windows

Windows 上实时捕获依赖 Npcap 或 WinPcap 驱动(NPF)。加载驱动需要管理员权限;驱动加载后,哪些本地用户能抓包取决于驱动安装和访问限制。

Npcap 支持把驱动访问限制为仅 Administrators;WinPcap 不支持同等限制。较新 Npcap 版本会在启动时加载驱动,以避免 Windows 10 及更高版本上按需加载导致的网络连接中断问题。停止 Wireshark 不等于停止 NPF 驱动。

Windows 方案对比

方案安全性使用便利性适用情况
以 Administrator 运行 Wireshark简单临时应急,不建议长期使用
系统启动时自动加载 NPF,且不限制访问较差最方便受控实验机;所有本地用户都可能抓包
自动加载 NPF,并限制为 Administrators较好可能出现 UAC 提示多用户机器或更重视访问控制时
手动启动/停止 NPF最小暴露时间麻烦安全要求较高、偶发抓包

手动启动和停止 NPF 的原始示例:

text
runas /u:administrator "net start npf"
runas /u:administrator "net stop npf"

早期 Npcap 或 WinPcap 可通过命令把 NPF 服务设置为自动启动:

text
sc config npf start= auto

在 Vista 及以后版本执行该命令需要 Administrator 权限。

大多数 UNIX

Wireshark 支持 privilege separation:Wireshark GUI 或 TShark CLI 以普通用户运行,负责捕获的 dumpcap 以更高权限运行。这比让整个 Wireshark 进程以 root 运行更安全,因为 Wireshark 的大部分协议解析代码仍在普通用户权限下执行。

Linux 发行版包

许多 GNU/Linux 发行版会通过包管理器配置 dumpcap,使非 root 用户可以抓包,但默认策略不同。

发行版/安装方式原始页面描述操作思路
Debian、Ubuntu 及衍生版安装后非 root 用户不会自动获得捕获权限按发行版 Wireshark Debian README 流程启用非 root 捕获
Fedora 及衍生版官方包添加 wireshark将用户加入该组,重新登录
Arch Linux 及衍生版官方包添加 wireshark将用户加入该组,重新登录
其他 Linux 或手动安装可能需要手动配置 dumpcap使用 capability 或受限 setuid

Linux 手动配置 dumpcap

如果内核和文件系统支持 file capabilities,优先给 dumpcap 设置网络 capability:

text
sudo setcap cap_net_raw,cap_net_admin+eip /usr/sbin/dumpcap

如果 dumpcap 位于 /usr/bin,应把路径替换为实际路径。

如果不支持 file capabilities,原始页面给出的后备方案是 setuid root:

text
sudo chown root /usr/sbin/dumpcap
sudo chmod u+s /usr/sbin/dumpcap

setuid root 的安全边界更粗,应优先使用 capabilities,并把可执行 dumpcap 的用户限制到专用组。

限制到 wireshark 组

可用专用组限制谁能执行带捕获权限的 dumpcap:

text
sudo groupadd --system wireshark
sudo gpasswd -a $USER wireshark

重新登录,或使用 newgrp wireshark,再验证组成员关系。然后把 dumpcap 归属到该组并移除其他用户执行权限:

text
sudo chgrp wireshark /usr/sbin/dumpcap
sudo chmod o-rx /usr/sbin/dumpcap

注意:更改文件组可能会清除 file capabilities 或 setuid bits,因此需要在调整组之后重新设置相应权限。

BSD 与 macOS

在 BSD,包括 macOS,捕获数据包需要对 /dev/bpf* BPF 设备有读访问权限。

没有 devfs 的 BSD 上,设备文件权限通常保存在根文件系统中,修改可跨重启保留。带 devfs 的 BSD 和 macOS 上,设备文件可能在启动时重建,因此还需要通过 devfs 配置、系统 rc 文件、startup item 或 launchd launch daemon 等方式持久化权限。libpcap 0.9.1 及以后版本中的 ChmodBPF 目录提供了相关 launch daemon 示例。

Digital/Tru64 UNIX

原始页面指出,在 Digital/Tru64 UNIX 上,原则上任何用户都可以捕获网络流量;但要在接口上以 promiscuous mode 捕获,超级用户必须先用 pfconfig(8) 启用 promiscuous-mode operation。要捕获该机器在接口上接收或发送的 unicast traffic,还需要启用 copy-all-mode operation。

可通过调整 /dev/pfilt* 设备的所有权或权限,限制允许捕获流量的用户集合。

排查顺序

  1. 先确认抓包位置正确,目标流量确实会到达接口。
  2. 确认 Wireshark 是否能列出接口;不能列出时优先查驱动、dumpcap 或设备权限。
  3. 能列出但不能开始捕获时,查本地用户、组、capability、BPF 或 NPF 权限。
  4. 容器和虚拟机要同时查宿主机层权限。
  5. USB、无线 monitor mode 或 extcap 抓包,要按对应页面补充设备权限。
  6. 避免长期用 Administrator/root 运行完整 Wireshark。

相关页面

Imported from https://wiki.wireshark.org/CaptureSetup/CapturePrivileges on 2020-08-11 23:11:50 UTC

相关 Wireshark Wiki 页面

网络分析技术档案