【发布时间】: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 吗?就像一个纯粹的配置文件?另外,您能否将您的评论格式化为答案,因为我相信其他人会从这个答案中得到帮助。