SUID 问题

SUID 问题

我有一个简单的命令,我希望能够以用户身份执行,但它需要 root 权限。我怀疑这是“SUID”位的情况,但我从未使用过它。

这是我尝试过的:

aioobe@e6510:~/bin$ sudo -s
root@e6510:~/bin# cat -> spindown_baydrive
#!/bin/bash
/sbin/hdparm -Y /dev/sdb
root@e6510:~/bin# chmod +x spindown_baydrive 
root@e6510:~/bin# chmod ug+s spindown_baydrive 
root@e6510:~/bin# exit
aioobe@e6510:~/bin$ ./spindown_baydrive 
/dev/sdb: Permission denied
aioobe@e6510:~/bin$


aioobe@e6510:~/bin$ ls -la spindown_baydrive 
-rwsr-sr-x 1 root root 37 2011-01-31 09:59 spindown_baydrive

有什么建议么?

答案1

这正是须藤旨在。使用 visudo 编辑 sudoers 以允许非特权用户以 root 身份运行您的脚本。

visudo

添加如下行

aioobe ALL=NOPASSWD: /path/to/spindown_baydrive

并保存文件

现在你可以使用命令以 root 身份运行该文件

sudo /path/to/spindown_baydrive

如果您希望输入密码才能运行脚本,请将上面的 sudoers 行更改为

aioobe ALL= /path/to/spindown_baydrive

答案2

您可以通过在 /etc/sudoers 中配置 sudo 让用户以 root 身份运行脚本,而无需强迫用户输入密码(请参阅 NOPASSWD 选项)。

要使用 bash 脚本,请阅读更多内容:(Ubuntu) setuid bash 不起作用

答案3

-rwsr-sr-x 1 根 根 37 2011-01-31 09:59 spindown_baydrive

长度为 37 个字节,我猜这是一个 shell 脚本。以 setuid 身份运行时,shell 会以原始 uid 启动新进程。如果您在 Google 上搜索“shell script setuid”,您会看到很多解释它为什么不起作用 - 以及很多解决问题的方法,显而易见的是使用 sudo 或用 C 编写包装程序。

相关内容