我正尝试在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的datadir与标准的/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目录中directorie的权限之一
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 databasefolder
有没有人有任何想法如何解决这个问题? 我可以确认closuresSELinux解决了这个问题,所以它必须是某种SELinux权限问题。
谢谢
要开始的地方是查看你的/var/log/audit/audit.log AVC denied消息与mysqld有关。 这些可以传递给audit2why收集更多的信息,以帮助您决定做什么。
你有你的mysql文件在一个非标准的位置,虽然目录有正确的上下文,但它们中的文件可能不是。 实现这个目的的最好方法是为/ u / mysql目录添加一个新的fcontext
semanage fcontext -a -t mysqld_db_t "/u/mysql(/.*)?" restorecon -rv /u/mysql
semanage命令configuration策略,以便后续的restorecon命令不会将上下文设置回系统默认值。
我的同事build议,最终解决这个问题。
你可以看到人类可读的拒绝原因
audit2why -a
生成新的策略模块使用
audit2allow -a -M <policyname>
如果你没有发现错误
yum install policycoreutils-python pschaff