如何在没有密码的情况下使用sudo运行文件?
可能重复:
如何在没有密码的情况下使用sudo运行应用程序?
我已经创建了一个脚本来执行我经常运行的各种系统任务,但我必须使用sudo来运行脚本,尽管我拥有它因为它运行root特权命令。 如何添加make sudo让我运行这个文件,而不必每次运行时都输入密码?
我知道有关于在没有密码的情况下运行命令的问题,但是我无法在没有密码的情况下运行文件。
我知道安全风险,但我在家里使用我信任的计算机。
我添加了john ALL = NOPASSWD: /home/john/.script/hibernate.sh
到我的/etc/sudoers
但是当运行命令sudo sh /home/john/.script/hibernate.sh
它仍然提示我输入密码。 ..
使用visudo
进行安全编辑环境以编辑sudoers文件。 此脚本是vi
的包装器,在保存文件时也会进行语法检查,并且不允许您使用无效的sudoers文件覆盖有效的sudoers文件。
像这样添加一行:
username ALL= NOPASSWD: /path/to/your/script
“ALL =”有一些详细说明,它指定当有问题的用户从本地(控制台或终端)或远程(ssh等)从任何位置登录时授予权限。
为了完整起见,您可以通过在文件的权限中设置setuid位来实现类似的效果。
一个稍微棘手的部分是,出于安全原因,内核会忽略脚本上的setuid
位,因此您需要在C中编译一个小的包装程序并使用它来调用您的脚本。 将其保存为runscript.c
:
#include #include #include #include int main() { setuid( 0 ); system( "/path/to/script.sh" ); return 0; }
然后用它编译它
gcc runscript.c -o runscript
并在可执行文件上设置setuid
位:
sudo chown root:root runscript sudo chmod 4755 runscript
确保您的脚本只能由root写入也很重要,因为每个可以修改脚本的人都可以执行任意程序:
sudo chown root:root /path/to/script.sh sudo chmod 0711 /path/to/script.sh
这是一篇文章,我有来自shell脚本的setuid包装程序代码。
安全方面,这两种方法 – 一个用sudo
和一个用setuid
– 都非常糟糕,但在家用机器上可能还可以。 不同之处在于系统中的每个用户都能够运行setuid
命令,即使不在sudoers
文件中也是如此。 此外,显然,您不需要在命令前加上sudo
。
你需要“NOPASSWD”标签。
使用visudo并在文件末尾设置这样的内容:
username ALL = NOPASSWD:/ bin / echo
将username替换为您的用户名,将/ bin / echo替换为您要运行的命令。
您需要将正在运行的程序的完整路径添加到sudoers文件,而不是脚本。 我假设它是pm-hibernate,所以:
john ALL=NOPASSWD: /usr/sbin/pm-hibernate