### 6.7.4 SELinux 文件上下文

[](<>)

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

以下说明使用`管理`用于管理文件上下文的二进制文件；在 RHEL 上，它是`policycoreutils-python-utils`包裹：

```
yum install -y policycoreutils-python-utils
```

安装后`管理`二进制文件，您可以使用列出 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
```

#### 设置安全\_文件\_priv 目录上下文

[](<>)

对于自 5.6.34、5.7.16 和 8.0.11 起的 MySQL 版本。

安装 MySQL 服务器 RPM 会创建一个`/var/lib/mysql-文件/`目录，但不为其设置 SELinux 上下文。这`/var/lib/mysql-文件/`目录旨在用于诸如`选择...进入文件`.

如果您通过设置启用此目录的使用`secure_file_priv`，您可能需要像这样设置上下文：

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

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

有关此变量的更多信息，请参阅[`secure_file_priv`](server-system-variables.html#sysvar_secure_file_priv)文档。
