无法使用 SELinux 启动 Mysql

无法使用 SELinux 启动 Mysql

我尝试在 CentOS 6 上使用 SELinux 启动 MySQL,但是出现以下错误。

131212 09:08:08 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
131212 09:08:58 mysqld_safe Starting mysqld daemon with databases from /u/mysql
131212  9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test
131212  9:08:58 [Warning] Can't create test file /u/mysql/webserver.lower-test
^G/usr/libexec/mysqld: Can't change dir to '/u/mysql/' (Errcode: 13)
131212  9:08:58 [ERROR] Aborting

我们已经在许多其他服务器上设置了 MySQL,但这里的区别在于 mysql 数据目录与标准 /vat/lib.mysql 位于不同的分区中。相反,它位于 /u/mysql 中。

这是 /etc/my.cnf

[mysqld]
datadir=/u/mysql
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

max_allowed_packet = 32M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

以下是 mysql 目录的权限

drwxr-xr-x. mysql    mysql    system_u:object_r:mysqld_db_t:s0 mysql

以下是 /u/mysql 目录中某个目录的权限

drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 databasefolder

有人知道如何修复这个问题吗?我可以确认关闭 SELinux 可以解决该问题,因此这一定是某种 SELinux 权限问题。

谢谢

答案1

首先要查看 /var/log/audit/audit.log 中与 mysqld 相关的 AVC 拒绝消息。这些消息可以传递给审计为什么收集更多信息来帮助您决定做什么。

您的 mysql 文件位于非标准位置,尽管目录具有正确的上下文,但其中的文件可能不正确。实现此目的的最佳方法是为 /u/mysql 目录添加新的 fcontext

semanage fcontext -a -t mysqld_db_t "/u/mysql(/.*)?"
restorecon -rv /u/mysql

塞马纳盖命令配置策略,以便后续恢复控制命令不会将上下文设置回系统默认值。

答案2

我的同事建议这最终解决问题。

你可以通过以下方式查看可读的拒绝原因:

audit2why -a

要生成新的策略模块,请使用

audit2allow -a -M <policyname>

如果出现未找到错误

yum install policycoreutils-python pschaff

https://www.centos.org/forums/viewtopic.php?t=8935

相关内容