在 Ubuntu 20.04 上无需 sudo 执行 tcpdump

在 Ubuntu 20.04 上无需 sudo 执行 tcpdump

我想捕获带宽约为 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

我没有足够的声誉来发表评论,但看起来你的二进制路径有一个错误。

在命令中chgrpchmod您使用路径/usr/sbin/tcpdump(注意/usr开头的)。但在错误中,您似乎尝试运行可执行文件(开头/sbin/tcpdump没有)。/usr

尝试运行该命令which tcpdump以找到运行命令时调用的二进制文件的路径tcpdump,然后在chgrpchmod命令中使用该路径。

我只是使用了您帖子中的命令和正确的路径(即给出的路径which tcpdump),它对我的​​ Ubuntu 22.04 安装有效。

顺便说一句,这是运行的正确方法tcpdump。您应该以用户身份运行它。以 root 身份或使用 sudo 运行它是危险的。

相关内容