SELinux中的Apache和MySQL设定

  Fedora Core 3 在安装时默认把SELinux的选项激活了。SELinux比普通的Linux内核提供了更高的安全性,理论上说,在系统因为未知漏洞溢出的时候,普通用户是不可能得到超级用户的权限了。但是,就是因为SELinux安全性的提高,导致我们在使用时,会发生一些我们以前从没遇到的问题。

  前两天我在使用Fedora Core 3搭建PHP+MySQL的WebServer时就遇到了一些问题。现在整理一下,如果您也遇到同样的问题,那么,看过这篇文章,就应该可以轻而易举的解决了。

  1. Apache - Document root must be a directory 问题。

  有可能和这个问题并发的问题还有 403 Forbidden 禁止访问的问题。

  现象描述:

  不使用系统默认的 /var/www/html作为系统的Document Root,自己新建一个目录后修改 /etc/httpd/conf/httpd.conf 中的配置,然后重起Apache的Daemon,发现Apache无法起动,系统报错:

  Document root must be a directory

  但是,我们设置的DocumentRoot 的确是一个目录,而且apache用户具有可读权限。

  另一种情况:新建一个虚拟目录或文件后,无法访问,显示 Forbidden, 403 Error,但文件或目录有可读权限。

  问题产生的原因:

  一开始我想来想去想不出为什么,但是给我感觉是权限的问题,用传统的Linux的思维方式来看,权限绝对没有问题。但是仔细一想,SELinux是不是会有其他安全的设定?

  检查 avc message,查看 /var/log/messages文件,发现有类似以下内容的这样一段:

  Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc: 

  denied { getattr } for pid=19029 exe=/usr/sbin/httpd

  path=/var/www/html/about.html dev=dm-0 ino=373900

  scontext=root:system_r:httpd_t tcontext=user_ubject_r:user_home_t

  tclass=file

  嘿嘿,问题找到了,果然是SELinux的新特性搞的鬼。我把目录或文件设成了user_home_t类型,因此apache的进程没有权限,无法访问。针对Apache的进程所使用的SELinux target policy规定了apache的进程只能访问httpd_sys_content_t类型的目录或文件。

  解决办法:

  很简单,把目录或文件的策略类型改成 httpd_sys_content_t 就可以了

  使用root用户

  # chcon -t httpd_sys_content_t 目录名或文件名

  然后可以用 ls -laZ 命令查看文件目录的策略类型

  2. Mysql - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)

  刚搞定Apache,mySQL又出问题了。

  问题现象:

  本机用mysql命令可以正常登录数据库并正常操作。但是在php写的页面中,不管怎样,连接mySQL数据库时,都会报如下错误:

  Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)

  问题原因:

  查看mysql.sock文件,存在并且任何人都可读可写。发现avc message (/var/log/messages)中同样有策略错误的记录。

  用 ps -efZ|grep mysql 命令检查mysql的进程,发现mySQL使用了unconfined_t 这个未定义策略类型在运行,而mysql.sock以及mysqld文件的策略类型都是var_lib_t。很明显,这应该是个Fedora Core 3 的 BUG,SELinux target policy的BUG,redhat并没有为mySQL制定正确的target policy。

  解决办法:

  到redhat的bugzilla系统上搜索,果然找到了这个BUG。

  Bug #:  138421 

  https://bugzilla.redhat.com/bugzill...g.cgi?id=138421

  在这个页面找到新的target policy的补丁安装即可

  补丁下载页面:

  ftp://people.redhat.com/dwalsh/SELinux/FC3

  你也可以从本文的附件中下载

  只要下载

  selinux-policy-targeted-1.17.30-2.23以上的版本就能正常使用mySQL了。

  如果你原来的系统安装了 selinux-policy-targeted-source (源代码),那么你也必需下载source的rpm文件,并首先升级这个包,因为两个包有依赖关系。

  补丁安装办法:

  使用root用户。

  先升级新的target-policy-source (如果你之前安装了这个包的话)

  # rpm -Uvh selinux-policy-targeted-sources-1.17.30-2.61.noarch.rpm

  升级新的target-policy

  # rpm -Uvh selinux-policy-targeted-1.17.30-2.61.noarch.rpm

  更新mysql相关的target policy

  # rpm -q -l mysql-server | restorecon -R -v -f -

  # rpm -q -l mysql | restorecon -R -v -f -

  重起mysql的服务

  # service mysqld restart

  试一下吧,一定有效

