与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 

有什么build议么?

这正是sudo所devise的那种东西。 使用visudo编辑sudoers以允许非特权用户以root身份运行脚本。

visudo

像这样添加一行

aioobe ALL=NOPASSWD: /path/to/spindown_baydrive

并保存该文件

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

sudo /path/to/spindown_baydrive

如果您想要input密码来运行脚本,请将上面的sudoers行更改为

aioobe ALL= /path/to/spindown_baydrive

您可以让用户通过在/ etc / sudoers中configuration脚本,通过sudo以root身份运行脚本,而不强制用户input密码(请参阅NOPASSWD选项)。

为了避免bash脚本,请阅读更多: (Ubuntu)setuid bash不起作用

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

在37个字节,我猜这是一个shell脚本。 以setuid身份运行时,shell将以原始uid启动新进程。 如果你谷歌的'shell脚本setuid',你会看到很多解释为什么它不工作 – 和许多方法来解决这个问题,明显的是使用sudo或在C编写一个包装程序。