在 Apache 下设置 PHP 权限

在 Apache 下设置 PHP 权限

我想要完成的是让 php 页面执行 shell 命令并在网页上显示输出。

该页面的代码大致如下

<?php
echo shell_exec('ls -l /code');
?>

当我加载此页面时,我看到的都是空白。但是,当我从命令行执行它时,我可以看到正在执行的命令和打印的输出。

我确信这与权限有关,我希望有人能给我指明正确的方向。

这是我在 httpd 日志文件中看到的内容

ls: cannot access /gateway_code: Permission denied
ls: cannot access /gateway_code: Permission denied

顺便说一下,目录 /code 对于用户“apache”设置为“只读”

谢谢!-ankit

答案1

检查您的基本目录限制。Php 没有权限访问 /bin/ls。不要将 /bin 目录添加到基本目录限制列表,而是将 /bin/ls 复制到文件夹 /code。

如果你确实必须这么做。

答案2

顺便说一下,目录 /code 对于用户“apache”设置为“只读”

这是你对权限设置方式的解释——如果你能告诉我们权限实际上是什么,那会更有用

我怀疑该目录无法由 apache uid 执行。或者这里可能存在 MAC/ACL 问题 - 但您没有提供这是哪个 Linux 发行版的详细信息,也没有提供权限设置方式。

答案3

首先要让 PHP 给出更好的答案,而不是只给出一个空白页。您可以使用以下命令将 stderr 重定向到 stdout,2>&1这样错误消息就会通过 echo 打印出来。

<?php
echo shell_exec('ls -l /code 2>&1');
?>

接下来,确保运行 php 脚本的任何进程(即 apache)对您要列出的目录具有执行权限。如果您不介意过于严厉,只需向所有人授予 rwx 访问权限,即可轻松确定权限是否是问题所在。

> chmod 777 code

最后,请确保您指定了正确的路径。您在问题中说您试图列出内容/code——您真的想列出根级目录吗?如果code文件夹与您的脚本位于同一目录中,那么使用相对路径可能会更好。

echo shell_exec('ls -l ./code 2>&1');

相关内容