MySQL 8.0 参考手册  / 第 6 章 安全  / 6.7 SELinux  /  6.6.4 SELinux 文件上下文

6.6.4 SELinux 文件上下文

MySQL 服务器读取和写入许多文件。如果没有为这些文件正确设置 SELinux 上下文,则可能会拒绝访问这些文件。

下面的说明使用semanage 二进制文件来管理文件上下文;在 RHEL 上,它是 policycoreutils-python-utils包的一部分:

yum install -y policycoreutils-python-utils

安装二进制文件后,您可以使用选项semanage列出 MySQL 文件上下文。 semanagefcontext

semanage fcontext -l | grep -i mysql

设置 MySQL 数据目录上下文

默认数据目录位置是 /var/lib/mysql/;并且使用的 SELinux 上下文是mysqld_db_t.

如果您编辑配置文件以将不同的位置用于数据目录,或用于通常位于数据目录中的任何文件(例如二进制日志),您可能需要为新位置设置上下文。例如:

semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?"
restorecon -Rv /path/to/my/custom/datadir

semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?"
restorecon -Rv /path/to/my/custom/logdir

设置 MySQL 错误日志文件上下文

RedHat RPM 的默认位置是 /var/log/mysqld.log;并且使用的 SELinux 上下文类型是mysqld_log_t.

如果您编辑配置文件以使用不同的位置,您可能需要为新位置设置上下文。例如:

semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log"
restorecon -Rv /path/to/my/custom/error.log

设置 PID 文件上下文

PID 文件的默认位置是 /var/run/mysqld/mysqld.pid;并且使用的 SELinux 上下文类型是mysqld_var_run_t.

如果您编辑配置文件以使用不同的位置,您可能需要为新位置设置上下文。例如:

semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?"
restorecon -Rv /path/to/my/custom/pidfile/directory

设置 Unix 域套接字上下文

Unix 域套接字的默认位置是 /var/lib/mysql/mysql.sock;并且使用的 SELinux 上下文类型是mysqld_var_run_t.

如果您编辑配置文件以使用不同的位置,您可能需要为新位置设置上下文。例如:

semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql\.sock"
restorecon -Rv /path/to/my/custom/mysql.sock

设置 secure_file_priv 目录上下文

对于 5.6.34、5.7.16 和 8.0.11 之后的 MySQL 版本。

安装 MySQL Server RPM 会创建一个 /var/lib/mysql-files/目录,但不会为其设置 SELinux 上下文。该 /var/lib/mysql-files/目录旨在用于诸如SELECT ... INTO OUTFILE.

如果您通过设置启用了此目录 secure_file_priv,您可能需要像这样设置上下文:

semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?"
restorecon -Rv /var/lib/mysql-files

如果您使用不同的位置,请编辑此路径。出于安全目的,此目录永远不应位于数据目录中。

有关此变量的更多信息,请参阅 secure_file_priv文档。