如何允许www-data用户使用nginx

时间:2017-07-08 00:30:23

标签: php linux bash nginx

我是一台运行NGINX和PHP的Ubuntu 16.04机器。我想让www-data用户(通过Web浏览器)能够访问将执行bash脚本(php-test.php)或执行Linux CLI的PHP页面(script_test.sh)命令使用shell_execexec

我做了以下事情。

创建了我的bash脚本文件script_test.sh

#!/bin/bash

whoami
echo $USER
echo 'test'

exit

当我从CLI运行时,使用

./ script_test.sh

它确实有效,我可以看到在CLI中回显的信息。

然后我追求的目标是允许www-data用户通过NGINX在同一台机器上运行的PHP页面运行这个bash脚本。

我创建了我的php页面(php_test.php),它包含以下内容

<?php

    chdir('/path/to/my/files/');
    shell_exec('./script_test.sh');  // ATTEMPT RUN SCRIPT
    shell_exec('/path/to/my/files/script_test.sh');  // ATTEMPT RUN SCRIPT

    echo 'test 123';  // SIMPLE ECHO IN THE PHP PAGE
?>

然后运行以下命令来修改sudoers文件,为bash脚本提供www-data访问权限

sudo nano /etc/sudoers

我添加了以下行

www-data ALL=NOPASSWD: /path/to/my/files/script_test.sh

然后我确保脚本是可执行的,为了我的测试,不用担心安全性,我只是使用以下命令将其设置为777

sudo chmod 777 script_test.sh

从那里我打开一个Web浏览器并浏览到localhost(NGINX)Web服务器(php_test.php),我在页面上看到的唯一一件事就是&#39;测试123&#39;我从PHP回应...没有任何bash脚本似乎已经运行。我拖尾NGINX错误日志,并没有看到任何错误。

是否有其他日志可能包含此线索?

我还应该在这里查看什么?

2 个答案:

答案 0 :(得分:0)

shell_exec()的结果作为字符串返回。要在浏览器中显示它,只需添加echo。

<?php

    chdir('/path/to/my/files/');
    echo shell_exec('./script_test.sh');  // ATTEMPT RUN SCRIPT
    echo shell_exec('/path/to/my/files/script_test.sh');  // ATTEMPT RUN SCRIPT

    echo 'test 123';  // SIMPLE ECHO IN THE PHP PAGE
?>

请参见手册中的Return Values

已执行命令的输出;如果发生错误,则为NULL或 该命令不产生任何输出。

答案 1 :(得分:-1)

你可以尝试使用passthru而不是shell_exec,看看输出是什么吗?

也试试这个,看看它是否显示在日志文件中:

if(file_exists('/path/to/my/files/script_test.sh')) { die('File not found!'); }
shell_exec("nohup /path/to/my/files/script_test.sh > /path/to/my/files/output.log &");

另外,您是否使用www-data用户运行PHP(检查您的fpm池)? 你在/ var / log / syslog或/var/log/auth.log上有任何错误吗? 您是否在更改sudo权限后重新启动了服务器?

su - www-data -c "whoami"su - www-data -s /bin/bash -c "whoami"输出了什么?

su - www-data -s /bin/bash -c "/path/to/my/files/script_test.sh"输出了什么吗?