无需 root 权限的 iwlist 扫描

无需 root 权限的 iwlist 扫描

我正在编写需要扫描无线接口之一的应用程序。过去,我的程序运行sudo并使用(在代码中):

iwlist wlanX scan

但现在我想允许在没有 root 权限的情况下运行程序。如果我改变/sbin/iwlistto的能力会相对安全吗cap_net_admin+eipIwlist仅用于显示详细的无线信息,因此更广泛地访问此命令可能不是很危险,对吧?

答案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 scanwpa_请求者安装后,您可以尝试:

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

相关内容