由于某些原因,作为用户,我需要运行一个名为 script.sh 的脚本而不使用sudo,但该脚本需要root权限才能正常工作。
我发现唯一的解决办法是将sudo放在script.sh内部。举例来说:
script.sh :
#!/bin/sh
sudo apt-get update
当然,如果我执行这个脚本,会弹出提示要求我输入密码。然后我将以下内容添加到我的sudoers文件中(放在最后以覆盖其他所有设置):
user ALL=(ALL:ALL) NOPASSWD:/path/to/script.sh
顺便说一下,我也尝试了这行代码:
user ALL=(ALL) NOPASSWD:/path/to/script.sh
(我觉得我没有完全理解它们的区别)
但是如果我不使用sudo来执行这个脚本,这并不能解决我的问题:
# ./script.sh
[sudo] password for user:
# sudo ./script.sh
Starts updating...
好的,那么我就对自己说,“好的,这意味着如果像我一样在sudoers中引用了一个文件,只有在使用sudo调用它时才能无提示工作,这不是我想要的方式。”
所以,好吧,我创建另一个名为script2.sh的脚本,如下所示:
script2.sh
#!/bin/sh
sudo /path/to/script.sh
实际上它起作用了。但我并不完全满意这个解决方案,尤其是我每个命令都需要使用两个脚本的事实。这篇帖子旨在帮助遇到同样问题并正在寻找解决方法的人们(我没有找到一个好的帖子),也许你们有更好的解决方案。请随意分享你的想法!
编辑1:
我想强调一下,这个“apt-get update”只是一个例子,与我的脚本实际情况相去甚远。我的脚本有很多命令(其中一些涉及到root访问的配置文件),而解决方案不能只是“好吧,直接用apt-get做就可以了”。
一个例子的原则是为了帮助理解,而不是简化一般问题的答案的借口。
NOPASSWD:/path/to/script.sh
的意思是您可以无需输入密码使用sudo /path/to/script.sh
命令。但这并不意味着脚本可以在不输入密码的情况下使用sudo
命令。 - Barmar