尝试用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
一切都很顺利!