Iniciación con SELinux
1. Introducción a SELinux
- SELinux (Security-Enhanced Linux): Módulo de seguridad para controlar el acceso a recursos en un sistema Linux. Proporciona un mecanismo de control de acceso obligatorio (MAC).
- Objetivo: Proteger el sistema y las aplicaciones contra accesos no autorizados, asegurando que los procesos y usuarios solo realicen las acciones para las que están autorizados.
Conceptos Clave
- Políticas: Conjuntos de reglas que determinan cómo se deben gestionar los accesos a los recursos del sistema. SELinux utiliza políticas predeterminadas, pero se pueden crear personalizadas.
- Tipos: Categorías de objetos y procesos (ej:
httpd_sys_content_t
,var_lib_t
). - Usuarios: Representan las entidades que interactúan con el sistema (ej:
system_u
para el sistema,user_u
para usuarios normales).
[!CAUTION] No es recomendable activar selinux en modo “Enforcing” en producción. Primero prueba en modo “Permissive”. —
2. Modos de Operación
SELinux tiene tres modos de operación:
- Enforcing: Aplica políticas y bloquea accesos no permitidos. Este es el modo recomendado para entornos de producción.
- Permissive: Solo registra violaciones sin bloquear accesos, útil para depuración.
- Disabled: SELinux desactivado, no se aplican políticas.
Comandos Útiles
# Verificar estado de SELinux
sestatus
# Cambiar a modo permisivo
sudo setenforce 0
# Cambiar a modo enforcing
sudo setenforce 1
3. Contextos de Seguridad
Los contextos de seguridad en SELinux son una combinación de cuatro partes:
- Usuario: Representa el usuario de SELinux (ej:
system_u
). - Rol: Rol de seguridad del proceso (generalmente
object_r
para objetos). - Tipo: Tipo de acceso (ej:
httpd_sys_content_t
). - Nivel: (opcional) Niveles de seguridad para control de acceso multinivel.
Visualización de Contextos
# Listar contextos de archivos
ls -Z /ruta/al/directorio
# Listar contextos de procesos
ps -Z
Cambiar Contextos
# Cambiar contexto de un archivo
chcon -t httpd_sys_content_t /ruta/al/archivo
# Persistir cambios de contexto
semanage fcontext -a -t httpd_sys_content_t "/ruta(/.*)?"
restorecon -Rv /ruta
Ejemplo
# Cambiar el contexto de un archivo en el directorio de Apache
chcon -t httpd_sys_content_t /var/www/html/archivo.html
4. Auditoría en SELinux
SELinux registra eventos y violaciones de políticas en logs ubicados en /var/log/audit/audit.log
. La auditoría es esencial para comprender por qué se producen ciertas denegaciones.
Comandos Útiles
# Buscar eventos de denegación
ausearch -m avc
# Explicar la razón de la denegación
ausearch -m avc -ts today | audit2why
# Generar una política a partir de eventos de denegación
ausearch -m avc -ts today | audit2allow -M mi_modulo
Ejemplo
# Buscar y explicar por qué Apache no puede acceder a un archivo
ausearch -m avc -ts today | audit2why
5. Booleanos en SELinux
Los booleanos son configuraciones que permiten ajustar el comportamiento de las políticas en SELinux.
Ejemplo de Booleano
Habilitar el acceso de Apache a contenido en el directorio de usuarios:
# Listar booleanos disponibles
getsebool -a
# Activar un booleano específico
setsebool -P httpd_enable_homedirs on
Importante
- Usar la opción
-P
para hacer cambios persistentes a través de reinicios.
6. Creación de Políticas Personalizadas
Crear políticas personalizadas permite ajustar SELinux a las necesidades específicas de tu entorno.
Estructura de un Archivo de Política
module mi_aplicacion 1.0;
require {
type var_lib_t;
class dir { read write search open };
}
# Permitir acceso a directorios
allow unconfined_t var_lib_t:dir { read write search open };
Pasos para Crear una Política
- Escribir la política en un archivo
.te
:nano mi_aplicacion.te
- Compilar el archivo:
checkmodule -M -m -o mi_aplicacion.mod mi_aplicacion.te semodule_package -o mi_aplicacion.pp -m mi_aplicacion.mod
- Instalar la política:
sudo semodule -i mi_aplicacion.pp
- Verificar instalación:
semodule -l | grep mi_aplicacion
7. Diagnóstico de Problemas
Es fundamental para resolver problemas de acceso en sistemas SELinux.
Verificar Políticas Cargadas
Para ver las políticas activas y su impacto:
semodule -l
Eliminar Políticas Problemáticas
# Eliminar un módulo de política
sudo semodule -r nombre_del_modulo
Conclusión
SELinux es una herramienta poderosa para la seguridad en sistemas Linux, proporcionando control de acceso granular a recursos del sistema. Comprender sus componentes y comandos básicos te permitirá gestionar y proteger mejor tus sistemas.