MySQL 服务器从许多文件中读取和写入。如果 SELinux 上下文没有正确地设置为这些文件,可能会被拒绝访问这些文件。
以下说明使用 semanage
二进制文件来管理文件上下文;在 RHEL 中,它是 policycoreutils-python-utils
软件包的一部分:
yum install -y policycoreutils-python-utils
安装 semanage
二进制文件后,可以使用 semanage
和 fcontext
选项来列出 MySQL 文件上下文。
semanage fcontext -l | grep -i 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
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 文件位置是 /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 域套接字位置是 /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
适用于 MySQL 5.6.34、5.7.16 和 8.0.11 及更高版本。
安装 MySQL 服务器 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
文档。