Skip to content

SELinux - Seguridad Mejorada en Linux

Volver a Página Principal

Suscribete!!


Una guía profesional y amigable para comprender como funciona SELinux y como lo podemos utilizar!

Imagen de SELinux

SELinux (Security-Enhanced Linux) es un módulo de seguridad para el kernel de Linux que proporciona una política de control de acceso obligatorio (MAC por sus siglas en inglés, Mandatory Access Control). A diferencia del control de acceso discrecional (DAC) tradicional de Linux (los permisos de rwx de los usuarios), que se basa en la identidad del usuario, SELinux implementa políticas de seguridad predefinidas por el administrador.

Esto significa que, incluso si un proceso se ejecuta como root o tiene permisos elevados, SELinux puede restringir lo que ese proceso puede hacer, protegiendo el sistema contra ataques y vulnerabilidades de día cero. Es una capa de seguridad adicional y proactiva.

Imagen de SELinux

Imagen de Funcionamiento SELinux

El desarrollo de SELinux comenzó en la Agencia de Seguridad Nacional (NSA) de los Estados Unidos. Se diseñó como un prototipo para mejorar la seguridad en sistemas operativos. En el año 2000, el código fuente fue liberado y se fusionó con el kernel de Linux en la versión 2.6, en 2003. Desde entonces, ha sido un componente integral en distribuciones como Fedora, RHEL y CentOS, convirtiéndose en un estándar de seguridad en el entorno empresarial y de servidores.

RedHat

John Gruber

Fedora

SELinux es una herramienta fundamental para proteger el sistema operativo contra actividades maliciosas. Su principal objetivo es:

  • Contención de procesos: Limita lo que un proceso puede hacer incluso si ha sido comprometido. Si un atacante logra explotar una vulnerabilidad en un servicio web, SELinux puede impedir que ese servicio acceda a archivos de sistema, cambie configuraciones o ejecute comandos.
  • Aislamiento de servicios: Cada servicio (como Apache, Nginx o MySQL) se ejecuta con un contexto de seguridad específico que le otorga solo los permisos necesarios para su funcionamiento, evitando que una brecha en un servicio se propague al resto del sistema.
  • Prevención de la escalada de privilegios: Reduce el riesgo de que un atacante obtenga el control total del sistema.

SELinux opera en diferentes modos:

  • Enforcing: El modo por defecto. SELinux aplica y deniega todas las políticas de seguridad. Si una acción no está permitida, se bloquea y se registra un error.
  • Permissive: El modo ideal para depurar. SELinux no bloquea las acciones, pero registra un aviso (AVC denial) para indicar qué acciones habrían sido bloqueadas en modo enforcing.
  • Disabled: SELinux está completamente desactivado. Esto no se recomienda, ya que el sistema pierde una capa de seguridad crucial.

Para verificar el estado de SELinux, puedes usar el comando:

Terminal window
sestatus

Para cambiar el modo temporalmente (hasta el siguiente reinicio), utiliza:

Terminal window
sudo setenforce 0 # Cambia a modo permisivo
sudo setenforce 1 # Cambia a modo enforcing

Para hacer el cambio permanente, edita el archivo de configuración:

Terminal window
sudo nano /etc/selinux/config

Y modifica la línea SELINUX= a enforcing, permissive o disabled.

  • Diagnosticar problemas: Si una aplicación no funciona correctamente, sospecha de SELinux. El primer paso es revisar el registro de auditoría (audit.log) y los mensajes del sistema.
    Terminal window
    sudo tail -f /var/log/audit/audit.log | grep avc:
    También puedes usar la herramienta de diagnóstico ausearch para buscar denegaciones recientes:
    Terminal window
    sudo ausearch -m AVC -ts recent
  • Crear reglas de forma simple: Para generar una política que solucione una denegación, puedes usar el comando audit2allow.
    Terminal window
    sudo ausearch -c 'nombre-del-proceso' --raw | sudo audit2allow -M nombre-de-la-politica
    sudo semodule -i nombre-de-la-politica.pp
  • Restaurar el contexto de seguridad: Si mueves archivos a una ubicación diferente, es posible que el contexto de SELinux se pierda. Usa restorecon para arreglarlo.
    Terminal window
    sudo restorecon -R /ruta/a/los/archivos
  • Ver el contexto de seguridad: El comando ls con la opción -Z te muestra el contexto de seguridad de archivos y directorios.
    Terminal window
    ls -Z /var/www/html
  • Modificar contextos de seguridad: Para que un archivo o directorio mantenga un contexto específico, usa semanage.
    Terminal window
    sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
    sudo restorecon -Rv /var/www/html
  • Crear módulos de políticas personalizados: La forma correcta de manejar las excepciones de SELinux es creando tus propios módulos de política (.te, .fc, .pp), en lugar de deshabilitarlo. Esto asegura que solo se otorgan los permisos necesarios.