SELinux之于MySQL
博客分类: 数据库
========================================================
我之前写了一篇《AppArmor and MySQL》的文章,讲了如何在启用AppArmor的情况下改变MySQL的默认文件路径。Ubuntu和SUSE配备了AppArmor,而其他一些发布版本,如Oracle Linux则没有,以及其他一些相关的版本如Red Hat、CentOS及Fedora都没有。相对的,他们使用另一个托管访问控制(译注:mandatory access control)系统SELinux。
SELinux(安全强化,如果你感兴趣)“是linux中支持安全访问控制策略机制的一种特性”--维基百科。更简单的说,它能阻止比如程序之类的访问他们不应该访问的文件和网络端口等。所谓“不应该访问”这里指的是“尚未被配置为可以访问”。比如说,MySQL允许访问它的数据目录/var/lib/mysql,并且可以读取/etc/my.cnf。它可以打开3306端口,但是SELinux阻止它向/home/Jeremy或者/sbin或者其他任何尚未配置成为MySQL位置的路径进行写操作。
简而言之,如果你想更改MySQL的默认端口为一个非标准端口,或者试图备份或者设置数据文件或日志文件到非常用路径,你就会在MySQL错误日志里面收到很多奇怪的禁止访问类型的错误。另外,你同样会在/var/log/audit/audit.log(如果auditd正在运行,否则在/var/log/messages或者/var/log/syslog里面,这取决于你的系统配置)里收到信息。
会得到什么错误呢?
我这边采用了MySQL5.6及Oracle Linux 6.3作为样例环境,同时启用了SELinux。当我把datadir这个变量设置为/datadir时(此目录复制了MySQL原数据目录的所有内容,并且设置了正确的权限),就无法启动服务了。看下面的错误。
MySQL错误日志中:
130321 11:50:51 mysqld_safe Starting mysqld daemon with databases from /datadir
...
2013-03-21 11:50:52 2119 [Warni