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

2023-11-21

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

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

经过几个小时的阅读各种文档后发现,错误的根源是 SELinux 限制自动应用于 Apache 服务 httpd。我只是通过编辑关闭了 SELinux/etc/selinux/config通过更改行在我的 Fedora(版本 20)上创建文件:

SELINUX=enforcing

to

SELINUX=disabled

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

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

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

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

仅针对该资源的版主:我知道这个问题涉及的管理内容比实际编程更多,但我确信它对开发人员的影响比新手管理员要严重得多,因此在 SuperUser 和 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

我在 CentOS 上使用 Selinux 时遇到了 fsockopen 问题,我不得不使用以下命令(-P 使此更改永久化,您可能还需要此命令):

setsebool -P httpd_can_network_connect 1

您可以使用以下命令查看 HTTPD 上设置的标志:

sestatus

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

restorecon -R -v /home

希望这些片段和信息中的一些对您有用,并且这些不仅仅是一个疯子的胡言乱语。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SELinux 影响“无法打开流:权限被拒绝”PHP 错误 的相关文章

  • Apache 2.4.9 在启用 ssl 模块并设置 ssl 证书后失败

    Apache 在尝试设置 ssl 证书后抛出以下错误 ssl emerg pid 30907 AH02572 Failed to configure at least one certificate and key for localhos
  • 由于未定义符号,PECL solr 未加载:curl_easy_getinfo

    我正在尝试加载 PECL solr 扩展 我尝试使用 pecl install solr 并下载并使用 phpize configure make 来安装它 在这两种情况下 扩展安装时都没有错误 但在 apache 重新启动后 或在命令行上
  • 当安装的 RPM 取代了另一个 RPM 时如何检测升级

    RPM scriptlet 被传入 1 https fedoraproject org wiki Packaging Scriptlets rd Packaging ScriptletSnippets Syntax 操作完成后 系统中将保留
  • PHP 用星号替换所有字符

    假设我有一个字符串形式的密码 password thisisaplaintextpassword 我怎样才能把它变成下面的样子 password 我想通过电子邮件向用户发送他们的帐户详细信息 但不想发送整个内容 Use 字符串重复 http
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • 从 FilterControllerEvent 监听器重定向到另一个 Symfony 路由

    我正在尝试设置一个 kernel controller 侦听器 以便在函数返回 true 时重定向到另一个路由 我有可用的路线 但无法使用此路线设置控制器 event gt setController 我收到以下错误 FilterContr
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 如何在 Zend Framework 中存储 cron 作业的脚本?

    因为 ZF 的所有 URL 都依赖于 mod 重写 所以我并不清楚应该在哪里存储用于 cron 作业的本地脚本 有人有什么建议 或者有 正式接受 的方式吗 我用模块化目录结构 http framework zend com manual e
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • Magento补丁安装失败

    从以下位置下载并运行 Magento PHP 5 4 支持补丁 Magento CE v1 7 0 0 1 7 0 2 时http www magentocommerce com download http www magentocomme
  • strlen()==0 和empty()之间有区别吗?

    我正在查看其他人编写的一些表单验证代码 我看到了这个 strlen 0 当测试表单变量是否为空时 我使用empty 功能 一种方法比另一种方法更好吗 它们在功能上等效吗 strlen是获取字符串中的字符数 同时empty用于测试变量是否为空
  • 如何从导出的 csv 文件中删除双引号

    我正在使用 Laravel 5 8 并且添加了 Maatwebsite 包 用于从数据库表导出 CSV 文件 这是我导出的类 class ConfirmedExport implements FromCollection WithHeadi
  • TOMCAT 6 中的 PHP - 异常

    我一直在努力融入PHP in APACHE TOMCAT 6依照指示second answer为了QUESTION https stackoverflow com questions 779246 run a php app using t
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • 在 Woocommerce 购物车中设置最小小计金额

    我正在尝试将最低订单金额设置为 25 美元 到目前为止 我找到了这段代码 如果未达到最低限度 它似乎可以阻止结账 但它使用的小计包含税费 我需要在总计中排除税费 add action woocommerce checkout process
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • “pdo_mysql”已禁用,我无法启用它。我在 iMac 7.1 OSX 10.6.8 上安装了 MAMP v. 3.0.4

    pdo mysql 已禁用 我无法启用它 我在 iMac 7 1 OSX 10 6 8 上安装了 MAMP v 3 0 4 在我的 phpinfo 页面上 我可以看到唯一启用的 PDO 是 sqlite 如果我查看 php 5 5 10 扩
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将

