由于某种原因,我需要作为用户在没有 sudo 的情况下运行脚本 script.sh ,该脚本需要 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
事实上它是有效的。但我对这个解决方案并不满意,特别是我必须为每个命令使用 2 个脚本。
这篇文章的目的是帮助遇到这个问题的人并寻找相同的解决方案(我没有找到关于它的好文章),也许你们有更好的解决方案。
欢迎分享您的想法!
EDIT 1 :
我想坚持这样一个事实:这个“apt-get update”只是一个示例,与我的脚本实际情况相去甚远。我的脚本有很多命令(其中一些 cd 到仅 root 访问的配置文件),解决方案不能是“好吧,直接使用 apt-get 执行”。
举例的原则是帮助理解,而不是成为简化一般问题答案的借口。