【发布时间】:2017-12-12 09:02:14
【问题描述】:
我是一台运行 NGINX 和 PHP 的 Ubuntu 16.04 机器。我想让www-data 用户(通过Web 浏览器)能够访问PHP 页面(php-test.php),该页面将执行bash 脚本(script_test.sh)或使用shell_exec 执行Linux CLI 命令或exec.
我做了以下事情。
创建了我的 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 文件,让 www-data 访问 bash 脚本
sudo nano /etc/sudoers
我在其中添加了以下行
www-data ALL=NOPASSWD: /path/to/my/files/script_test.sh
然后我确保脚本是可执行的,为了我的测试,不担心安全性,我只是使用以下命令将其设置为 777
sudo chmod 777 script_test.sh
从那里我打开一个网络浏览器并浏览到本地主机 (NGINX) 网络服务器 (php_test.php),我在页面上看到的唯一内容是我从 PHP 中回显的“测试 123”...没有bash 脚本似乎已经运行了。我跟踪了 NGINX 错误日志,根本没有看到任何错误。
还有其他日志可以包含这方面的线索吗?
我还应该在这里检查什么?
【问题讨论】: