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 位并使二进制文件世界可执行和可读。同样的结果。
那么,为什么会这样,我该如何解决?
您的主目录可能已挂载了该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) 手册页。