我想捕获带宽约为 10 Gbit/s 的 FPGA 发送的 UDP 包。我发现,tcpdump
结合使用快速 SSD 完全能够接收连续的 10 Gbit/s 流并将其无损存储在磁盘上。
当我运行时sudo tcpdump
,一切都按预期进行。
但是,我需要能够tcpdump
在没有的情况下运行sudo
。如果没有,sudo
我会收到此错误:
tcpdump: enp4s0f0: You don't have permission to capture on that device
(socket: Operation not permitted)
以下是我发现的以及迄今为止尝试启用的tcpdump
功能sudo
:
sudo su
groupadd pcap
usermod -a -G pcap $USER
chgrp pcap /usr/sbin/tcpdump
chmod 750 /usr/sbin/tcpdump
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
建议的解决方案来自这里
根据列出此解决方案的各个页面,这应该使我的普通用户帐户可以运行tcpdump
,对吗?
但是,当我切换到我的常规用户帐户并运行时tcpdump
,我得到了这个:
bash: /sbin/tcpdump: Permission denied
(请注意,此错误消息与初始错误消息不同)
我已通过 验证getent group pcap
我的帐户属于该pcap
群组。我还验证了/sbin/tcpdump
归该群组所有pcap
。我还遗漏了什么?
答案1
经过一些实验,以下是我最终得到的结果:
sudo visudo
在 sudoers 文件的最末尾*输入以下内容:
your_username ALL = NOPASSWD: /usr/sbin/tcpdump
(替换your_username
为您的用户名,将更改写入磁盘并关闭编辑器)
打开一个新终端并运行sudo tcpdump
。它不再要求输入密码。
*将新规则放在最后可以避免它可能被其他规则覆盖。
答案2
我没有足够的声誉来发表评论,但看起来你的二进制路径有一个错误。
在命令中chgrp
,chmod
您使用路径/usr/sbin/tcpdump
(注意/usr
开头的)。但在错误中,您似乎尝试运行可执行文件(开头/sbin/tcpdump
没有)。/usr
尝试运行该命令which tcpdump
以找到运行命令时调用的二进制文件的路径tcpdump
,然后在chgrp
和chmod
命令中使用该路径。
我只是使用了您帖子中的命令和正确的路径(即给出的路径which tcpdump
),它对我的 Ubuntu 22.04 安装有效。
顺便说一句,这是运行的正确方法tcpdump
。您应该以用户身份运行它。以 root 身份或使用 sudo 运行它是危险的。