如何在 Debian wheezy 上 suid iwconfig?

bit*_*ask 2 root setuid permissions

我有一个脚本在我自己的用户帐户下运行,负责处理各种无线接口。它(或多或少)智能地关闭和打开无线局域网等等。但是,它通过调用诸如iwconfig和 之类的工具hciconfig来启动和关闭设备。但是由于这些需要超级用户权限,我决定在我的个人脚本文件夹中创建这些二进制文件的副本并设置 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.
Run Code Online (Sandbox Code Playgroud)

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

那么,为什么会这样,我该如何解决?

der*_*ert 5

您的主目录可能已挂载了该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
Run Code Online (Sandbox Code Playgroud)

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