在 CentOS 上设置 Sniffer(抓包工具,如 tcpdump、Wireshark、netsniff 等)权限,核心目标是:让普通用户能抓包,同时避免直接给 root 权限。下面按常见场景说明。
tcpdump(最常见)setcap(推荐 ✅)sudo yum install -y tcpdump
给 tcpdump 赋予抓包能力(不需要 root):
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
验证:
getcap /usr/sbin/tcpdump
输出应类似:
/usr/sbin/tcpdump = cap_net_raw,cap_net_admin+eip
然后普通用户即可直接抓包:
tcpdump -i eth0
sudo(最常见但不推荐长期)sudo tcpdump -i eth0
✅ 简单
❌ 每次都要 sudo
sudo yum install -y wireshark wireshark-gtk
wireshark 组sudo groupadd wireshark
sudo usermod -aG wireshark $USER
sudo chgrp wireshark /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
newgrp wireshark
然后即可用普通用户启动 Wireshark。
如果你是 自己写 C / Python 抓包程序,需要:
sudo setcap cap_net_raw+ep your_program
或:
sudo python3 sniffer.py
检查 SELinux:
getenforce
如果是 Enforcing,可临时测试:
sudo setenforce 0
✅ 抓包成功 → 说明是 SELinux 问题
❌ 仍然失败 → 不是 SELinux
长期解决(允许抓包):
sudo semanage permissive -a tcpdump_t
或给端口/接口授权(不推荐关闭 SELinux)。
tcpdump -i any -c 5
无报错即可。
| 方式 | 是否推荐 | 说明 |
|---|---|---|
| setcap | ✅✅✅ | 最安全 |
| sudo | ✅ | 临时 |
| root 用户 | ❌ | 不安全 |
| 关闭 SELinux | ❌ | 不推荐 |
你可以告诉我:
我可以给你 精确到命令级别 的配置方案。