时间: 2024-12-10 01:07:24

SELinux中的Apache和MySQL设定的相关文章

CentOS系统中安装配置Apache+PHP+MySQL环境

  首先下载软件; [root@localhost ]# wget http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.gz --00:47:30-- http://apache.mirror.phpchina.com/httpd/httpd-2.2.9.tar.gz Resolving apache.mirror.phpchina.com... 221.194.139.225 Connecting to apache.mirror.p

Apache+PHP+MySQL+DW做网站中DWcs6插件问题

问题描述 Apache+PHP+MySQL+DW做网站中DWcs6插件问题 在DW cs6中按装Mx682891_FX_PHPMissingTools.mxp(这是一个文件),使得DW中有 Go To Detail Page 解决方案 可以去Adobe 官网上找找,推荐使用Zend Studio或者sublime,这两款软件不错

在Mac OS X 10.10.3中配置Apache + PHP + MySQL

网上的教程已经有很多,这里简洁的记录一下.以 Mac OS X Mavericks 10.10.3 为例. 先附上如何进入指定目录文件夹,按键盘 Command + Shift + G ,然后输入指定目录名即可. 工具/原料 以 Mac OS X Mavericks 10.10.3 为例. 一.启动 Apache 1 Mac OS X 系统已经集成了 Apache+PHP 环境,依次进入"系统偏好设置 -> 共享" ,开启"Web 共享",就可以打开 Apac

Ubuntu中Apache与MySQL启动/重启/停止命令

apache  代码如下 复制代码 sudo /etc/init.d/apache2 start 启动apache   sudo /etc/init.d/apache2 restart  重启apache sudo /etc/init.d/apache2 stop apache停止 MySQL  代码如下 复制代码 sudo /etc/init.d/mysql start 启动mysql sudo /etc/init.d/mysql restart 重启mysql sudo /etc/init.

LAMP 安装配置APACHE+PHP+MYSQL环境

LAMP 安装 配置 配置环境 操作系统:Redhat Enterprise AS 4 已安装包:httpd2.0.4, mysql4.1,libxml2.6.16, zlib1.2.1.2,gd2.0.28, libpng1.2.7 说明:网上的各种安装说明都不是很好地说明了配置参数的来由,本文将尽可能标明每一步的必要性.已安装包不是必需的,其中mysql可以独立安装,而rpm包形式的httpd因为不是mod-so形式安装的,如果要支持php或者其它模块,要强制remove重安装编码版本. #

在Windows系统上安装Apache和MySQL

选择一个正确的WAMP安装器 有许多不同的WAMP安装器可供选择.一些比较好的有:AppServ,EasyWamp,FoxServ, PHPDev, PHP Triad, Typo3 WAMP Installer(包括内存管理系统程序)和WampServer等.以下将向大家介绍如何使用AppServ. 怎样安装AppServ 1.从SourceForge.NET下载AppServ后,双击运行. 2.同意许可证协议并选定你需要安装软件的目录. 3.推荐这四项全都安装:Apache,MySQL,PH

CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)_Linux

准备篇: CentOS 6.6系统安装配置图解教程 http://www.jb51.net/os/239738.html 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT :wq! #保存

CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)_Linux

准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙 备注:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败, 正

CentOS 5.11服务器安装配置LAMP服务器(Apache+PHP5+MySQL)_Linux

准备篇: CentOS 5.x系统安装配置图解教程 http://www.jb51.net/os/128754.html 1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --d