【发布时间】:2013-06-13 16:02:12
【问题描述】:
我想从 PHP 脚本执行系统上存在的 Bash 脚本。我在系统上有两个脚本。其中一个是位于/var/www/html 的名为client.php 的PHP 脚本,另一个是位于/home/testuser 的名为testscript 的Bash 脚本。
我的 client.php 脚本看起来像
<?php
$message=shell_exec("/home/testuser/testscript 2>&1");
print_r($message);
?>
我的测试脚本看起来像
#!/bin/bash
echo "Testscript run succesful"
当我在终端上执行以下操作时
php client.php
我在终端上得到以下输出
Testscript run successful
但是当我打开页面时
http://serverdomain/client.php
我得到以下输出
sh: /home/testuser/testscript: Permission denied
即使在我执行 chmod +x testscript 之后,我也会收到此错误。
如何让它从浏览器工作?请帮忙。
【问题讨论】:
-
read权限怎么样?没有read权限,Execute权限是没有用的。 -
Apache 将无权访问您的主目录。你也不应该真的想要它。请记住,仅授予脚本权限是不够的。您还必须授予对其所在目录的访问权限。例如如果我在银行保险库里放一个“免费的,拿一张”的报纸夹,即使是免费的,也没有人可以拿走这些报纸。
-
@MarcB 我忘记了路径的权限。一个很好的类比。
-
您需要在该脚本上授予您网络服务器的
sudo权限。或者将脚本包装在 suid 二进制文件中。但无论哪种方式,都要非常非常非常非常小心。错误地调用了脚本,错误地传递了一些数据,并且您已经在您的服务器上为远程用户提供了一个 root shell,然后您的服务器就繁荣了。 -
这被称为坏主意。 :) 根本不这样做。真正的安全风险。
标签: php apache bash shell permission-denied