我正在编写需要扫描无线接口之一的应用程序。过去,我的程序运行sudo
并使用(在代码中):
iwlist wlanX scan
但现在我想允许在没有 root 权限的情况下运行程序。如果我改变/sbin/iwlist
to的能力会相对安全吗cap_net_admin+eip
?Iwlist
仅用于显示详细的无线信息,因此更广泛地访问此命令可能不是很危险,对吧?
答案1
您可以进行配置sudo
,以便组成员无需密码即可运行命令。用于visudo
编辑sudoers
文件:
# visudo
添加类似以下内容:
%mygroup ALL = (root) NOPASSWD: iwlist wlanX scan
到文件底部(其中mygroup
是前面带有百分号的组名称)。
%mygroup
您还可以通过更改为 来允许单个用户运行此程序myuser
,其中myuser
是用户名(请注意缺少百分比符号)。
%mygroup
或者,您可以通过替换为 来允许每个人进行扫描ALL
。
使用capabilities
允许cap_net_admin
所有iwlist
命令,而使用sudo
如上配置的则将其限制为只有一个带有特定选项的命令。这必须更加安全。
另一个(一般)原因是配置sudo
比使用更便携capabilites
,尽管如果您只是使用 Linux,则在本例中这并不相关。
答案2
如果不沉迷于iwlist scan
和wpa_请求者安装后,您可以尝试:
wpa_cli -i wlan0 scan > /dev/null; sleep 5; wpa_cli -i wlan0 scan_results
它不需要 root 权限即可运行。其输出类似于csv格式,易于解析。
bssid / frequency / signal level / flags / ssid
aa:bb:cc:dd:ee:aa 5220 -26 [WPA2-PSK-CCMP][WPS][ESS] AP-5G
aa:bb:cc:dd:ee:bb 5745 -62 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] AP2
aa:bb:cc:dd:ee:cc 2412 -50 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] AP3
答案3
您可以配置sudo
为不要求输入密码。
输入visudo
并添加如下行:
myuser ALL=(root) NOPASSWD: /sbin/iw wlan0 scan
myuser ALL=(root) NOPASSWD: /sbin/iwlist wlan0 scan
或者
%mygroup ALL=(root) NOPASSWD: /sbin/iw wlan0 scan
%mygroup ALL=(root) NOPASSWD: /sbin/iwlist wlan0 scan
请注意,您需要指定完整路径,iw
并且仍然需要使用运行,sudo
但现在不会提示您输入密码。
sudo iw wlan0 scan
谢谢@garethTheRed对于这个答案的一部分。
答案4
如果系统上使用网络管理器,则不需要 sudo 权限。只需运行:
nmcli dev wifi rescan
执行此命令后(可能持续 30 秒),可用 WiFi 网络的完整列表将可见,甚至对于其他工具也是可见的。
例如,在我的测试中:
iwlist scan # lists 1 AP
nmcli dev wifi rescan
iwlist scan # lists 8 APs