我希望能够更改 wlan0 的权限,以便我可以使用 tcpdump 来监听它,而无需将自己提升为 root 权限。
现在:
tcpdump -i wlan0
给出:
tcpdump: wlan0: You don't have permission to capture on that device
当我做:
sudo tcpdump -i wlan0
它按预期工作。
答案1
稍微解释一下:不是 wlan0 设备阻止您以非 root 用户身份捕获数据。这是内核的行为,出于安全原因。这也是您不能dd if=/dev/zero of=/dev/sda
以非 root 用户身份执行此操作的原因;它会擦除您的硬盘。话虽如此,您可以通过多种方式覆盖内核的默认行为(啊,Linux 的美妙之处)以获得所需的功能。
你可以做以下两件事之一:
我建议编辑 sudoers 文件,使其不再需要密码,这样您就sudo tcpdump -i wlan0
无需每次都输入密码。通过编辑 sudoers 文件,您可以确保只有您才能执行此操作,而系统的所有其他用户都被排除在外。
去做这个:
sudo visudo
然后在文件中添加以下行:
Cmnd_Alias TCPDUMP_WLAN0 = /usr/bin/tcpdump -i wlan0
[username] ALL= NOPASSWD: TCPDUMP_WLAN0 #Be sure to replace [username] with your username
这仍然需要你每次都输入“sudo”,但你也可以为此设置一个 bash 别名,这样你只需输入tcpdump
并执行即可sudo tcpdump -i wlan0
。为此,你只需编辑 ~/.bashrc 文件并添加以下行:alias tcpdump="/usr/bin/tcpdump -i wlan0"
使用 sudoers 文件是最注重安全性的方式。现在,如果你真的坚持不使用sudo
任何东西,那么我会给你你想要的。但是,以下命令将授予所有用户以所需的能力运行此程序的能力,因此没有精细的用户控制。
请记住,这尚未经过测试,但它应该可以工作。如果不行,下面还有第三个解决方案。
sudo setcap cap_net_admin+ep /usr/bin/tcpdump
最后,如果这不起作用,您可以在文件本身上设置 uid。这样做的目的是以文件所有者的身份(在本例中为 root)运行程序。与上述情况一样,执行此文件的任何人都将成为 root 来运行它。您真的应该只在万不得已的情况下才使用这种方法,并且只有当您完全相信该程序不可利用并且绝不会被用来破坏您的系统时才使用这种方法。
sudo chmod u+s /usr/bin/tcpdump