我必须以另一个用户的身份执行 shell 脚本,但不需要输入密码。
我已使用 编辑该/etc/sudoers
文件visudo
,并添加了以下行。
_www localhost=(otheruser) NOPASSWD:bin/sh /path/to/my/script.sh
如果我理解它的sudo
工作原理,这意味着用户_www
可以像用户一样执行操作otheruser
,而无需输入密码,只需从本地主机执行即可。
对吗?因为系统会继续提示输入密码。
答案1
我认为你需要正确输入 sh 的路径,你缺少第一个“/”
_www localhost=(otheruser) NOPASSWD:/bin/sh /path/to/my/script.sh
然后按照文件中显示的命令尝试。假设您以 _www 身份登录:
sudo -u otheruser /bin/sh /path/to/my/script.sh
如果仍然提示,则说明有其他问题......
答案2
这是我的 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()
希望这可以帮助。