Linux mejorado de seguridad (SELinux) es un módulo del núcleo Linux que proporciona un marco para configurar el sistema de control de acceso obligatorio (MAC) para muchos recursos del sistema. Está habilitado por defecto en algunas distribuciones de Linux, incluyendo RHEL, CentOS, Fedora y otras distribuciones similares de Linux. SELinux evita que los programas accedan a archivos, directorios o puertos a menos que esté configurado para acceder a esos recursos.
- Verificando Si SELinux Está Habilitado
- Poner temporalmente mysqld En Modo Permisivo
- Crear y cargar la Política de SELinux del servidor
- Configuración de contextos de archivo
- Establecer el contexto de archivo para el Directorio de datos
- Establecer el contexto de archivo para los Archivos de registro
- Establecer el contexto de archivo para los Archivos de opciones
- Que permite el acceso al Contexto del archivo Tmpfs
- Solución de problemas de SELinux
- Errores de permisos del sistema de archivos
- SELinux y MariaDB En un puerto diferente
- Generando políticas de SELinux con audit2allow
Verificando Si SELinux Está Habilitado
Para verificar si SELinux está habilitado, ejecute el comando getenforce
. Por ejemplo:
getenforce
Poner temporalmente mysqld En Modo Permisivo
Cuando está resolviendo problemas que cree que SELinux podría estar causando, puede ayudar poner temporalmentemysqld_t
en modo permisivo. Esto se puede hacer ejecutando el comando semanage
. Por ejemplo:
sudo semanage permissive -a mysqld_t
Si eso resolvió el problema, entonces significa que la política actual de SELinux es la culpable. Necesita ajustar la política o etiquetas de SELinux para MariaDB.
Crear y cargar la Política de SELinux del servidor
El servidor MariaDB viene con una política de SELinux que no se compila ni se carga de forma predeterminada. En muchos sistemas, la directiva se instala en /usr/share/mysql/policy/selinux/mariadb-server.fc
. Para compilarlo y cargarlo, ejecute lo siguiente:
Configuración de contextos de archivo
SELinux utiliza contextos de archivo como una forma de determinar quién debería poder acceder a ese archivo.Los contextos de archivo
se administran con los comandos semanage fcontext
y restorecon
.
En muchos sistemas, la utilidad semanage
se instala mediante el paquete policycoreutils-python
, y la utilidad restorecon
se instala mediante el paquete policycoreutils
. Puede instalar con el siguiente comando:
sudo yum install policycoreutils policycoreutils-python
Un archivo o de un directorio en el contexto actual se puede comprobar mediante la ejecución de ls
--context
o --scontext
opciones.
Establecer el contexto de archivo para el Directorio de datos
Si utiliza un directorio personalizado para datadir
, es posible que deba establecer el contexto de archivo para ese directorio. El contexto del archivo SELinux para los archivos de datos MariaDB es mysqld_db_t
. Puede determinar si este contexto de archivo está presente en su sistema y a qué archivos o directorios está asociado ejecutando el siguiente comando:
sudo semanage fcontext --list | grep mysqld_db_t
Si desea establecer el contexto de archivo para su directorio personalizado para su datadir
, puede hacerlo ejecutando los comandos semanage fcontext
y restorecon
. Por ejemplo:
sudo semanage fcontext -a -t mysqld_db_t "/mariadb/data(/.*)?"sudo restorecon -Rv /mariadb/data
Si usted desea comprobar el archivo actual contexto, puede hacerlo mediante la ejecución de ls
--context
o --scontext
opciones. Por ejemplo:
ls --directory --scontext /mariadb/data
Establecer el contexto de archivo para los Archivos de registro
Si utiliza un directorio personalizado para los archivos de registro, es posible que deba establecer el contexto de archivo para ese directorio. El contexto del archivo SELinux para los archivos de registro de MariaDB es mysqld_log_t
. Puede determinar si este contexto de archivo está presente en su sistema y a qué archivos o directorios está asociado ejecutando el siguiente comando:
sudo semanage fcontext --list | grep mysqld_log_t
Si desea establecer el contexto de archivo para su directorio personalizado para archivos de registro, puede hacerlo ejecutando los comandos semanage fcontext
y restorecon
. Por ejemplo:
sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"sudo restorecon -Rv /var/log/mysql
Si usted desea comprobar el archivo actual contexto, puede hacerlo mediante la ejecución de ls
--context
o --scontext
opciones. Por ejemplo:
ls --directory --scontext /var/log/mysql
Establecer el contexto de archivo para los Archivos de opciones
Si utiliza un directorio personalizado para los archivos de opciones, es posible que deba establecer el contexto de archivo para ese directorio. El contexto del archivo SELinux para los archivos de opciones MariaDB es mysqld_etc_t
. Puede determinar si este contexto de archivo está presente en su sistema y a qué archivos o directorios está asociado ejecutando el siguiente comando:
sudo semanage fcontext --list | grep mysqld_etc_t
Si desea establecer el contexto de archivo para su directorio personalizado para archivos de opciones, puede hacerlo ejecutando los comandos semanage fcontext
y restorecon
. Por ejemplo:
sudo semanage fcontext -a -t mysqld_etc_t "/etc/mariadb(/.*)?"sudo restorecon -Rv /etc/mariadb
Si usted desea comprobar el archivo actual contexto, puede hacerlo mediante la ejecución de ls
--context
o --scontext
opciones. Por ejemplo:
ls --directory --scontext /etc/mariadb
Que permite el acceso al Contexto del archivo Tmpfs
Si desea montar su tmpdir
en un sistema de archivos tmpfs
o si desea utilizar un tmpfs
sistema de archivos en /run/shm
, entonces es posible que deba permitir que mysqld_t
tenga acceso a un par de contextos de archivos relacionados con tmpfs. Por ejemplo:
Solución de problemas de SELinux
Es posible que deba solucionar problemas relacionados con SELinux en casos como:
- MariaDB está utilizando un puerto no predeterminado.
- MariaDB está leyendo o escribiendo en algunos archivos (datadir,archivos de registro, archivos de opciones, etc.) ubicado en rutas no predeterminadas.
- MariaDB está utilizando un complemento que requiere acceso a recursos que las instalaciones predeterminadas no utilizan.
Errores de permisos del sistema de archivos
Si los permisos del sistema de archivos para algún directorio MariaDB se ven bien, pero el registro de errores de MariaDB todavía tiene errores que se ven similares a los siguientes:
A continuación, marque /var/log/audit/audit.log
de SELinux para entradas de registro que se ven similares a los siguientes:
Si ve alguna entrada similar a esta, lo más probable es que necesite ajustar los contextos de archivo para algunos archivos o directorios. Consulte Configuración de contextos de archivo para obtener más información sobre cómo hacerlo.
SELinux y MariaDB En un puerto diferente
Los puertos TCP y UDP también están habilitados para el permiso de enlace. Si está utilizando un puerto diferente, o algunos puertos Galera, configure SELinux para que pueda usar esos puertos:
sudo semanage port -a -t mysqld_port_t -p tcp 3307
Generando políticas de SELinux con audit2allow
En algunos casos, un sistema MariaDB puede necesitar políticas no estándar. Es posible crear estas políticas a partir del registro de auditoría de SELinux utilizando la utilidad audit2allow
. El semanage
y semodule
utilidades también será necesario.
En muchos sistemas, el audit2allow
y semanage
utilidades instaladas por el policycoreutils-python
el paquete, y el semodule
utilidad se instala por el policycoreutils
paquete. Puede instalar con el siguiente comando:
sudo yum install policycoreutils policycoreutils-python
Se puede utilizar el siguiente proceso para generar una política a partir del registro de auditoría:
- Eliminar las auditorías de la política:
sudo semodule -DB
- Poner temporalmente
mysqld_t
en modo permisivo. Por ejemplo:
sudo semanage permissive -a mysqld_t
- Inicio MariaDB.
- Haga lo que esté causando errores en SELinux.
- Utilice el registro de auditoría generado para crear una política:
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_localsudo semodule -i mariadb_local.pp
- Pull
mysqld_t
fuera del modo permisivo. Por ejemplo:
sudo semanage permissive -d mysqld_t
- Restaurar dontaudits para la política:
sudo setmodule -B
El mismo procedimiento puede ser utilizado si MariaDB se inicia, pero SELinux impide funcionar correctamente. Por ejemplo, SELinux puede impedir que el complemento PAM autentique a los usuarios. La solución es la misma: habilitar auditoría, cambiar a permisiva, hacer, lo que SELinux no le permitió, crear una política a partir del registro de auditoría.
Cuando descubra los permisos necesarios de SELinux, informe de los permisos necesarios al seguimiento de errores de su sistema operativo para que todos los usuarios puedan beneficiarse de su trabajo (por ejemplo, Red Hat Bugzilla https://bugzilla.redhat.com/).