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-serversetroubleshoot-server 软件包,auditd 服务正在运行,并且 /var/lib/mysql/ 的默认位置中有一个有效的数据库。
  1. 查看 mysql 的默认数据库位置的 SELinux 上下文:
    ~]# ls -lZ /var/lib/mysql
    drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
    
    这将显示 mysqld_db_t,这是数据库文件位置的默认上下文元素。此上下文必须手动应用到本示例中将使用的新数据库位置,才能正常工作。
  2. 输入以下命令,输入 mysqld root 密码来显示可用的数据库:
    ~]# mysqlshow -u root -p
    Enter password: *******
    +--------------------+
    |     Databases      |
    +--------------------+
    | information_schema |
    | mysql              |
    | test               |
    | wikidb             |
    +--------------------+
    
  3. 停止 mariadb.service 服务:
    ~]# systemctl stop mariadb.service
  4. 为数据库的新位置创建一个新目录。在本例中,使用了 /mysql/
    ~]# mkdir -p /mysql
  5. 将数据库文件复制到新位置:
    ~]# cp -R /var/lib/mysql/* /mysql/
  6. 更改此位置的所有权,以允许 mysql 用户和组访问。这会设置 SELinux 仍然会观察到的传统 Unix 权限:
    ~]# chown -R mysql:mysql /mysql
  7. 输入以下命令查看新目录的初始上下文:
    ~]# ls -lZ /mysql
    drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0   mysql
    
    这个新创建的目录的上下文 usr_t 目前不适用于 SELinux 作为 MariaDB 数据库文件的位置。上下文更改后,MariaDB 将能够在此领域正常工作。
  8. 使用文本编辑器打开主 MariaDB 配置文件 /etc/my.cnf,并修改 datadir 选项,使其引用新位置。在本例中,应输入的值为 /mysql
    [mysqld]
    datadir=/mysql
    
    保存此文件并退出。
  9. 启动 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 的内容。执行以下步骤解决这个问题:
  10. 输入以下命令为 /mysql/ 添加上下文映射。请注意,默认情况下不安装 semanage 工具。如果您的系统中没有它,请安装 policycoreutils-python 软件包。
    ~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
  11. 这个映射被写入 /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
    
  12. 现在,使用 restorecon 实用程序将此上下文映射到正在运行的系统:
    ~]# restorecon -R -v /mysql
  13. 现在,/mysql/ 位置已使用 MariaDB 的正确上下文进行标记,mysqld 启动:
    ~]# systemctl start mariadb.service
  14. 确认 /mysql/ 的上下文已更改:
    ~]$ ls -lZ /mysql
    drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
    
  15. 该位置已更改并标记,mysqld 已成功启动。此时,应测试所有正在运行的服务,以确认正常运行。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.