如何在 Debian wheezy 上 suid iwconfig?

如何在 Debian wheezy 上 suid iwconfig?

我有一个在我自己的用户帐户下运行的脚本,负责处理各种无线接口。它(或多或少)智能地关闭和打开无线局域网等等。但是,它是通过调用 和 等工具iwconfighciconfig启动和关闭设备来实现的。但由于这些需要超级用户权限,我决定在我的个人脚本文件夹中创建这些二进制文件的副本并设置 suid 标志(我是唯一可以读取和执行该目录的人)。因此,这些二进制文件的权限看起来像-rwsr-x---它们属于root我自己的主要组。

但是,suid 位似乎被完全忽略,因为在执行该二进制文件时我得到以下结果:

me@host:~/scripts/suid$ stat iwconfig
  File: `iwconfig'
  Size: 26968       Blocks: 72         IO Block: 4096   regular file
Device: 15h/21d Inode: 4194732     Links: 1
Access: (4750/-rwsr-x---)  Uid: (    0/    root)   Gid: ( 1000/   me)
Access: 2011-08-24 04:15:39.008148182 +0200
Modify: 2013-02-09 21:25:47.777488386 +0100
Change: 2013-03-12 15:55:20.765681857 +0100
 Birth: -
me@host:~/scripts/suid$ ./iwconfig wlan0 txpower off
Error for wireless request "Set Tx Power" (8B26) :
    SET failed on device wlan0 ; Operation not permitted.

我还尝试将组设置为 root、guid 位并使二进制文件可执行且可读。结果相同。

那么,这是为什么?我该如何解决它?

答案1

您的主目录可能已安装有该nosuid标志。您可以通过查看来检查/proc/mounts。如果您不确定哪个文件系统包含您的主目录,df ~它会告诉您(然后您可以使用 grep 在 中轻松找到它/proc/mounts)。

不过,更好的选择是将 sudo 与该NOPASSWD标志一起使用。例如,运行(以 root 身份)visudo -f /etc/sudoers.d/local-iwconfig并添加如下行:

your-user-name ALL=(root) NOPASSWD: /sbin/iwconfig

您还可以使用 sudo 进一步锁定事物。例如,您可以指定要运行的完整命令行,包括参数(然后有多个条目,每个命令行一个)。有关完整详细信息,请检查sudoers(5) 手册页

相关内容