20.4. 配置示例
20.4.1. MariaDB 更改数据库位置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Red Hat Enterprise Linux 时,MariaDB 用于存储其数据库的默认位置是
/var/lib/mysql/。这是默认情况下 SELinux 预期为它的位置,因此这个区域已为您进行适当标记,使用 mysqld_db_t 类型。
数据库的存储位置可以根据个人环境要求或首选项来更改,但务必要让 SELinux 知道这个新位置;它应相应地进行标记。这个示例解释了如何更改 MariaDB 数据库的位置,以及如何标记新位置,以便 SELinux 仍然可以根据其内容向新区域提供保护机制。
请注意,这只是一个示例,并演示 SELinux 如何影响 MariaDB。MariaDB 的综合文档不在本文的讨论范围之内。详情请查看官方 MariaDB 文档。本例假定安装了 mariadb-server 和 setroubleshoot-server 软件包,
auditd 服务正在运行,并且 /var/lib/mysql/ 的默认位置中有一个有效的数据库。
- 查看
mysql的默认数据库位置的 SELinux 上下文:~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql这将显示mysqld_db_t,这是数据库文件位置的默认上下文元素。此上下文必须手动应用到本示例中将使用的新数据库位置,才能正常工作。 - 输入以下命令,输入
mysqldroot 密码来显示可用的数据库:~]# mysqlshow -u root -p Enter password: ******* +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | | wikidb | +--------------------+ - 停止
mariadb.service服务:~]# systemctl stop mariadb.service - 为数据库的新位置创建一个新目录。在本例中,使用了
/mysql/:~]# mkdir -p /mysql - 将数据库文件复制到新位置:
~]# cp -R /var/lib/mysql/* /mysql/ - 更改此位置的所有权,以允许 mysql 用户和组访问。这会设置 SELinux 仍然会观察到的传统 Unix 权限:
~]# chown -R mysql:mysql /mysql - 输入以下命令查看新目录的初始上下文:
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql这个新创建的目录的上下文usr_t目前不适用于 SELinux 作为 MariaDB 数据库文件的位置。上下文更改后,MariaDB 将能够在此领域正常工作。 - 使用文本编辑器打开主 MariaDB 配置文件
/etc/my.cnf,并修改datadir选项,使其引用新位置。在本例中,应输入的值为/mysql:[mysqld] datadir=/mysql保存此文件并退出。 - 启动
mariadb.service。该服务应该无法启动,拒绝信息将记录到/var/log/messages文件中:~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.但是,如果审计守护进程与setroubleshoot服务一同运行,则拒绝将记录到/var/log/audit/audit.log文件中:SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71此拒绝的原因是/mysql/没有针对 MariaDB 数据文件正确标记。SELinux 正在阻止 MariaDB 访问标记为usr_t的内容。执行以下步骤解决这个问题: - 输入以下命令为
/mysql/添加上下文映射。请注意,默认情况下不安装semanage工具。如果您的系统中没有它,请安装 policycoreutils-python 软件包。~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?" - 这个映射被写入
/etc/selinux/targeted/contexts/files/file_contexts.local文件:~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0 - 现在,使用
restorecon实用程序将此上下文映射到正在运行的系统:~]# restorecon -R -v /mysql - 现在,
/mysql/位置已使用 MariaDB 的正确上下文进行标记,mysqld启动:~]# systemctl start mariadb.service - 确认
/mysql/的上下文已更改:~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql - 该位置已更改并标记,
mysqld已成功启动。此时,应测试所有正在运行的服务,以确认正常运行。