php 无法执行任何外部命令?

php 无法执行任何外部命令?

我们在这里从 Slackware 迁移到 CentOS,它运行良好,然后突然没有通知,php 停止执行外部调用,例如对“wc”和“spamc”的调用。所有此类调用都显示在 error_log 中,如下所示:

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

路径正确。我们已正确设置权限,Apache 应该能够毫无问题地执行文件。我们不是在 safe_mode 上,我们没有设置 base_dir。这不是 SELinux,或者至少 sestatus 显示 SELinux 已禁用。

概括:

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

PHP 版本 5.3.3 和 CentOS 5.5

有人知道会发生什么吗?提前致谢

答案1

发现错误。

例如,我尝试执行 /usr/bin/tidy,usr 文件夹的权限为 644,在我看来,这类似于洛夫克拉夫特式的恐怖。我可以工作,因为我是 root。

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

这是已修复的。

答案2

权限?

这会影响权限...请记住

“权限被拒绝”可以出现在路径的任何地方,而不仅仅是你调用的文件本身。因此,也请查看“/usr /usr/bin”和“/”。

PHP

这也可能是因为 php 没有编译所需的内容。您可以打开 strace 并重试吗?

要做到这一点 - 你需要停止/启动 apache / exim (或其他任何程序)并打开 strace:

strace -f -o trace.txt /etc/rc.d/init.d/servicename  start

顺便说一下,一般来说这是 apache

strace -f -o trace.txt /etc/rc.d/init.d/httpd start 现在只需尝试再次运行该函数

由于“-o”选项将结果保存到“trace.txt”文件,让我们继续查看该文件:

cat trace.txt | grep "/usr/bin/spamc"

这应该可以让你看到更好的日志和正在发生的事情的提示

确保关闭 strace - 否则日志会变得非常大

相关内容