我通过自制软件安装了一个应用程序(bagit),并尝试从我的本地Apache服务器(安装在OSX上)执行shell命令。
我的PHP看起来像这样:
$cmd = 'bag create '.$targetFolder.' '.$sourceFolder.' --baginfotxt '.$bagInfoFile ." 2>&1";
$output = shell_exec($cmd);
但是,我收到以下错误消息:
/bin/bash: /usr/local/bin/bag: Permission denied
如何让 Apache 访问位于 '/usr/local/bin 中的 bash 命令?
您的 apache 安装需要以与其尝试执行的文件相同的用户/组运行。
您可以将尝试执行的应用程序的文件权限更改为与 apache/php 当前用户/组(或 777 等)相同的文件权限。
或者,您可以更改 Apache/PHP 以更特权的用户/组运行。
- 或者
您可以将应用程序的方法更改为通过 SSH 连接到可执行环境,并通过 SSH 执行应用程序。
当 PHP 尝试执行某些内容时,它将作为默认的 Web 服务器用户(apache
、www-data
或 httpd
)。确保要运行的命令具有正确的所有权/权限。实现此目的的最简单方法是将您的 Web 服务器用户添加到新组,例如 test
,然后chgrp test /usr/local/bin/bag