如何在Nginx上以不同用户的身份使用PHP运行shell脚本


How to run a shell script as different user with PHP on Nginx?

尝试用POST请求触发shell脚本(由nginx处理)。到目前为止没有成功。

我所拥有的:

exec('whoami'); // nginx
nginx:x:220:498:Nginx web server:/var/lib/nginx:/sbin/nologin

正如我们所看到的,nginx用户没有shell。这会是个问题吗?接下来,

nginx ALL=(user) NOPASSWD: /path/to/script.sh

如果我将nginx更改为我的真实用户,我可以在没有密码提示的情况下运行sudo -u user /path/to/script.sh,但由于某种原因,如果我运行su -s /bin/bash -c /path/to/script.sh user,仍然会要求我输入密码。也许,后一个调用在某种程度上更适合nginx用户,因为他有nologin shell。

因此,每当我通过PHP运行exec('sudo -u user /path/to/script.sh');或运行包含该行的包装器脚本时,都不会发生任何事情。我甚至无法确定什么不起作用,因为没有抛出错误。

任何帮助都将不胜感激。

多亏了@fejese和@triple,我终于明白了。我不得不在sudoers文件中使用requiretty参数,当它被更改为…时

#Defaults   requiretty
#Defaults   !visiblepw

一切都很顺利!