我创建了一个文件夹/ home / UploadContent with owner:group as 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具有正确的写入,读取和执行权限,但它仍然会抛出错误。
答案 0 :(得分:0)
[通过评论推广]
听起来像SELinux问题......
尝试在bash提示符下运行class RetrieveMessages(APIView):
def post(self, request, *args, **kwargs):
posted_data = self.request.data
city = posted_data['city']
return_data = [
{"echo": city}
]
return Response(status=200, data=return_data)
def get....
,然后重新运行该脚本。如果这样可以解决问题,则需要配置SELinux以允许您的进程访问指定的文件夹。
您可以使用setenforce 0
重新启用SELinux。如果做不到这一点,SELinux将在启动时重新启用。
在Centos / RedHat上,我使用audit2allow通过分析审核日志来制定适当的策略。我不知道其他发行版的标准是什么。 This Wiki page解释了SELinux的作用以及如果您希望服务器安全,它的重要性。
我不知道有任何方法可以通过配置文件配置SELinux,但是您可以使用chcon来更改特定资源(如文件)的安全上下文。有关安全上下文如何工作的更多详细信息,请参见here。
最后,您可以disable SELinux entirely,但不建议这样做。
正如@VicSeedoubleyew在评论中指出的那样,有一个有用的清单可以解决这个问题和类似问题available here。