1

我们在这里从 Slackware 迁移到 CentOS,它工作正常,然后在没有通知的情况下,php 停止执行外部调用,例如对“wc”和“spamc”的调用。所有此类调用在 error_log 上显示为:

sh: /usr/bin/spamc: 权限被拒绝

路径是正确的。我们正确设置了权限,并且 apache 应该能够毫无问题地执行文件。我们不在安全模式下,也没有设置 base_dir。它不是 SELinux,或者至少 sestatus 说 SELinux 已禁用。

概括:

  • PHP 无法通过 exec() 或 popen() 执行任何操作
  • 二进制文件的路径是正确的。
  • 我们没有处于安全模式
  • 我们没有设置 base_dir
  • 二进制文件的权限允许 apache 用户执行它们
  • SELinux 被禁用
  • php.ini 中的 disable_functions 为空
  • 我们不知道为什么它不起作用

PHP 版本 5.3.3 和 CentOS 5.5

任何人都知道可能会发生什么?提前致谢

4

4 回答 4

3

SELinux 正在阻止您尝试运行它们。我建议您提出一些规则,允许您运行所需的外部命令子集并将其作为模块加载。

于 2010-12-01T17:17:44.243 回答
1

发现错误。

例如,我试图执行 /usr/bin/tidy , usr 文件夹具有 644 权限,这类似于我书中的洛夫克拉夫特恐怖。我可以工作,因为我是 root。

在发疯并决定检查从根 / 文件夹到整洁二进制文件的命令的所有路径组件的权限之后,我想通了,我发现所有权限设置正确,但 usr 文件夹权限完全搞砸了。

这是固定的。

于 2010-12-01T20:30:57.557 回答
0

PHP 是否在服务器上作为 Apache 运行?我以为它以Nobody运行..

于 2010-12-01T17:19:26.093 回答
0

https://serverfault.com/questions/207989/php-cant-execute-any-external-command/208001#208001

通常,centOS 上的 PHP 以无人身份运行,除非您已将 php 编译为 fastcgi、dso 等...

于 2010-12-01T18:20:32.813 回答