这个配置sudoers文件有什么问题?


0

我必须以另一个用户身份执行shell脚本,但不会提示输入密码。

我编辑了 /etc/sudoers 文件 visudo,添加以下行。

_www  localhost=(otheruser) NOPASSWD:bin/sh /path/to/my/script.sh

如果我明白了 sudo 工作,这意味着用户 _www 允许像用户一样执行 otheruser,而不是提示输入密码,仅来自localhost。

那是对的吗?因为系统继续提示输入密码。


这很奇怪。我的 visudo 当我测试你的例子时抱怨问题是相对路径 bin/sh。您应该指定绝对路径 /bin/sh 如在正确答复中写或没有目录路径 sh 当命令在预定义路径中时。我有这个版本: visudo -V --- visudo version 1.8.3p1 --- visudo grammar version 40
pabouk

Answers:


1

我认为你需要正确地把路径放到sh,你错过了第一个'/'

_www  localhost=(otheruser) NOPASSWD:/bin/sh /path/to/my/script.sh

然后尝试完全按照文件中显示的命令。假设您以_www登录:

sudo -u otheruser /bin/sh /path/to/my/script.sh

如果它仍然提示,其他错误...


你真的需要/ bin / sh吗?大多数shell脚本都包含在顶部..
NickW

1
@NickW:如果你想强制某个shell的用户而不管脚本第一行的shebang序列,这可能很重要。
pabouk

@pabouk应该没有理由这样做,shebang应该指向正确的shell。如果您担心用户更改shell,那么他们应该无权在一开始就修改脚本。
Stefan Nuxoll

@NickW - 您能否认为该脚本具有shebang或执行权限?如果要运行的命令是“sh / path / to / script”怎么办? OP没有说明命令是什么,但是如果它被锁定到确切的命令而不是“./script”那么肯定是二进制的完整路径是绝对必要的吗?
arco444

我使用sudo权限让人们运行(不修改或读取)我选择的脚本..没有反对将其用于其他目的,但我的用户只能在编写时执行该脚本。
NickW

0

这是我的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()

希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.