GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo enumerar y configurar el contexto de SELinux para el servidor MySQL

¿Qué es el contexto de SELinux?

Cuando se aplica SELinux en el sistema, verifica las reglas sobre qué proceso puede acceder a qué archivos, directorios y puertos. Cada archivo, proceso, directorio y puerto tiene una etiqueta de seguridad especial conocida como contexto SELinux, que es un nombre que se usa para determinar si un proceso puede acceder a un archivo, directorio o puerto. De forma predeterminada, la política no permite ninguna interacción a menos que una regla explícita otorgue acceso.

Las etiquetas de SELinux tienen diferentes contextos:usuario, rol, tipo y sensibilidad. La mayoría de los comandos de Linux tienen la opción -Z para mostrar contextos de SELinux. Por ejemplo, ps, ls, cp y mkdir usan la opción -Z para mostrar o establecer contextos SELinux de un archivo, directorio, proceso o puerto.

El servidor MySQL lee y escribe en varios archivos si el contexto de SELinux no está configurado correctamente en estos archivos, es posible que el proceso mysqld no pueda acceder a los archivos. En algunos casos, esto puede evitar que mysqld registre errores.

Cómo enumerar los contextos MySQL actuales

Puede listar los contextos actuales usando:

# semanage fcontext -l | grep -i mysql

Cómo configurar el contexto del directorio de datos

La ubicación predeterminada para el directorio de datos es /var/lib/mysql/ , el contexto de SELinux utilizado es mysqld_db_t . Si edita el archivo de configuración para usar una ubicación diferente para el directorio de datos, o cualquiera de los archivos que normalmente se encuentran en el directorio de datos (por ejemplo, los registros binarios), es posible que deba establecer el contexto para la nueva ubicación usando

# 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

Cómo configurar el contexto del archivo de registro de errores

La ubicación predeterminada para los RPM de RedHat es /var/log/mysqld.log , el contexto de SELinux utilizado es mysqld_log_t . Si edita el archivo de configuración para usar una ubicación diferente, es posible que deba establecer el contexto para la nueva ubicación usando:

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

Cómo configurar el contexto del archivo PID

La ubicación predeterminada para el archivo PID es /var/run/mysqld/mysqld.pid , el contexto de SELinux utilizado es mysqld_var_run_t . Si edita el archivo de configuración para usar una ubicación diferente, es posible que deba establecer el contexto para la nueva ubicación usando:

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

Cómo establecer el contexto de socket de dominio Unix

La ubicación predeterminada para el socket de dominio Unix es /var/lib/mysql/mysql.sock , el contexto de SELinux utilizado es mysqld_var_run_t . Si edita el archivo de configuración para usar una ubicación diferente, es posible que deba establecer el contexto para la nueva ubicación usando:

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

Cómo configurar el contexto del puerto TCP

El puerto TCP predeterminado es 3306 , el contexto de SELinux utilizado es mysqld_port_t . Si edita el archivo de configuración para usar un puerto TCP diferente, o habilita la replicación de grupo que usa un puerto adicional (generalmente el puerto 13306), es posible que deba establecer el contexto para el nuevo puerto usando:

# semanage port -a -t mysqld_port_t -p tcp 13306
# restorecon

Cómo configurar el contexto del directorio secure_file_priv

Para versiones de MySQL desde 5.5.53, 5.6.34 y 5.7.16. La instalación del RPM del servidor crea un directorio /var/lib/mysql-files/, pero no establece el contexto de SELinux en este directorio. Este directorio está destinado a ser utilizado para operaciones como 'SELECCIONAR... EN OUTFILE '. Si habilita el uso de este directorio configurando secure_file_priv, es posible que deba configurar el contexto usando:

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

Si establece esto en una nueva ubicación, deberá editar la ruta. Para obtener más información sobre esta variable, consulte https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Por seguridad, este directorio nunca debe estar dentro del directorio de datos.

Herramientas necesarias

El binario semanage es parte del paquete policycoreutils-python:

# yum install policycoreutils-python

Para usar semanage con versiones anteriores de RHEL 6 con python 2.6, es posible que deba instalar un backport del módulo de colección de python OrderedDict usando python-pip del repositorio de EPEL.

Instale el repositorio EPEL:

# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm

Instalar python-pip:

# yum install python-pip

Si la instalación de python-pip devuelve este error:

Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

es posible que deba actualizar sus certificados SSL CA usando:

# yum --disablerepo=epel -y update ca-certificates


Cent OS
  1. ¿Cómo restablecer la contraseña raíz de MySQL para un servidor simple, un servidor cPanel y un servidor Plesk?

  2. Cómo configurar un servidor LAMP de Ubuntu/Debian

  3. ¿Cómo instalar y configurar NTP para la sincronización de tiempo en CentOS?

  4. Cómo configurar bloques de servidor Nginx en Ubuntu y CentOS

  5. ¿Qué son los modos SELinux y cómo configurarlos?

Cómo instalar MySQL 8 en CentOS 8

Cómo configurar el servidor y el cliente NTP en Debian 11

Cómo instalar y configurar un servidor OpenVPN en Ubuntu 22.04

Cómo instalar y configurar Gitlab CE Server en Centos 8

Cómo configurar el servidor DHCP en CentOS 8

Cómo configurar el servidor y el cliente NFS en CentOS 8