SELinux影响“无法打开流:权限被拒绝”PHP错误

时间:2014-12-16 09:29:42

标签: php permissions fedora lamp selinux

昨天我花了5个小时直接发现一个看似不合理的错误“无法打开流。权限被拒绝”,这是在写入文件系统的任何操作之后发生的:fopen(带有“w”和“a”标志) ,move_uploaded_file,file_put_contents。

我已经多次重新检查目录所有者(用户和组 - chown,chgrp),将文件夹属性更改为不安全777(rwx with chmod),但它没有效果。我甚至重新安装了Apache和PHP,但仍面临同样的错误。

由于在阅读各种文档数小时后出现错误的原因是SELinux限制自动应用于Apache服务httpd。我只是通过更改线路编辑Fedora(版本20)上的/etc/selinux/config文件来关闭SELinux:

SELINUX=enforcing

SELINUX=disabled

我重新启动了计算机,这个恼人的错误终于消失了。

我必须注意到Stack Overflow上关于LAMP环境中“许可被拒绝”问题的所有问题都只涉及文件夹权限问题,而我的情况并非如此。

  1. 实用)如何在不完全禁用SELinux的情况下授予Apache httpd服务写入删除更新权限?

  2. 理论)什么是SELinux?它的用途是什么?为什么(出于什么原因)创建它?我为什么要用它?是否有理由在本地开发机器上启用SElinux?

  3. 仅限于资源的主持人:我知道这个问题涵盖了比实际编程更多的管理,但我确信它会比新手管理员更严重地影响开发人员,因此在SuperUser和StackOverflow I之间进行选择采取后者。但是,由您来决定是在SuperUser移动问题还是留在这个地方。

2 个答案:

答案 0 :(得分:5)

我不是专家,但我自己也遇到过SELinux的一些问题。我读了几篇文章,从我可以收集到的内容来看,SELinux是服务器的另一层安全,真的应该留下来,而不是因为无知而关闭(这是我读的引用,而不是我的话)。我发现这个网站很有帮助,也很滑稽,它可能会给你提供比我更多的信息。

http://stopdisablingselinux.com/

我将遇到的一些事情我将分享:

您可以使用以下命令检查当前的SELinux权限:

ls -lZ

您可以使用以下命令设置SELinux权限:

chcon unconfined_u:object_r:httpd_user_content_t:s0

您可以使用通配符更改目录中的所有文件,如下所示:

chcon unconfined_u:object_r:httpd_user_content_t:s0 *

您可以使用此设置递归地设置所有文件和目录的权限(这是可能会修复您的权限问题的命令,您应该像7月那样避免瘟疫):

chcon -R unconfined_u:object_r:httpd_user_content_t:s0 *

如果您希望使用主目录来提供站点或应用程序,则需要发出以下命令:

setsebool -P httpd_enable_homedirs=1

我在使用Selinux的centos上遇到了fsockopen的问题,我不得不使用以下内容(-P使这个更改成为永久性的,你也需要这个命令):

setsebool -P httpd_can_network_connect 1

您可以通过以下方式查看在HTTPD上设置的标志:

sestatus

我认为最后一点是,我在服务器上遇到了公钥/私钥验证的问题,并且需要运行此命令来修复它(这是我认为的已知错误):

restorecon -R -v /home

希望这些片段和信息中的一些对你有用,而这些不仅仅是一个疯子的谣言。

答案 1 :(得分:0)

除了HumbleRat非常有用的答案外,这还解决了我的Apache 不允许在专用目录中写日志的问题:

# Allow write only to specific dirs
sudo chcon -t httpd_sys_rw_content_t /data/www/html/sites/mysite/logs -R

来源:https://blog.lysender.com/2015/07/centos-7-selinux-php-apache-cannot-writeaccess-file-no-matter-what/