【问题标题】:php exec() command permission deniedphp exec() 命令权限被拒绝
【发布时间】:2012-05-01 10:34:32
【问题描述】:

我有一个 C++ 可执行文件“skypeforwarder”。如果我在 Mac 的终端中使用命令行,skypeforwarder 可以工作: henry$ /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder

sh: /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder: Permission denied

但如果在 php exec() 中调用它总是会发出“权限被拒绝”;

<?php 
echo exec('whoami');

$output = null;

$execBuild = '/Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/';
$execBuild .= 'skypeForwarder';

$n  = exec($execBuild, $output); 

我搜索了很多。问题应该是web服务器中php/browser权限的问题。我还尝试从以下位置更改文件的所有者:

-rwxr-xr-x  1 henry  staff  1212716 19 Apr 11:23 skypeForwarder

-rwxr-xr-x  1 _www  staff  1212716 19 Apr 11:23 skypeForwarder

还是不行。

我根据http://foundationphp.com/tutorials/php_leopard.php在我的mac中设置apache

【问题讨论】:

  • exec("whoami"); 的输出是什么?

标签: php linux permissions exec


【解决方案1】:

虽然文件本身可以被 Web 服务器读取,但 Desktop 文件夹很可能不是,因此 Web 服务器无法遍历它来定位可执行文件。您应该将 skypeforwarder 二进制文件移动到 Web 服务器可读的位置,例如与您尝试提供此 PHP 脚本的目录平行的目录。但是,该目录不应该是可通过网络访问的。使用 .htaccess 保护它或将其置于 Web DocumentRoot 之上,但它必须能够被 Web 服务器读取。

默认情况下,OSX 上的Desktop-rwxr------建议更改该目录的权限。

此外,非常建议将文件更改为由_www Web 服务器用户拥有和可写。相反,它应该是 Web 服务器可读和可执行的,但不可写。

chown henry skypeforwarder
chmod 755 skypeforwarder

标准免责声明:与往常一样,在从 Web 上可访问的 PHP 脚本执行系统调用时要格外小心。

【讨论】:

  • 这可能是有人因为心情不好而在拖钓。我投票支持你。
  • 它正在工作。权限被拒绝,因为虽然我 chown _www skypeforwarder,但 henry 仍然是 /Users/henry/Desktop/skypeForwarder/ 目录的所有者。一位同事帮助我通过 2 个步骤解决了这个问题。 1. vi /private/etc/sudoers,添加一行:_www ALL=(ALL) NOPASSWD: ALL 2. chown _www:staff /Users/henry/Desktop/skypeForwarder/ 谢谢迈克尔,你的许多建议都适合我。我知道在 /Users/henry/Desktop/ 下设置目录不是一个好方法。我会改变的。
【解决方案2】:

试试看php.ini中的禁用功能

disable_functions = exec

【讨论】:

  • 我在 /private/etc/php.ini 中搜索过,没有 disable_functions 列表。谢谢。
  • 我从您对另一篇帖子的评论中看到exec("whoami") 的输出为 _www,这意味着该功能是允许的,所以这不是我的建议。如果它被禁用,你会在 apache/PHP 错误日志中得到一个错误。
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
相关资源
最近更新 更多