Appearance
Appearance
抓包权限的核心边界是:Wireshark 图形界面不应长期以管理员或 root 身份运行;真正需要高权限的是底层捕获组件、驱动或设备访问。安全做法是只把捕获所需的最小权限授给 dumpcap、Npcap/NPF、BPF、usbmon 或容器 capability,而不是把整个分析程序放进最高权限环境。
适用场景:解决“看不到接口”“不能开始实时捕获”“容器/虚拟机里无法混杂模式抓包”“USB 或 802.11 等特殊接口权限不足”。不要把它和抓包位置混淆;即使权限正确,如果交换机没有把目标流量送到你的接口,仍然抓不到。
| 环境 | 需要授权的对象 | 推荐边界 | 常见误区 |
|---|---|---|---|
| Windows | Npcap/WinPcap NPF 驱动访问 | 普通用户运行 Wireshark,驱动按需或受限授权 | 长期以 Administrator 运行 Wireshark |
| Linux | dumpcap 的 CAP_NET_RAW、CAP_NET_ADMIN,或受限 setuid | 只给 dumpcap 权限,并限制到 wireshark 组 | 直接用 root 跑整个 Wireshark |
| BSD/macOS | /dev/bpf* 读权限 | 调整 BPF 设备权限或启动项 | 只改一次权限却忘了 devfs 重启后会重建 |
| 容器 | 主机和容器的 NET_RAW/NET_ADMIN capabilities | 只授予必要 capability | 给容器完整特权模式 |
| 虚拟机 | 虚拟化平台允许混杂模式 | 在宿主机/虚拟交换机上开启 | 只在 guest 内设置混杂模式 |
| USB/无线/extcap | 对应设备或 extcap 的额外权限 | 按具体捕获类型单独授权 | 以为普通网络捕获权限覆盖所有类型 |
容器内运行 Wireshark 或 dumpcap 时,容器内部权限不够;宿主机也必须允许容器拥有捕获需要的 capability。Linux 容器通常需要与 Linux dumpcap 类似的 NET_RAW 和 NET_ADMIN。
为安全起见,只添加这两项 capability,而不是给容器完整特权。
Docker 示例:
--cap-add=NET_ADMIN --cap-add=NET_RAWDocker Compose 示例:
cap_add:
- NET_ADMIN
- NET_RAWKubernetes 示例:
securityContext:
capabilities:
add: ["NET_ADMIN", "NET_RAW"]Podman 示例:
--cap-add=NET_ADMIN --cap-add=NET_RAWPodman Quadlet 示例:
AddCapability=CAP_NET_ADMIN CAP_NET_RAWFlatpak 同时是打包机制和沙盒环境。原始页面指出,Wireshark 的 Flatpak 包不能在网络适配器上进行普通实时捕获;它可以读取已有捕获文件,并且可能通过 extcap 捕获部分流量。
如果目标是本机网卡实时抓包,应使用非 Flatpak 的安装方式,或选择符合权限需求的部署方式。
在虚拟机内抓包时,guest 系统里的权限只是其中一层。宿主机虚拟化平台还必须允许虚拟网卡进入 promiscuous mode,并允许目标流量到达该虚拟网卡。
需要同时检查:
Windows 上实时捕获依赖 Npcap 或 WinPcap 驱动(NPF)。加载驱动需要管理员权限;驱动加载后,哪些本地用户能抓包取决于驱动安装和访问限制。
Npcap 支持把驱动访问限制为仅 Administrators;WinPcap 不支持同等限制。较新 Npcap 版本会在启动时加载驱动,以避免 Windows 10 及更高版本上按需加载导致的网络连接中断问题。停止 Wireshark 不等于停止 NPF 驱动。
| 方案 | 安全性 | 使用便利性 | 适用情况 |
|---|---|---|---|
| 以 Administrator 运行 Wireshark | 差 | 简单 | 临时应急,不建议长期使用 |
| 系统启动时自动加载 NPF,且不限制访问 | 较差 | 最方便 | 受控实验机;所有本地用户都可能抓包 |
| 自动加载 NPF,并限制为 Administrators | 较好 | 可能出现 UAC 提示 | 多用户机器或更重视访问控制时 |
| 手动启动/停止 NPF | 最小暴露时间 | 麻烦 | 安全要求较高、偶发抓包 |
手动启动和停止 NPF 的原始示例:
runas /u:administrator "net start npf"
runas /u:administrator "net stop npf"早期 Npcap 或 WinPcap 可通过命令把 NPF 服务设置为自动启动:
sc config npf start= auto在 Vista 及以后版本执行该命令需要 Administrator 权限。
Wireshark 支持 privilege separation:Wireshark GUI 或 TShark CLI 以普通用户运行,负责捕获的 dumpcap 以更高权限运行。这比让整个 Wireshark 进程以 root 运行更安全,因为 Wireshark 的大部分协议解析代码仍在普通用户权限下执行。
许多 GNU/Linux 发行版会通过包管理器配置 dumpcap,使非 root 用户可以抓包,但默认策略不同。
| 发行版/安装方式 | 原始页面描述 | 操作思路 |
|---|---|---|
| Debian、Ubuntu 及衍生版 | 安装后非 root 用户不会自动获得捕获权限 | 按发行版 Wireshark Debian README 流程启用非 root 捕获 |
| Fedora 及衍生版 | 官方包添加 wireshark 组 | 将用户加入该组,重新登录 |
| Arch Linux 及衍生版 | 官方包添加 wireshark 组 | 将用户加入该组,重新登录 |
| 其他 Linux 或手动安装 | 可能需要手动配置 dumpcap | 使用 capability 或受限 setuid |
如果内核和文件系统支持 file capabilities,优先给 dumpcap 设置网络 capability:
sudo setcap cap_net_raw,cap_net_admin+eip /usr/sbin/dumpcap如果 dumpcap 位于 /usr/bin,应把路径替换为实际路径。
如果不支持 file capabilities,原始页面给出的后备方案是 setuid root:
sudo chown root /usr/sbin/dumpcap
sudo chmod u+s /usr/sbin/dumpcapsetuid root 的安全边界更粗,应优先使用 capabilities,并把可执行 dumpcap 的用户限制到专用组。
可用专用组限制谁能执行带捕获权限的 dumpcap:
sudo groupadd --system wireshark
sudo gpasswd -a $USER wireshark重新登录,或使用 newgrp wireshark,再验证组成员关系。然后把 dumpcap 归属到该组并移除其他用户执行权限:
sudo chgrp wireshark /usr/sbin/dumpcap
sudo chmod o-rx /usr/sbin/dumpcap注意:更改文件组可能会清除 file capabilities 或 setuid bits,因此需要在调整组之后重新设置相应权限。
在 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 上,原则上任何用户都可以捕获网络流量;但要在接口上以 promiscuous mode 捕获,超级用户必须先用 pfconfig(8) 启用 promiscuous-mode operation。要捕获该机器在接口上接收或发送的 unicast traffic,还需要启用 copy-all-mode operation。
可通过调整 /dev/pfilt* 设备的所有权或权限,限制允许捕获流量的用户集合。
Imported from https://wiki.wireshark.org/CaptureSetup/CapturePrivileges on 2020-08-11 23:11:50 UTC