【发布时间】:2017-01-13 09:20:38
【问题描述】:
我无法在我的 apache 网络服务器目录中写入文件。我正在使用 CentOS 7。我正在尝试使用 exec 从 PHP 文件执行 git 命令:
exec("/usr/local/bin/git -C ../myRepo fetch 2>&1", $output, $exec_return_value);
通过打印输出,我看到错误表现为:
error: cannot open .git/FETCH_HEAD: Permission denied
我发现(在此博客的帮助下:http://jondavidjohn.com/git-pull-from-a-php-script-not-so-simple/)这是“预期的”,因为 Apache 将使用与我通过 ssh 使用的用户不同的用户执行。所以我需要确保我的权限允许该用户具有写入权限。
我通过在我的 php 文件中打印它的输出来确定我的 Apache 安装以名为“apache”的用户身份执行:
exec("whoami", $debugOutput, $debugRetVal);
我还按照同一链接中的建议设置了 SSH。但不幸的是,我仍然在 PHP 文件中遇到同样的错误:
error: cannot open .git/FETCH_HEAD: Permission denied
真正让我震惊的是,当我使用 ssh 会话作为 apache 运行时,我没有任何权限问题:
sudo -u apache /usr/local/bin/git -C ../myRepo fetch
用户“apache”在从 PHP 执行时似乎具有不同的权限。有人可以帮我解决这个问题吗?
【问题讨论】:
-
您正在使用相对路径 (`../)。您确定您的 PHP 命令与您尝试的命令行 sudo 在同一目录中运行吗?在运行 git 之前尝试使用绝对路径和/或显示 pwd 以查看是否是问题所在。
-
当我根据完全相同的相对路径打印出“ls -la”时,我看到了所有文件,以及“apache”拥有这些文件的事实。所以它是从我期望的位置执行的。
标签: php apache centos exec selinux