mysql selinux crash_mysql由于SELinux启动失败

系统:REAS4.7  64位

mysql:5.125

今天mysql突然无法启动,错误日志非常精简,让人摸不着头脑,后来发现/var/log/message中报下面的错误

1.Dec    8 16:24:28 localhost kernel: audit(1165566268.356:0): avc:    denied    { write } for    pid=3680 exe=/usr/sbin/mysqld name=mysql dev=dm-0 ino=1849 scontext=root:system_r:mysqld_t tcontext=root:object_r:var_lib_t tclass=dir

2.Dec    8 16:24:28 localhost kernel: audit(1165566268.361:0): avc:    denied    { write } for    pid=3680 exe=/usr/sbin/mysqld name=mysql dev=dm-0 ino=1849 scontext=root:system_r:mysqld_t tcontext=root:object_r:var_lib_t tclass=dir

3.Dec    8 16:24:28 localhost kernel: audit(1165566268.459:0): avc:    denied    { write } for    pid=3680 exe=/usr/sbin/mysqld name=mysql dev=dm-0 ino=1849 scontext=root:system_r:mysqld_t tcontext=root:object_r:var_lib_t tclass=dir

4.Dec    8 16:25:03 localhost lsb_log_message:    failed

5.Dec    8 16:46:57 localhost sshd(pam_unix)[3803]: session opened for user root by root(uid=0)

后来经过排查,是由于selinux启动了造成的。

rhel 4 包括了一个 SELinux 的实现。SELinux 代表了用户,程序以及进程间相互交流的主要变化, 他使用在 ext2/ext3 文件系统上的扩展属性来支持 SELinux。当一个文件被写到默认挂载的 ext2/ext3 文件系统中时,一个扩展的属性也会被写入。看上面的日志可以知道,/var/lib/mysql目录是var_lib_t类型,而selinux为了安全性只允许mysql进程访问mysqld_t类型的文件或目录,然而又去/etc/selinux/config里disabled掉selinux后(临时关闭selinux方法:setenforce 0),一切都正常了。或者还可以更改/var/lib/mysql目录属性为mysqld_t也可以。

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 命令查看文件目录的策略类型

chcon - change file SELinux security context

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值