昨天我花了5个小时,一直在发现一个看似不合理的错误“无法打开流。权限被拒绝”,这个错误发生在写入文件系统的任何操作之后:fopen(使用“w”和“a”标志),move_uploaded_file,file_put_contents。
我多次检查了目录所有者(用户和组 - chown,chgrp),将文件夹属性更改为不安全的777(rwx与chmod
),但没有效果。我甚至重新安装了Apache和PHP,但仍然面临着相同的错误。
经过几个小时的阅读各种文档后,我发现错误的根源是SELinux限制自动应用于Apache服务httpd。我通过编辑我的Fedora(版本20)上的/etc/selinux/config
文件来关闭SELinux,即更改以下行:
SELINUX=enforcing
to
SELINUX=disabled
我重新启动了电脑,烦人的错误终于消失了。
我必须注意到,在LAMP环境中关于“权限被拒绝”的问题的所有Stack Overflow问题都只涉及文件夹权限问题,而这并不是我的情况。
1.(实用)如何在不完全禁用SELinux的情况下授予Apache httpd服务对目录的写入-删除-更新权限?
2.(理论)什么是SELinux?它的目的是什么?为什么(出于什么原因)创建它?为什么应该使用它?在本地开发机器上保持SElinux启用的原因是什么?
仅供资源的管理员:我知道这个问题涵盖的更多是管理而不是实际编程,但我确信它对开发人员的影响比初学者管理员严重得多,因此在SuperUser和StackOverflow之间选择后者。然而,您可以选择将问题移至SuperUser或保留在此处。