SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接mysql。
我协助查看了下,确实如此,无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似:
Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13)
无论如何修改MySQL的授权,或者调整php.ini中关于MySQL的设置,或者修改MySQL的监听网口,都无法解决。
而如果用命令行人工连接MySQL,则一切正常。
问题看起来像是php(with apache)不被允许连接MySQL,但是防火墙也没有限制。想来想去,唯有SELinux的因素会导致这个问题。
getsebool -a|grep -i httpd
可以看到这里设置了httpd进程的许可模式,再仔细看一下,有一个选项:
getsebool -a|grep -i httpd_can_network_connect
httpd_can_network_connect --> off
现在明白了,原来是SELinux限制了httpd对外访问的权限。将其开启即可:
setsebool -P httpd_can_network_connect=1
如果对SELinux不熟悉,也可以直接修改系统配置文件 /etc/sysconfig/selinux,全局关闭:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
#把设置改为disabled
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
然后重启操作系统,即可生效。
或者,直接执行命令,可在线生效:
[root@imysql~]# setenforce 0
setenforce: SELinux is disabled
相关推荐
-
CentOS 7系统下SELinux阻止MongoDB启动的问题详解
问题描述: 最近发现了一个问题,在新装的CentOS7上,安装了MongoDB3.4,挂载了一个大的数据盘后,修改/etc/mongo.conf,将配置文件中的log和data目录放在新的数据盘下,并修改文件的访问权限. 改完后的mongo.conf: # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ #
-
如何理解Linux下的SELinux
一.SELinux简介 SELinux是一个内核级别的安全机制,从Linux2.6内核之后就将SELinux集成在了内核当中,因为SELinux是内核级别的,所以我们对于其配置文件的修改都是需要重新启动操作系统才能生效的. 现在主流发现的Linux版本里面都集成了SELinux机制,CentOS/RHEL都会默认开启SELinux机制. 系统资源都是通过进程来读取更改的,为了保证系统资源的安全,传统的Linux使用用户.文件权限的概念来限制资源的访问,通过对比进程的发起用户和文件权限以此来保证系
-
详解Android Selinux 权限及问题
由于现做的是MTK平台,源码路径基于MTK, 不过高通大同小异 说明 Android 5.0以后完全引入了 SEAndroid/SELinux 安全机制,这样即使拥有 root 权限或 chmod 777 ,仍然无法再JNI以上访问内核节点. 其实在 Android 4.4 就有限制的启用此安全机制了.后面内容都按照 5.0 以后介绍,4.4 会有些许差异. SELinux Mode SELinux 分为两种模式,Android 5.0 后所有进程都使用 enforcing mode. enfo
-
SELinux 入门详解
回到 Kernel 2.6 时代,那时候引入了一个新的安全系统,用以提供访问控制安全策略的机制.这个系统就是 Security Enhanced Linux (SELinux),它是由美国国家安全局(NSA)贡献的,它为 Linux 内核子系统引入了一个健壮的强制控制访问Mandatory Access Control架构. 如果你在之前的 Linux 生涯中都禁用或忽略了 SELinux,这篇文章就是专门为你写的:这是一篇对存在于你的 Linux 桌面或服务器之下的 SELinux 系统的介绍
-
Linux中selinux基础配置教程详解
selinux(Security-Enhanced Linux)安全增强型linux,是一个Linux内核模块,也是Linux的一个安全子系统. 三种模式: Enforcing:强制模式,在selinux运作时,已经开始限制domain/type. permissive: 警告模式,在selinux运作时,会有警告讯息,但不会限制domain/type的存取. disabled: 关闭模式. 可用getenforce查看selinux状态 selinux对文件的作用: 当开启selinux后,s
-
关闭selinux(防火墙)方法分享
刚好手工装完一台CentOS6.4,就顺便记录一下. 复制代码 代码如下: # sestatusSELinux status: enabledSELinuxfs mount: /selinuxCurrent mode: enforcingMode from config file: enforcingPolicy version: 24Policy
-
简述Android中SELinux的TE
一.SELinux资源访问基本概念 SELinux使用类型强制来改进强制访问控制.所有的主体(程序进程)对客体(文件/socket等资源)的访问都有一条TE规则来许可.当程序访问一个资源的时候,系统会搜索所有的TE规则集,并根据结果进行处理.这个规则集是由访问向量规则(AV, Access Vector)来描述的. 内核向外部暴露允许访问的资源权限,由TE来描述主体拥有什么样的访问权.SELinux定义了30个不同的客体类别: security process system capability
-
SELINUX工作原理详解
1. 简介 SELinux带给Linux的主要价值是:提供了一个灵活的,可配置的MAC机制. Security-Enhanced Linux (SELinux)由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SELinux是一个安全体系结构,它通过LSM(Linux Security Modules)框架被集成到Linux Kernel 2.6.x中.它是NSA (United States National Se
-
SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip.unix socket)都无法连接mysql. 我协助查看了下,确实如此,无论是指定IP.端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似: 复制代码 代码如下: Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13) 无论如何修改MySQL的授权,或者调整p
-
SELinux导致PHP连接MySQL异常Can't connect to MySQL server的解决方法
同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip.unix socket)都无法连接mysql. 我协助查看了下,确实如此,无论是指定IP.端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似: 复制代码 代码如下: Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13) 无论如何修改MySQL的授权,或者调整p
-
MySQL异常恢复之无主键情况下innodb数据恢复的方法
本文讲述了MySQL异常恢复之无主键情况下innodb数据恢复的方法.分享给大家供大家参考,具体如下: 在mysql的innodb引擎的数据库异常恢复中,一般都要求有主键或者唯一index,其实这个不是必须的,当没有index信息之时,可以在整个表级别的index_id进行恢复 创建模拟表-无主键 mysql> CREATE TABLE `t1` ( -> `messageId` varchar(30) character set utf8 NOT NULL, -> `tokenId`
-
Mysql删除重复数据保留最小的id 的解决方法
在网上查找删除重复数据保留id最小的数据,方法如下: DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING count(peopleName) > 1 ) AND peopleId NOT IN ( SELECT min(peopleId) FROM people GROUP BY peopleName HAVING count(peopleName) >
-
Mysql 忘记root密码和修改root密码的解决方法(小结)
一 修改root密码的三种办法 方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123'); 方法2:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysqladmin -uroot -p12
-
MySQL中隐式转换的踩坑记录以及解决方法分享
目录 复现当时的情景 根源所在 隐式转换的规则 避免进行隐式转换 本来是一个平静而美好的下午,其他部门的同事要一份数据报表临时汇报使用,因为系统目前没有这个维度的功能,所以需要写个SQL马上出一下,一个同事接到这个任务,于是开始在测试环境拼装这条 SQL,刚过了几分钟,同事已经自信的写好了这条SQL,于是拿给DBA,到线上跑一下,用客户端工具导出Excel 就好了,毕竟是临时方案嘛. 就在SQL执行了之后,意外发生了,先是等了一下,发现还没执行成功,猜测可能是数据量大的原因,但是随着时间滴滴答答
-
MySQL报错:sql_mode=only_full_group_by的4种轻松解决方法(含举例)
目录 前言 方法一:直接修改数据库配置 方法二:修改数据库配置(永久生效) 方法三:使用 any_value() 或 group_concat() 方法四:开动脑筋,修改代码 总结 前言 作为初学者,我们在使用MySQL的时候总是会遇到各种各样的报错,让人头痛不已.其中有一种报错,sql_mode=only_full_group_by,十分常见,每次都是老长的一串出现,然后带走你所有的好心情 出现这样的报错,并不是因为你的代码写得不好,而是因为在MySQL 5.7后,MySQL默认开启了SQ
-
在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法
1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: sudo dpkg -i mysql-workbench-community-6.3.8-1ubu1604-amd64.deb 提示:未安装软件包 libpng12-0. 然而使用sudo apt-get -f install后还是报错,后来找到下载libpng12-0的地址并安装. 2.下载安装libpng12-0 下载libpng12-0地址:
-
Mysql非安装版使用步骤及忘记密码解决方法
第一步 将压缩包解压到相应的磁盘下. 第二步 打开cmd进入解压后的文件夹的bin目录下,运行mysqld -install. 第三步 开启服务:cmd进入解压的文件夹下,执行net start mysql. 第四步 安装图像界面navicat. 忘记密码的解决方法: 1. 管理员登陆系统,停止MySQL服务或者结束mysqld 进程 2. 进入命令行,来到mysql的安装目录.假设安装目录为 d:\mysql\ , CMD进入 命令行 3. 运行 d:\MYSQL\bin\mysqld --s
-
MySQL中Union子句不支持order by的解决方法
本文实例讲述了MySQL中Union子句不支持order by的解决方法.分享给大家供大家参考,具体如下: 我对DB知之甚少,这问题只在MySQL遇到,不知道别的DBMS是不是也如此. 问题是这样的,我打算在一个表里获得与某一行记录相邻的两行,并且想通过union一起取出来,所以这么写: select id,title from subjects where id>#some_id# order by id limit 1 union select id,title from subjects
随机推荐
- JavaScript原生数组Array常用方法
- VBS教程:运算符-\ 运算符
- 用js实现的十进制的颜色值转换成十六进制的代码
- 扩展JS Date对象时间格式化功能的小例子
- jquery repeater 模仿 Google 展开页面预览子视图
- thinkphp备份数据库的方法分享
- 基于zepto.js实现登录界面
- BootStrap智能表单实战系列(三)分块表单配置详解
- JS实现单行文字不间断向上滚动的方法
- Jquery提交表单 Form.js官方插件介绍
- Java中equals()方法重写实现代码
- C#简单的向量用法实例教程
- C#中如何获取文件图标
- php中实现简单的ACL 完结篇
- Android中资源文件用法简单示例
- PHP制作图型计数器的例子
- Java接口名称冲突问题的讲解
- vue实现todolist基本功能以及数据存储功能实例详解
- Spring Boot 部署过程解析(jar or war)
- Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法