我制作了一个脚本(python + bash),它使用tcpdump来监视和过滤流经网络接口的TCP标头。它适用于所有接口,但是当涉及 ethernet en0 接口时,Mac要求以root用户(sudo
)执行tcpdump。
是否有任何编程解决方案可以绕过使用sudo运行它的需要?
我发现像wireshark这样的工具可以在不请求用户输入sudo密码的情况下执行此操作。
任何不需要sudo的解决方案都会很棒。
答案 0 :(得分:6)
是否有任何编程解决方案可以绕过使用sudo运行它的需要?
“编程”是什么意思?
Wireshark执行此操作的方式是其安装程序
access_bpf
组并将用户放入其中; access_bpf
,并将其权限更改为rw-rw----
(根据jonschipp的答案中的ls -l /dev/bpf*
输出); < / LI>
醇>
这样安装Wireshark的用户可以运行使用BPF的程序(使用libpcap的所有程序在OS X上使用BPF; tcpdump和Wireshark都使用libpcap)而不必以root身份运行它们(至少只要程序不运行)不需要新的 BPF设备;它们会根据需要自动创建,但它们是使用权限rw-------
创建的,并由用户和组root
拥有。)
因此,如果你已经安装了Wireshark,你不仅可以运行Wireshark(和TShark,以及它们都用来进行数据包捕获的dumpcap程序)作为普通用户并捕获流量,例如,你也可以以普通用户身份运行tcpdump并捕获流量。
也就是说,Wireshark 代码中没有启用它的功能,所以它在这个意义上并不是“编程”,它是由Wireshark 安装程序安装的,它启用了这个功能,它为所有程序启用它。
答案 1 :(得分:2)
如果您不需要处于混杂模式,那么您可以将tcpdump用作普通用户。使用'-p'选项禁用混杂模式。
tcpdump -nni en0 -p
如果您需要将接口设置为混杂模式,那么您可以启用root帐户并通过su成为root用户,然后继续运行您的脚本。
su root -
python myscript.py
或者
su -
python myscript.py
使用sudo默认值可以像(假设一个名为Administrator的管理员帐户)
那样完成su Administrator
sudo su
python myscript.py
如果你担心密码提示,sudo可以通过配置/ etc / sudoers文件来使用NOPASSWD选项来避免它。然后,您可以以普通用户身份运行脚本 没有密码提示。
您也可以尝试为其他用户提供bpf设备文件读取权限。 注意:我没有测试过这个。
$ ls -l /dev/bpf*
crw-rw---- 1 root access_bpf 23, 0 Aug 4 22:17 /dev/bpf0
crw-rw---- 1 root access_bpf 23, 1 Aug 4 22:16 /dev/bpf1
crw-rw---- 1 root access_bpf 23, 2 Aug 4 22:16 /dev/bpf2
crw-rw---- 1 root access_bpf 23, 3 Aug 4 22:16 /dev/bpf3
e.g。
chmod o+r /dev/bpf*