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