MySQL 5.6 和 SELinux 正在争论

MySQL 5.6 和 SELinux 正在争论

CentOS 6.4(x64) / MySQL 5.6.10

从源文件安装 MySQL 并在其原始位置 (/var/lib/mysql) 下正常启动它。我将所有内容移至不同的卷 (/u0/mysql),并进行了几轮将其从 SELinux 中豁免 (cat /var/log/audit/audit.log | audit2allow -M mysql-*随后进行semodule -i mysql-*.pp)。每轮之后,我尝试重新启动服务并看到此错误:

Starting MySQL..The server quit without updating PID file (/u0/mysql/server.pid).
 [FAILED]

在添加 3-4 轮豁免之后,我注意到文件不再发生变化。也就是说,所有可以通过这种方式添加的内容都已经添加了。出于好奇,我运行audit2why -a并得到了一大堆:

type=AVC msg=audit(1387207317.009:666): avc:  <some permission> for  pid=20640 
  comm="mysqld" dev=sdc1 ino=36831373 scontext=unconfined_u:system_r:mysqld_t:s0 
  tcontext=system_u:object_r:default_t:s0 tclass=file
 Was caused by:
     Unknown - would be allowed by active policy
     Possible mismatch between this policy and the one under which the audit message was generated.
     Possible mismatch between current in-memory boolean settings vs. permanent ones.

这让我相信应该可以正常工作。如果我禁用 SELinux:setenforce 0那么 mysql 将正常启动,因此它 (SE) 仍然会妨碍。

通过 SF 搜索已经尝试过,但结果没有变化。

那么:我怎样才能找出堵塞的地方呢?

编辑:

[root@server u0]# ls -ldZ /var/lib/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql

[root@server u0]# ls -ldZ /u0/mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /u0/mysql

答案1

您需要将新目录的安全上下文更改为与 /var/lib/mysql 相同。

例如:

ls -ldZ /var/lib/mysql/
drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/

然后使用 chcon 将新目录更改为相同的设置

chcon -R -u system_u -r object_r -t mysqld_db_t /u0/mysql

答案2

您还可以尝试这样的操作:

chcon --reference=/path/to/existing/file /path/to/new/file

顺便说一句,这里有一个关于 SELinux 的精彩介绍:http://www.youtube.com/watch?v=MxjenQ31b70来自 Redhat 2012 Summit。此外,查看日志文件中/var/log/audit/audit.log或中的错误消息/var/log/messages

相关内容