SELinux 环境中,MySQL 服务器的守护进程都是在受限的 mysqld_t 域中运行。并且和其他受限的网络服务相互隔离。下面的示例演示的是 SElinux 下的 mysqld 进程。
Code example:
> ps -eZ | grep mysqld
unconfined_u:system_r:mysqld_safe_t:s0 6035 pts/1 00:00:00 mysqld_safe
unconfined_u:system_r:mysqld_t:s0 6123 pts/1 00:00:00 mysqld
MySQL 的 SELinux 文件类型
mysqld_db_t 这种文件类型用于标记 MySQL 数据库的位置。在红帽企业 Linux 中数据库的默认位置是 /var/lib/mysql。如果 MySQL 数据库的位置发生了变化,新的位置必须使用这种类型。
mysqld_etc_t 这种文件类型用于标记 MySQL 的主配置文件中的 /etc/my.cnf 文件和 /etc/mysql 目录中的文件。
mysqld_exec_t 这种文件类型用于标记 /usr/libexec/mysqld 程序文件。
mysqld_initrc_exec_t 这种文件类型用于标记 MySQL 的初始化文件 /etc/rc.d/init.d/mysqld。
mysqld_log_t 这种文件类型用于标记日志文件。
mysqld_var_run_t 这种文件类型用于标记 /var/run/mysqld 目录中文件,尤其是 /var/run/mysqld/mysqld.pid 和 /var/run/mysqld/mysqld.sock。
MySQL 的布尔变量
allow_user_mysql_connect 当开放这个布尔变量时允许用户连接数据库。
exim_can_connect_db 当开放这个布尔变量时允许 exim 邮件程序访问数据库服务器。
ftpd_connect_db 当开放这个布尔变量时允许 ftpd 进程访问数据库服务器。
httpd_can_network_connect_db 当开放这个布尔变量时允许 httpd 进程访问数据库服务器。
配置实例:
修改 MySQL 的存储数据库位置,在红帽企业 Linux 6 中数据库的默认位置是 /var/lib/mysql,文件类型是 mysqld_db_t。下面把它修改为 /opt/mysql,步骤如下:
首先查看缺省情况下 MySQL 的存储数据库位置(/var/lib/mysql)和 SElinux 属性:
Code example:
> ls -lZ /var/lib/mysql
drwx——. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 mysql
记录下 MySQL 的存储数据库位置(/var/lib/mysql)的 SElinux 属性,然后停止 MySQL,然后建立一个新的目录,把原来的数据库文件复制到新目录,并且设置 SElinux 属性。
Code example:
> service mysqld stop
> mkdir -p /opt/mysql
> cp -R /var/lib/mysql/* /opt/mysql/
> chmod 755 /opt/mysql
> chown -R mysql:mysql /opt/mysql
> semanage fcontext -a -t mysqld_db_t “/opt/mysql(/.*)?”:
> restorecon -R -v /opt/mysql
修改配置文件 /etc/my.cnf 重启 MySQL
Code example:
# vi /etc/my.cnf
[mysqld]
datadir=/opt/mysql
> service mysqld start