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

昨天我花了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环境中“权限被拒绝”问题的所有问题都只涉及文件夹权限问题,而我的情况并非如此.

>(实用)如何在不完全禁用SELinux的情况下在目录上授予Apache httpd服务write-delete-update权限?
>(理论)什么是SELinux?它的用途是什么?为什么(出于什么原因)创建它?我为什么要用它?是否有理由在本地开发机器上启用SElinux?

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

解决方法:

我不是专家,但我自己也遇到过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 *

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

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

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...