我必须以另一个用户身份执行shell脚本,但不会提示输入密码。
我编辑了 /etc/sudoers
文件 visudo
,添加以下行。
_www localhost=(otheruser) NOPASSWD:bin/sh /path/to/my/script.sh
如果我明白了 sudo
工作,这意味着用户 _www
允许像用户一样执行 otheruser
,而不是提示输入密码,仅来自localhost。
那是对的吗?因为系统继续提示输入密码。
我必须以另一个用户身份执行shell脚本,但不会提示输入密码。
我编辑了 /etc/sudoers
文件 visudo
,添加以下行。
_www localhost=(otheruser) NOPASSWD:bin/sh /path/to/my/script.sh
如果我明白了 sudo
工作,这意味着用户 _www
允许像用户一样执行 otheruser
,而不是提示输入密码,仅来自localhost。
那是对的吗?因为系统继续提示输入密码。
Answers:
我认为你需要正确地把路径放到sh,你错过了第一个'/'
_www localhost=(otheruser) NOPASSWD:/bin/sh /path/to/my/script.sh
然后尝试完全按照文件中显示的命令。假设您以_www登录:
sudo -u otheruser /bin/sh /path/to/my/script.sh
如果它仍然提示,其他错误...
这是我的sudoers文件中的工作行:
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/myapp
我遇到的问题是,当我在服务器上运行时,实际上并不是sudoers文件,而是从Web应用程序调用可执行文件的方式。确保PHP或Python文件中的系统调用语法正确并且您的参数正确传递。
我的工作示例来自使用的Python文件 subprocess.Popen
看起来像这个片段:
args = '/usr/bin/sudo /usr/local/bin/myapp -v'
p = Popen(args, stdout=PIPE, stderr=STDOUT, shell=True).communicate()
希望这可以帮助。
visudo
当我测试你的例子时抱怨问题是相对路径bin/sh
。您应该指定绝对路径/bin/sh
如在正确答复中写或没有目录路径sh
当命令在预定义路径中时。我有这个版本:visudo -V
---visudo version 1.8.3p1
---visudo grammar version 40