【发布时间】:2014-10-02 15:33:08
【问题描述】:
出于某种原因,作为用户,我需要在没有 sudo 的情况下运行需要 root 权限才能工作的脚本 script.sh。
我认为这是将 sudo INSIDE 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 个脚本。
然后这篇文章是为了帮助遇到这个问题的人并寻找相同的解决方案(我没有找到关于它的好帖子),也许你们有更好的解决方案。
随时分享您的想法!
编辑 1:
我想强调这样一个事实,即这个“apt-get update”只是我的脚本实际情况的一个示例。我的脚本有很多命令(有一些 cd 到 root-access-only 配置文件),解决方案不能是“好吧,直接用 apt-get 做”。
示例的原则是帮助理解,而不是作为简化一般问题答案的借口。
【问题讨论】:
-
NOPASSWD:/path/to/script.sh表示您可以在没有密码的情况下使用sudo /path/to/script.sh。这并不意味着脚本可以在没有密码的情况下使用sudo。 -
@Barmar 这可能是一个答案
-
@hek2mgl 之后我注意到他在问题中已经有了类似的东西。