CodeGym /Cursos /Docker SELF /Introducción a SELinux: verificación del estado, activaci...

Introducción a SELinux: verificación del estado, activación, comandos básicos

Docker SELF
Nivel 5 , Lección 2
Disponible

Introducción a SELinux: verificación del estado, activación, comandos básicos

1. ¿Qué es SELinux y para qué sirve?

SELinux (Security-Enhanced Linux) es un módulo de seguridad que refuerza el modelo tradicional de gestión de permisos de acceso, añadiendo el concepto de control obligatorio. Permite al administrador configurar restricciones más estrictas para usuarios e incluso procesos, para minimizar el daño potencial de posibles ataques.

¿En qué es único?

Imagínate que tu sistema es una casa. Los permisos tradicionales de acceso (rwx para el usuario, grupo y otros) son como las llaves de las cerraduras de las puertas. Pero, ¿y si alguien fuerza la puerta? SELinux se convierte en la segunda línea de defensa, reforzando la protección con reglas de comportamiento: "¡Hey, aunque estés dentro, no puedes entrar al baño!"

Tareas principales de SELinux:

  1. Protección contra accesos no autorizados para procesos y archivos.
  2. Reducción del daño por ataques, incluso si un proceso ha sido vulnerado.
  3. Principios de "protección por defecto" (todo está prohibido salvo que se permita).

Modos de operación de SELinux

SELinux puede operar en tres modos:

  1. Enforcing — activo, aplica políticas de seguridad y bloquea procesos que las violan.
  2. Permissive — solo registra las violaciones en los logs, pero no bloquea acciones.
  3. Disabled — completamente desactivado
Dato curioso:

SELinux en modo enforcing es como un hermano mayor estricto para tu sistema. Permissive es como el hermano menor que solo se queja pero no hace nada.


2. Comprobación del estado de SELinux

Para empezar, veamos si SELinux está activo y en qué modo está funcionando. Para ello, hay varios comandos prácticos disponibles.

Comando getenforce

Este comando simplemente te dirá qué modo se está utilizando actualmente: Enforcing, Permissive o Disabled.

$ getenforce
Enforcing

Si el resultado es Disabled, entonces SELinux está desactivado, lo que significa que tendrás que trabajar un poco para activarlo, pero hablaremos de esto más adelante.

Comando sestatus

Un reporte más completo sobre el estado de SELinux se puede obtener con este comando. Mostrará el estado actual, el modo activo y la política en uso.

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing

Aquí puedes ver:

  • enabled/disabled — si SELinux está activado.
  • current mode — el modo activo (enforcing, permissive).
  • loaded policy name — qué política está cargada. Por ejemplo, "targeted" significa que SELinux aplica control solo a procesos clave.

3. Cambiar los modos de SELinux

Para cambiar el modo actual de funcionamiento de SELinux, se utiliza el comando setenforce.

Cambiar a modo permissive

Si quieres "aflojar la correa" de SELinux temporalmente, puedes activar el modo permissive.

$ sudo setenforce 0

Ahora SELinux solo registrará las violaciones, pero no las bloqueará. Puedes comprobar la nueva configuración usando el comando getenforce:

$ getenforce
Permissive

Cambiar de vuelta al modo enforcing

Cuando quieras volver a habilitar el control estricto, ejecuta:

$ sudo setenforce 1

Y, por supuesto, verifica el resultado:

$ getenforce
Enforcing

Este cambio se aplica al vuelo, pero solo hasta el próximo reinicio del sistema.


4. Habilitar SELinux

Si SELinux ha sido deshabilitado, necesitas hacer cambios en el archivo de configuración. SELinux se maneja a través del archivo /etc/selinux/config.

Verificar el archivo de configuración actual

Echemos un vistazo a lo que está configurado ahí. Usa cualquier editor de texto, por ejemplo nano:

$ sudo nano /etc/selinux/config

Verás algo como esto:

# Este archivo controla el estado de SELinux en el sistema.
SELINUX=disabled
SELINUXTYPE=targeted

Cambiar SELinux a estado activo

Para habilitar SELinux, cambia la línea SELINUX=disabled a SELINUX=enforcing o SELINUX=permissive.

Aquí está un ejemplo del archivo después de los cambios:

# Este archivo controla el estado de SELinux en el sistema.
SELINUX=enforcing
SELINUXTYPE=targeted

Después de editar, guarda el archivo y reinicia el sistema:

$ sudo reboot

Después de reiniciar, puedes verificar el estado usando sestatus para asegurarte de que SELinux está activo.


5. Análisis de contextos de SELinux

¿Qué son los contextos?

Los contextos son etiquetas que SELinux utiliza para gestionar el acceso. Cada archivo, proceso y usuario tiene su propio contexto.

Puedes ver los contextos de los archivos usando el comando ls -Z. Aquí tienes un ejemplo:

$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

¿Qué significa esto?

  1. unconfinedu — usuario de SELinux.
  2. objectr — tipo de objeto.
  3. httpdsyscontent_t — tipo de acceso (en este caso relacionado con el servidor web).
  4. s0 — nivel de seguridad.

Cambiar el contexto

Si SELinux bloquea el funcionamiento de tu aplicación, puede que necesites cambiar el contexto del archivo. Usa el comando chcon:

$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html

Este comando cambia temporalmente el tipo de contexto del archivo. Sin embargo, después de reiniciar el cambio puede desaparecer, por lo que para configuraciones permanentes es mejor modificar la política de SELinux (hablaremos de eso más adelante).


6. Ejemplo de cómo trabajar con SELinux

Vamos a analizar un ejemplo. Eres administrador de un servidor que quiere configurar un servidor web, pero SELinux bloquea el acceso a los archivos en el directorio /var/www/html.

Pasos:

  1. Verifica el estado de SELinux:

    $ sestatus
    

    Asegúrate de que SELinux está activado y funcionando en el modo enforcing.

  2. Revisa los contextos de los archivos:

    $ ls -Z /var/www/html
    
  3. Si el contexto es incorrecto, cámbialo:

    $ sudo chcon -t httpd_sys_content_t /var/www/html/*
    
  4. Verifica el funcionamiento del servidor web.


7. Errores y problemas típicos

  1. SELinux está desactivado y ni te das cuenta. Asegúrate siempre de verificar el estado con sestatus. Muchos admins olvidan activar SELinux después de instalar el sistema.

  2. "¿Por qué mi servicio no funciona?" SELinux está bloqueando el acceso. Usa audit.log para analizarlo:

    $ sudo cat /var/log/audit/audit.log | grep denied
    
  3. Los cambios de contexto no se guardan. No uses chcon, mejor usa comandos para cambios permanentes como semanage.

Aprender SELinux es como prepararse para un maratón: al principio puede ser difícil, pero con el tiempo entenderás cómo esta herramienta puede aumentar significativamente la seguridad del sistema. Usa este conocimiento para ser ese admin que no será derrotado ni por el hacker más avanzado.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION