Como configurar selinux
www.onlinetis.com
SELinux (Security-Enhanced Linux) es un módulo de seguridad para el kernel de Linux que implementa un sistema de control de acceso obligatorio (MAC). A diferencia del control de acceso discrecional (DAC) tradicional de Linux (los permisos de usuario, grupo y otros), SELinux obliga a que los procesos y archivos tengan una etiqueta o contexto de seguridad definido por una política. Si una acción no está explícitamente permitida por esta política, es denegada por defecto.
Características clave de SELinux
Etiquetado (Labeling): Todos los objetos del sistema (archivos, procesos, puertos, etc.) reciben una etiqueta de seguridad. Esta etiqueta determina su tipo, rol y dominio.
Políticas: Las reglas de la política de SELinux definen cómo los procesos (sujetos) interactúan con los objetos (archivos, puertos, etc.). Estas políticas son establecidas por el administrador y no pueden ser modificadas por los usuarios o procesos, lo que previene la escalada de privilegios.
Separación de privilegios: SELinux confina los procesos en "dominios" con un conjunto de permisos mínimo para funcionar correctamente. Si un proceso es comprometido, un atacante solo tendrá acceso a los recursos y archivos a los que ese proceso tiene permitido acceder. Por ejemplo, un atacante no podría usar un servidor web comprometido para leer archivos de un directorio de usuario si la política no lo permite.
Modos de funcionamiento:
Enforcing: El modo por defecto. SELinux aplica la política y deniega todos los accesos no autorizados.
Permissive: SELinux no deniega las acciones, pero las registra en un log (registro). Este modo es útil para depurar políticas.
Disabled: SELinux está completamente desactivado.
SELinux vs. AppArmor
Aunque ambos, SELinux y AppArmor, son marcos de control de acceso obligatorio, tienen enfoques diferentes.
SELinux: Es un sistema basado en etiquetas y es muy granular, lo que lo hace muy potente para entornos de alta seguridad. Su configuración puede ser más compleja y requiere un mayor conocimiento. Es el sistema de seguridad por defecto en distribuciones como Red Hat Enterprise Linux y CentOS.
AppArmor: Es un sistema basado en rutas de archivo. Es más fácil de usar y configurar, ya que sus perfiles de seguridad están asociados directamente con las aplicaciones. Es el sistema por defecto en distribuciones como Ubuntu y Debian.
Configurar SELinux puede ser un proceso complejo debido a su granularidad. Aquí tienes una guía paso a paso para los escenarios más comunes:
1. Comprobar el estado actual de SELinux
Antes de hacer cualquier cambio, es crucial saber en qué modo se encuentra SELinux.
sestatus
: Este es el comando más completo. Muestra si SELinux está habilitado, en qué modo (enforcing, permissive o disabled) y qué política está usando.getenforce
: Es un comando más simple que solo devuelve el modo actual (Enforcing
,Permissive
oDisabled
).
2. Cambiar el modo de SELinux
SELinux tiene dos tipos de cambios de modo: temporal y permanente.
Cambio Temporal (hasta el próximo reinicio)
sudo setenforce 0
: Pone SELinux en modo Permissive. Esto significa que las violaciones de la política se registrarán en los logs, pero no se bloquearán. Es útil para depurar y ver qué está causando problemas sin interrumpir los servicios.sudo setenforce 1
: Pone SELinux en modo Enforcing. Todas las violaciones de la política se bloquearán.
Cambio Permanente
El modo permanente se configura en el archivo de configuración principal de SELinux.
Abre el archivo de configuración:
sudo nano /etc/selinux/config (o tu editor de texto preferido como vim)
Encuentra la línea que empieza con
SELINUX=
.Cambia el valor a tu modo deseado:
SELINUX=enforcing
(Recomendado para producción)SELINUX=permissive
(Útil para depuración)SELINUX=disabled
(Desactiva SELinux por completo. No recomendado)
Guarda el archivo y reinicia el sistema para que los cambios surtan efecto.
sudo reboot
3. Gestionar contextos de archivos (etiquetas)
Las etiquetas de los archivos son una parte fundamental de SELinux. Si mueves o creas un archivo en una ubicación no estándar, es posible que no tenga el contexto correcto, lo que podría causar que un servicio falle.
Ver el contexto de un archivo:
ls -Z /ruta/del/archivo
Esto te mostrará la etiqueta de seguridad, por ejemplo: system_u:object_r:httpd_sys_content_t:s0.
Cambiar el contexto de un archivo temporalmente:
sudo chcon -t httpd_sys_content_t /var/www/html/mi-archivo.html
Este comando cambia el tipo de contexto (-t) del archivo. Los cambios con chcon no persisten después de un reetiquetado o un reinicio del sistema.
Restaurar el contexto por defecto:
sudo restorecon -v /var/www/html/
Este comando es muy útil. Lee las políticas de SELinux para determinar cuál debería ser el contexto predeterminado para un archivo o directorio en particular y lo restaura.
Cambiar el contexto de forma permanente:
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?"
Este comando añade una regla a la política de SELinux que indica que cualquier archivo en /srv/web y sus subdirectorios debe tener el contexto httpd_sys_content_t. Después de añadir la regla, debes aplicar el cambio:
sudo restorecon -R -v /srv/web
4. Usar SELinux Booleans
Los booleanos son interruptores que te permiten activar o desactivar ciertas funcionalidades de la política sin tener que reescribirla. Son una forma segura y sencilla de hacer ajustes.
Listar todos los booleanos:
getsebool -a
Activar un booleano temporalmente:
sudo setsebool httpd_can_network_connect on
Activar un booleano de forma permanente:
sudo setsebool -P httpd_can_network_connect on
El flag -P hace que el cambio persista después de un reinicio.
5. Solucionar problemas con SELinux
Cuando SELinux está en modo
enforcing
y algo falla, es casi seguro que SELinux ha bloqueado una acción.Revisar los logs de SELinux:
sudo cat /var/log/audit/audit.log | grep AVC
Las entradas de log con AVC son las que te dirán qué ha sido denegado.
Usar la herramienta sealert:
sealert -a /var/log/audit/audit.log
Esta herramienta es un analizador de logs que te proporciona descripciones detalladas de las denegaciones y, lo que es más importante, te sugiere comandos para resolver el problema (por ejemplo, cómo crear una política que permita la acción). Si no está instalado, puedes instalarlo con sudo dnf install setroubleshoot-server o sudo yum install setroubleshoot-server.