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:
- Protección contra accesos no autorizados para procesos y archivos.
- Reducción del daño por ataques, incluso si un proceso ha sido vulnerado.
- 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:
- Enforcing — activo, aplica políticas de seguridad y bloquea procesos que las violan.
- Permissive — solo registra las violaciones en los logs, pero no bloquea acciones.
- Disabled — completamente desactivado
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?
- unconfinedu — usuario de SELinux.
- objectr — tipo de objeto.
- httpdsyscontent_t — tipo de acceso (en este caso relacionado con el servidor web).
- 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:
Verifica el estado de SELinux:
$ sestatus
Asegúrate de que SELinux está activado y funcionando en el modo enforcing.
Revisa los contextos de los archivos:
$ ls -Z /var/www/html
Si el contexto es incorrecto, cámbialo:
$ sudo chcon -t httpd_sys_content_t /var/www/html/*
Verifica el funcionamiento del servidor web.
7. Errores y problemas típicos
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."¿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
Los cambios de contexto no se guardan. No uses
chcon
, mejor usa comandos para cambios permanentes comosemanage
.
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.
GO TO FULL VERSION