tcpdump权限问题


13

运行tcpdump时遇到问题。我必须以非root用户身份运行tcpdump。在网络上搜索我的问题,并发现我应该:

sudo setcap cap_net_admin=eip /usr/sbin/tcpdump

这使我能够与用户一起运行tcpdump,但随后得到:

you don't have permission to capture on that device

在我尝试捕获的任何设备上。

还进行了一些蛮力操作并执行了以下操作:

sudo chmod +s /usr/sbin/tcpdump

那也没有做到。


Tcpdump需要root特权,您必须为二进制文件设置特定的Linux功能:$ sudo setcap cap_net_raw,cap_net_admin = eip / usr / sbin / tcpdump
DreamCoder 2014年

也是这样做的,但我一直得到:tcpdump: eth0: You don't have permission to capture on that device (socket: Operation not permitted
Sivan Sigal


这也是有问题的,因为不想更改正在运行的源代码...而且,DreamCoder建议的内容应该可以工作,但奇怪的是它不能。有人还有其他优惠吗?
西万·西格尔

Answers:


28

有点晚了,但是我也遇到了同样的问题。您需要授予tcpdump许可和功能,以允许原始数据包捕获网络接口操作

添加捕获组并将您自己添加到其中:

sudo groupadd pcap
sudo usermod -a -G pcap $USER

接下来,更改组tcpdump并设置权限:

sudo chgrp pcap /usr/sbin/tcpdump
sudo chmod 750 /usr/sbin/tcpdump

最后,使用setcap来授予tcpdump必要的权限:

sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump

请注意,这将允许pcap组中的每个人都可以操纵网络接口并读取原始数据包!

在这里找到它:将tcpdump配置为以非root用户身份工作


我能够对此加以限制,只使用即可cap_net_raw,cap_setpcap=ep。之所以删除,i是因为我的程序不需要派生。这是用于自定义二进制文件,即ymmv。

这也适用于iftop显示按IP地址/ DNS名称显示网络利用率的程序
HeatfanJohn '19

0

也许这可能行得通。类似于已经发布的内容。尚未在ubuntu上进行过测试。

(使用用户所属的组)chgrp wirehark / usr / sbin / tcpdump

setcap'CAP_NET_RAW + eip CAP_NET_ADMIN + eip'/ usr / sbin / tcpdump

使用getcap / usr / sbin / tcpdump您应该看到/ usr / sbin / tcpdump = cap_net_admin,cap_net_raw + eip

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.