SELinux中的Apache和MySQL设定

来源:asp之家 时间:2010-05-09 17:54:00 

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

试一下吧,一定有效

标签:SELinux,apache,mysql
0
投稿

猜你喜欢

  • 利用Jsvc把Java程序嵌入到Linux服务中去

    2009-11-19 12:20:00
  • Google与ShopEx正式达成合作伙伴关系

    2009-11-12 13:31:00
  • CISCO PIX防火墙及网络安全配置指南

    2008-08-19 16:51:00
  • 细说 AdSense 政策 – 什么是“版权材料”

    2007-11-01 12:45:00
  • 个人网站的成功:一个主题加高质量内容

    2008-10-08 18:28:00
  • 你有重构的勇气么?

    2010-05-03 15:05:00
  • 新版Firefox可侦测笔记本方向 传给应用程序

    2009-10-14 13:42:00
  • 标签,定制化搜索和SEO

    2007-10-29 12:04:00
  • 在Win 2003环境中设置一个Web服务器

    2009-07-23 14:14:00
  • VPS的简单安全措施三步曲

    2011-01-17 17:54:00
  • 服务器安全配置:常用的WEB服务器安全配置技巧

    2012-02-25 20:05:20
  • windows2008中IIS7详细安装图文教程加fastcgi模式PHP配置教程

    2009-08-31 21:22:00
  • 一分钟炫彩海量图片 打造绝美个人写真

    2009-11-23 14:00:00
  • 教你robots文件使用方法屏蔽搜索抓取方法

    2009-02-06 14:18:00
  • 虚拟主机和服务器合租市场将何去何从

    2008-10-06 18:59:00
  • 朱则荣:控制Digg的50个网站

    2009-04-03 15:41:00
  • 企业内部FTP服务器的架设

    2009-01-21 16:58:00
  • 在Godaddy免费空间上绑定其他域名方法

    2010-04-19 19:34:00
  • 十分钟快速架设Linux系统下WebMail

    2010-03-12 18:47:00
  • 淘宝技术发展(Java时代:脱胎换骨)

    2012-03-05 20:10:56
  • asp之家 网站运营 m.aspxhome.com