6.5.4 SELinux 文件上下文
MySQL 服务器从许多文件读取和写入。如果未为这些文件正确设置 SELinux 上下文,则可能会拒绝访问这些文件。
随后的指令使用semanage
二进制文件来 Management 文件上下文;在 RHEL 上,它是policycoreutils-python-utils
软件包的一部分:
yum install -y policycoreutils-python-utils
安装semanage
二进制文件后,您可以使用带有fcontext
选项的semanage
列出 MySQL 文件上下文。
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文档。