【问题标题】:php can't execute any external command?php 不能执行任何外部命令?
【发布时间】:2010-12-01 17:11:29
【问题描述】:

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

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

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

总结:

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

PHP 版本 5.3.3 和 CentOS 5.5

有人知道可能发生的事情吗? 提前致谢

【问题讨论】:

  • 在服务器故障或网站管理员上可能会得到更好的回答:serverfault.comwebmasters.stackexchange.com
  • 这个问题比较适合serverfault.com
  • @Andre Garzia - 你的完整命令是什么样的?
  • 多么愚蠢的措辞:“php 不能……”。请记住,每次出现问题时,都不是 php 的错,而是你的错。
  • 好吧,您似乎在混淆“php can´t”,因为 php 没有此类功能,“php can´t”表示“我的 php 安装无法执行此操作” ”。并且责任不在我身上,因为我没有更改权限来破坏系统。此外,您的评论对讨论或解决方案没有任何帮助,这意味着它是无用的,您应该帮助人们而不是责怪他们。他们是来寻求帮助的,不是为了让你感到优越。我们仍然不知道是什么将“usr”更改为 644,但这不是用户发起的事情,并且确定这不是我的错。该死的人,总是试图责怪别人......

标签: php exec centos permission-denied


【解决方案1】:

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

【讨论】:

  • @Andre:很好。不过,我会将这个答案留给未来的搜索者。
  • 大声笑。感谢您在这里留下这个答案,因为我在 10 小时后找到了它,它救了我。
  • 感谢你,我在 2 分钟内解决了我努力了 6 个小时的工作。它在 CLI 中工作,但不能与 shell_exec 一起工作并给出 139 错误。谢谢。
【解决方案2】:

发现错误。

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

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

这是固定的。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • PHP 以 Apache 的 User 设置指定的任何用户身份运行。
    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2019-09-17
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      相关资源
      最近更新 更多