如何允许www-data用户使用nginx执行bash脚本

我是一台运行NGINX和PHP的Ubuntu 16.04机器。 我想启用 www-data </ code>用户(通过Web浏览器)来访问将执行bash的PHP页面( php-test.php </ code>) 脚本( script_test.sh </ code>)或使用 shell_exec </ code>或 exec </ code>执行Linux CLI命令。</ p>

我有 完成以下操作。</ p>

创建我的bash脚本文件script_test.sh </ p>

 #!/ bin / bash 

whwhami
echo $ USER
echo'test'

exit
</ code> </ pre>

当我从CLI运行它时,使用</ p>

 。  / script_test.sh 
</ code> </ pre>

它确实有效,我可以在CLI中看到信息回显。</ p>

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

我创建了我的php页面(php_test.php) 它包含以下</ p>

 &lt;?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'; //在PHP页面中简单回读
?&gt;
</ code> </ pre>

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

  sudo nano / etc / sudoers 
</ code> </ pre>

我添加了以下行</ p>

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


nn

我确定了脚本 是可执行的,为了我的测试,不用担心安全性,我只需用以下命令将其设置为777 </ p>

  sudo chmod 777 script_test.sh 
</ code > </ pre>

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

是否有其他日志可以包含线索?</ p>

我还应该在这里查看什么? </ p>
</ div>

展开原文

原文

I an Ubuntu 16.04 machine running NGINX and PHP. I would like to enable the www-data user (via web browser) to be able to access a PHP page (php-test.php) that will execute either a bash script (script_test.sh) or execute Linux CLI commands using shell_exec or exec.

I have done the following.

Created my bash script file script_test.sh

#!/bin/bash

whoami
echo $USER
echo 'test'

exit

when I run this from CLI, using

./ script_test.sh

It does indeed work and I can see the info echoed out in the CLI.

I then pursued the goal of being able to allow the www-data user run this bash script through a PHP page running on this same machine from NGINX.

I created my php page (php_test.php) and it contains the following

<?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
?>

I then ran the following to modify the sudoers file, giving www-data access to the bash script

sudo nano /etc/sudoers

to which I added the following line

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

I then made sure the script was executable, for the sake of my testing, not worrying about security, I just set it to 777 with the following command

sudo chmod 777 script_test.sh

From there I opened a web browser and browsed to the localhost (NGINX) web server (php_test.php) and the only thing I see on the page is the 'test 123' that I echo from PHP... none of the bash script appears to have run at all. I tailed the NGINX error log and don't see any error at all.

Is there another log that could contain clues on this?

What else should I check here?

doulun1915
doulun1915 另请参阅使用php+nginx执行shell脚本,执行bash脚本的PHP脚本,如何在Nginx上以不同的用户身份运行shell脚本?等。
大约 3 年之前 回复

1个回答



你能尝试使用passthru而不是shell_exec,看看输出是什么吗?</ p>

试试这个,看看它是否显示在日志文件中:</ p>

  if(file_exists('/ path / to / my / files / script_test.sh')){die(  '文件未找到!');  } 
shell_exec(“nohup /path/to/my/files/script_test.sh> /path/to/my/files/output.log& amp;”);
</ code> </ pre>
\ n

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

su - www-data -c“whoami”</ code>和 su - www-data -s /是什么 bin / bash -c“whoami”</ code>输出?</ p>

su - www-data -s / bin / bash -c“/ path / to / my / files / script_test.sh“</ code>输出什么?</ p>
</ div>

展开原文

原文

Can you try to use passthru instead of shell_exec, and see the output anything?

Also try this, and see if it shows on the log file:

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 &");

Also, are you running PHP with the www-data user (check your fpm pool)? Do you have any error on /var/log/syslog or /var/log/auth.log ? Have you restarted the server after changing the sudo permissions?

What does su - www-data -c "whoami" and su - www-data -s /bin/bash -c "whoami" outputs?

Does su - www-data -s /bin/bash -c "/path/to/my/files/script_test.sh" output something?

duanren9163
duanren9163 阅读环境回复:askubuntu.com/questions/23009 / ...
大约 3 年之前 回复
douhuike3199
douhuike3199 too long
大约 3 年之前 回复
dongyan5141
dongyan5141 我正在使用NGINX,而不是apache。 我能够使用相同的步骤,它在我的macbook pro上运行的UBUNTU虚拟机上运行良好。 我认为这是因为exec在PHP_INI中被禁用,并将在今天晚些时候测试该理论。 谢谢。
大约 3 年之前 回复
duanliaoyin3171
duanliaoyin3171 too long
大约 3 年之前 回复
dozoqn3347
dozoqn3347 我看到安全模式从php 5.3开始被弃用,并从php 5.4中删除,我正在运行PHP 7并将研究如何启用exec和/或shell_exec。 也没有使用该代码段的输出。
大约 3 年之前 回复
douyanlu7380
douyanlu7380 请注意,如果PHP以安全模式运行,则shell_exec将不起作用。 php.net/manual/en/function.shell-exec.php尝试删除所有这些并再试一次。 还有,更基本的工作吗? <?php $ output = shell_exec('ls -lart'); echo“<pre> $ output </ pre>”; ?>
大约 3 年之前 回复
duanliao6077
duanliao6077 当我运行时,我从我的ini文件中获取以下禁用的功能 - 与我在phpinfo()中看到的相同... pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal ,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,文件
大约 3 年之前 回复
douju2012
douju2012 too long
大约 3 年之前 回复
duangan2307
duangan2307 www-data是PHP运行的用户。 我在你的帖子/消息的顶部运行了PHP代码段,但是DID报告了找到的脚本,但是使用基于nohup的命令的shell_exec和passthrough尝试根本没有生成任何内容。 您提到的日志文件都没有向我显示任何线索。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