【问题标题】:move_uploaded_file() has insufficient permissions even though the owner id is the same as the user idmove_uploaded_file() 权限不足,即使所有者 id 与用户 id 相同
【发布时间】:2016-09-24 16:51:38
【问题描述】:

我创建了一个文件夹 /home/UploadContent ,其中所有者:组为 apache:apache,与 php 进程相同的组和用户。然后我使用 chmod 将权限设置为 775,这应该允许 php 将上传的文件写入此目录。我试过了,它给了我同样的权限不足错误。

确切的错误是“无法打开流:权限被拒绝”。

我写了一个小php程序来测试是否: $Owner = fileowner("/home/UploadContent/"); $Current = exec("whoami"); $Id = exec("id -u " . $Current); echo ($Owner . " is owner, " . $Id . " is user.");

这总是返回“48 是所有者,48 是用户。”

这意味着 php 具有正确的写入、读取和执行权限,但它仍然会抛出错误。

【问题讨论】:

  • 听起来像是 SELinux 问题...尝试在 bash 提示符下运行 setenforce 0,然后重新运行脚本。如果这解决了问题,您需要配置 SELInux 以允许您的进程访问指定的文件夹。您可以使用setenforce 1 重新启用 SELInux。否则,SELinux 将在启动时重新启用。
  • 也可以尝试使用 perm 777。然后。检查所有者/组等是什么
  • 好的@Basic,当我运行 setenforce 0 时,它起作用了。我将配置 SELInux。
  • 很高兴我能帮上忙。在 Centos/RedHat 上,我使用 audit2allow 通过分析审计日志来制定适当的策略。我不知道其他发行版的标准是什么。此链接也可能有用:wiki.centos.org/HowTos/SELinux
  • @Basic 还有其他方法可以设置 SELInux 吗?就像一个纯粹的配置文件?另外,您能否将您的评论格式化为答案,因为我相信其他人会从这个答案中得到帮助。

标签: php chmod


【解决方案1】:

[从评论中推荐]

听起来像是一个 SELinux 问题...

尝试在 bash 提示符下运行 setenforce 0,然后重新运行脚本。如果这样可以解决问题,您需要配置 SELinux 以允许您的进程访问指定的文件夹。

您可以使用setenforce 1 重新启用 SELinux。否则,SELinux 将在启动时重新启用。

在 Centos/RedHat 上,我使用 audit2allow 通过分析审计日志来制定适当的策略。我不知道其他发行版的标准是什么。 This Wiki page 解释了 SELinux 的作用以及如果您希望服务器安全,它为何如此重要。

我不知道通过配置文件配置 SELinux 的任何方法,但是您可以使用 chcon 更改特定资源(如文件)的安全上下文。有关安全上下文如何工作的更多详细信息,请参见 here

最后,您可以disable SELinux entirely,但不建议这样做。

正如@VicSeedoubleyew 在 cmets 中指出的那样,有一个有用的清单可以解决此问题和类似问题available here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2016-03-04
  • 2019-09-03
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多