我有一个简单的命令,我希望能够以用户身份执行,但它需要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编写一个包装程序。