随机推荐

  • 强制 TextView 多行,不带 \n

    知道如何在视图内空间耗尽后强制文本视图转到新行吗 我想要发生的行为是 在不以编程方式找出大小并强制换行的情况下 我希望它自行发生 在此代码中 它强制按钮离开屏幕
  • 方法签名中的 params 关键字的真正含义是什么

    我正在浏览 Troelsen 的 Pro C 2010 并发现了有关 params 关键字方法修饰符的讨论 阅读文本 MSDN 和其他 tubez 来源 在我看来 从 params 获得的唯一东西就是能够将逗号分隔的值列表传递给方法 我编写
  • Android Studio 错误:无法在模拟器中启动 AVD

    错误 调整分区 e2fsck 大小失败 退出代码为 1 我已确保在设置 AVD 时完全按照此视频进行操作 每当我使用 x86 64 系统映像运行 AVD 时 我都会收到以下消息 无法在模拟器中启动 AVD 输出 创建文件系统 参数 大小 6
  • 如何使用私有构造函数从类创建对象?

    我有一个类游戏 它是我的主类 还有一个二类卡牌 Card 类的属性和构造函数是私有的 只有函数 init 是公共的 函数 init 检查值的合理性 如果一切正常 则构造函数将获取值并创建一个对象 现在我想在 Game 类中从 Card 类创
  • 在计算中使用布尔值以避免分支

    这是我想出的一些微观优化的好奇心 struct Timer bool running false int ticks 0 void step versionOne int mStepSize if running ticks mStepSi
  • 在 TypeScript 中使用外部模块

    假设我们在 TypeScript 中有以下 2 个外部模块 export module My Services Common export class Helper and export module My Services export
  • 如何在 python ggplot 中创建条形图?

    我正在使用yhat的ggplot 库 我有以下熊猫数据框 degree observed percent observed expected percent expected 0 0 0 0 0 0 0 044551 1 1 1 0 1 1
  • 将 Firebase 用户迁移到 AWS Cognito

    我目前有一个使用 Firebase 进行用户身份验证和存储数据的移动应用程序 我想从 Firebase 迁移到 AWS 从 Firebase 导出数据库非常简单 下载 JSON 导出并填充 AWS 如何将用户身份验证迁移到 Cognito
  • 对 numpy 中的分区索引进行分组 argmax/argmin

    Numpy s ufuncs 有一个reduceat在数组中的连续分区上运行它们的方法 所以不要写 import numpy as np a np array 4 0 6 8 0 9 8 5 4 9 split at 4 5 maxima
  • pytest 可以在测试类中运行测试吗?

    我决定将一些测试放在一个类中 示例代码如下 class IntegrationTests pytest mark integrationtest pytest mark asyncio async def test job self ass
  • 将 Thymeleaf 变量处理为 HTML 代码而不是文本

    我正在使用 Thymeleaf 处理 html 模板 我了解如何从控制器附加内联字符串 但现在我想将 HTML 代码片段附加到页面中 例如 让我们在我的 Java 应用程序中保留以下内容 String n span i class i st
  • python 中的 Pickle 队列对象

    我有一个使用队列对象列表的类 我需要腌制此类 包括保存在队列对象中的信息 例如 import Queue import pickle class QueueTest object def init self self queueList d
  • 静态方法和单元测试

    我一直在读到 在使用 TDD 时往往会避免使用静态方法 因为它们往往很难模拟 但我发现 单元测试最简单的方法是具有简单功能的静态方法 不必实例化任何类 鼓励简单 只做一件事 独立 等的方法 有人可以解释 TDD 最佳实践和务实轻松之间的这种
  • 出现错误:Route 中的 Route() 无法应用于 String

    我正在设计一个基于 Java 的 MongoDB 应用程序 但在使用 Spark 时遇到了障碍 package com tengen import spark Request import spark Response import spa
  • 使用同一按钮播放/暂停 [AVAudioPlayer]

    我怎样才能播放声音IBAction通过按UIbutton一次并通过再次按下按钮暂停它AVAudioPlayer 我也想改变它的状态UIButton何时播放声音以及何时不播放声音 这是我的代码 IBAction Beat if Media2
  • 在SVG中定义圆/弧动画

    有谁知道如何在 SVG 中定义动画圆弧 圆 使得圆弧从 0 度开始并以 360 度结束 您可以使用路径的 lineto 手动 绘制它并计算弧的位置
  • 组合 ggplot 和基础图形时使面板具有相同的边距

    我生成了一个结合了 ggplot 和基本图形的图形 t lt c 1 24 14 P lt 24 A lt 10 y lt A sin 2 pi t P 20 par mfrow c 2 1 plot y type l xlab Time
  • Qt5 信号/槽语法,带重载信号和 lambda

    我正在使用新的信号 槽连接语法 它对我来说工作得很好 除非我尝试连接一个过载的信号 MyClass public QWidget Q OBJECT public void setup QComboBox myBox new QComboBo
  • 如何使用 localstack 部署 SAM 堆栈?

    我已经编写了一个 SAM 堆栈 并且可以在 AWS 上构建 打包和部署它 我还可以使用 start local 或 invoke 来测试 现在我需要测试其他 AWS 资源 我已将这些资源添加到我的 SAM 模板中 它在 AWS 上运行良好
  • SELinux 影响“无法打开流:权限被拒绝”PHP 错误

    昨天 我连续花了 5 个小时发现了一个看似不合理的错误 无法打开流 权限被拒绝 该错误发生在写入文件系统的任何操作之后 fopen 带有 w 和 a 标志 move uploaded file 文件放置内容 我已经多次重新检查目录所有者 用