Teemo
por Teemo
3 minuto(s) de lectura

Categorías

Etiquetas

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

  1. Escribir la política en un archivo .te:
    nano mi_aplicacion.te
    
  2. Compilar el archivo:
    checkmodule -M -m -o mi_aplicacion.mod mi_aplicacion.te
    semodule_package -o mi_aplicacion.pp -m mi_aplicacion.mod
    
  3. Instalar la política:
    sudo semodule -i mi_aplicacion.pp
    
  4. 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.


Recursos Adicionales