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


SELinux influences "failed to open stream: Permission denied” PHP error

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

我已经多次重新检查目录所有者(用户和组 - chown,chgrp(,将文件夹属性更改为不安全的777(带有chmod的rwx(,但它没有效果。我甚至重新安装了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?

仅针对资源的版主:我知道这个问题比实际编程涵盖更多的管理,但我确信它对开发人员的影响比新手管理员要严重得多,所以在超级用户和 StackOverflow 之间进行选择我选择了后者。但是,是将问题移至超级用户还是保留在这个地方取决于您。

我不是专家,但我自己在 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

希望其中一些片段和信息对您有用,这些不仅仅是一个疯子的漫谈。

除了 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/