¿Qué es SELinux? ¿Cómo mejora la seguridad de Linux?

¿Qué es SELinux? ¿Cómo mejora la seguridad de Linux?

Security-Enhanced Linux (SELinux) es un módulo de seguridad que agrega una capa adicional de protección a tu sistema. Impone un control de acceso estricto entre los procesos y los recursos del sistema, y solo permite las acciones autorizadas de forma explícita.

SELinux ayuda a mantener una seguridad sólida y confiable en los servidores Linux al impedir el acceso no autorizado y limitar el impacto de los servicios comprometidos.

Esto lo hace especialmente útil para configuraciones de VPS de nivel de producción o implementaciones a escala empresarial en las que es fundamental aplicar políticas estrictas.

En esta guía, aprenderás qué es SELinux, cómo funciona, cómo configurarlo y cómo usarlo para proteger tu sistema de manera eficaz.

¿Qué es SELinux?

SELinux es un módulo de seguridad integrado en el kernel de Linux que aplica políticas de control de acceso para regular cómo los procesos interactúan con los recursos del sistema.

La Agencia de Seguridad Nacional de Estados Unidos (NSA) desarrolló SELinux y lo lanzó a la comunidad de código abierto en 2000.

Su arquitectura se basa en el marco Linux Security Modules (LSM), que agrega enlaces al kernel para aplicar decisiones de seguridad.

Esta configuración permite que SELinux intercepte y evalúe las solicitudes de acceso a nivel del kernel, para que cada operación cumpla con las políticas de seguridad definidas.

SELinux se usa comúnmente en Red Hat Enterprise Linux (RHEL), CentOS, Fedora y otras distribuciones basadas en RHEL.

Eso se debe a que estos sistemas ofrecen compatibilidad completa con SELinux, lo que facilita su configuración y administración en comparación con Debian y sus derivados, que limitan la compatibilidad con SELinux o no la habilitan de forma predeterminada.

¿Cómo funciona SELinux?

SELinux asigna un contexto de seguridad a cada interacción entre los procesos (sujetos) y los recursos del sistema (objetos). Cada contexto de seguridad incluye detalles como el usuario, el rol, el tipo y, de forma opcional, un nivel de sensibilidad.

Cuando un proceso intenta acceder a un recurso, el motor de políticas de SELinux verifica los contextos de seguridad tanto del sujeto como del objeto según las reglas de la política definidas.

Si la política permite la acción, SELinux concede acceso. Si no, bloquea la acción y, según el modo, registra el evento en el registro de auditoría para revisarlo.

Este mecanismo garantiza que los procesos se ejecuten solo con los privilegios mínimos que necesitan, siguiendo el principio de privilegio mínimo. Mantiene la integridad del sistema y reduce el riesgo de daños causados por aplicaciones comprometidas o que no funcionan correctamente.

¿Qué es el control de acceso obligatorio (MAC) en SELinux?

El control de acceso obligatorio (MAC) es un marco de seguridad que aplica políticas estrictas sobre cómo los sujetos, como las aplicaciones de usuario o los servicios del sistema, interactúan con los objetos, como los archivos, los directorios y los puertos de red en un sistema Linux.

A diferencia del control de acceso discrecional (DAC), en el que tú puedes establecer permisos sobre los archivos que tienes, las políticas de control de acceso obligatorio (MAC) se definen de forma centralizada y el sistema las aplica, lo que significa que ni siquiera las personas con privilegios pueden ignorarlas.

Por ejemplo, con DAC, un administrador del sistema podría conceder por accidente a un proceso del servidor web acceso de lectura y escritura a un archivo de configuración sensible.

Con MAC implementado, la política de SELinux puede impedir explícitamente que ese proceso escriba en archivos del sistema, incluso si los permisos de DAC lo permiten.

En otras palabras, si las reglas de DAC y MAC entran en conflicto, SELinux aplica la regla más restrictiva. Este control estricto es una de las principales razones por las que SELinux ofrece una capa de defensa tan sólida en los entornos Linux.

¿Qué son las políticas de SELinux?

Las políticas de SELinux son conjuntos de reglas de acceso que definen los permisos que se otorgan a los sujetos sobre los objetos. Estas políticas forman el núcleo de la implementación del control de acceso obligatorio de SELinux.

Por ejemplo, una política podría permitir que un proceso con la etiqueta httpd_t lea archivos con la etiqueta httpd_sys_content_t, pero negar el acceso a los que tengan la etiqueta user_home_t.

Los administradores suelen escribir estas políticas en un lenguaje de políticas específico y luego compilarlas en un formato binario que el módulo del kernel de SELinux puede cargar y aplicar.

Usan herramientas como semanage para gestionar componentes de políticas y audit2allow para generar módulos de políticas personalizados a partir de registros de auditoría.

Estas herramientas ayudan a adaptar las políticas de SELinux a los requisitos de seguridad específicos de diferentes entornos, lo que garantiza flexibilidad y una sólida protección del sistema.

¿Cuáles son los diferentes modos de SELinux?

Hay tres modos diferentes de SELinux: enforcing, permissive y disabled. Cada modo determina cómo se aplican las políticas de seguridad en los sistemas Linux.

Modo de aplicación

En el modo de aplicación, SELinux aplica activamente sus políticas de seguridad. Bloquea cualquier acción que infrinja la política y registra un mensaje de denegación correspondiente. Este modo ofrece el nivel más alto de seguridad y se recomienda para entornos de producción.

Por ejemplo, si un proceso de servidor web intenta acceder a un archivo de configuración al que no debería acceder, SELinux en modo de aplicación bloquea el acceso y registra el evento, lo que ayuda a prevenir posibles vulneraciones de seguridad.

Modo permisivo

El modo permisivo permite todas las acciones, incluso las que infringen las políticas de SELinux, pero registra las que se habrían denegado en el modo de cumplimiento. Este modo es útil para solucionar problemas y desarrollar políticas, ya que te da visibilidad sin interferir.

Por ejemplo, al configurar una nueva aplicación, un administrador cambia SELinux al modo permisivo para identificar y ajustar las infracciones de la política, de modo que la configuración final funcione sin problemas y no active inconvenientes de cumplimiento.

Modo desactivado

El modo deshabilitado significa que SELinux está completamente desactivado: no se aplica ni se registra ninguna política. Por lo general, desaconsejamos este modo porque elimina la capa adicional de protección de SELinux.

Volver a habilitar SELinux después de haberlo deshabilitado requiere volver a etiquetar el sistema de archivos para aplicar las políticas correctamente.

Un caso de uso común de este modo es un sistema que ejecuta aplicaciones heredadas incompatibles con SELinux. En esos casos, una persona administradora desactiva temporalmente SELinux, plenamente consciente de los riesgos de seguridad asociados.

¿Cómo configurar SELinux?

Para configurar SELinux, primero abre una aplicación de terminal, ya que la necesitarás para ejecutar comandos de Linux y aplicar cambios de configuración. En una computadora personal, simplemente enciéndela y abre la aplicación.

Si usas un servidor privado virtual (VPS), necesitarás acceso SSH para conectarte a tu servidor. Si usas el hosting CentOS de Hostinger, puedes encontrar tus credenciales de SSH en hPanel → VPS → Administrar → Resumen → Detalles del VPS.

Los usuarios de VPS CentOS de Hostinger también pueden usar la función de terminal en el navegador, que te permite ejecutar comandos directamente desde una pestaña del navegador. Esto es especialmente útil si no tienes una aplicación de terminal instalada o prefieres no usar una.

Para acceder, presiona el botón correspondiente en la esquina superior derecha de la página de resumen de tu VPS.

Una vez que todo esté configurado, ya puedes cambiar los modos de SELinux y agregar módulos de políticas personalizados a tu sistema.

¿Cómo configurar los modos de SELinux?

Veamos cómo revisar el modo actual de SELinux de tu sistema, cambiarlo temporalmente para la sesión actual o configurarlo de forma permanente.

Verifica el modo actual de SELinux

Antes de hacer cualquier cambio, revisa el modo actual de SELinux:

getenforce

Este comando devuelve el modo actual:

Cambia temporalmente el modo de SELinux

Puedes cambiar el modo de SELinux para la sesión actual, pero el modo que elijas no se mantendrá después de reiniciar.

  • Configura el modo permisivo:
sudo setenforce 0
  • Configúralo en modo de aplicación obligatoria:
sudo setenforce 1

¡Importante!

No puedes desactivar SELinux con el comando setenforce. Para desactivarlo, debes editar el archivo de configuración y reiniciar el sistema.

Cambiar permanentemente el modo de SELinux

Si quieres hacer el cambio permanente, sigue estos pasos:

  1. Abre el archivo de configuración de SELinux con un editor de texto como vi:
sudo vi /etc/selinux/config
  1. Presiona I para entrar en el modo de inserción. Luego, modifica la directiva SELINUX y reemplaza el valor actual por el modo que prefieras:
# Este archivo controla el estado de SELinux en el sistema.
# SELINUX= puede tomar uno de estos tres valores:
# enforcing - La política de seguridad de SELinux se aplica.
# permisivo: SELinux muestra advertencias en lugar de aplicar las reglas.
# deshabilitado: no se ha cargado ninguna política de SELinux...
SELINUX=imponiendo
  1. Guarda tus cambios y sal de vi presionando Esc, escribiendo :wq y pulsando Enter.
  2. Reinicia el sistema para aplicar el nuevo modo:
sudo reboot

Después de reiniciar, verifica el nuevo modo de SELinux con el mismo comando getenforce.

💡Volver a etiquetar el sistema de archivos

Si SELinux estuvo desactivado antes y lo estás activando de nuevo, necesitas volver a etiquetar el sistema de archivos para asignar los contextos de seguridad correctos. Para activar un reetiquetado completo en el próximo reinicio, ejecuta: sudo touch /.autorelabel sudo reboot

¿Cómo gestionar las políticas de SELinux?

Puedes administrar las políticas de SELinux creando, editando y cargando módulos de políticas para personalizar los controles de acceso de aplicaciones y servicios.

Las políticas de SELinux son modulares, lo que significa que puedes agregar o modificar reglas mediante módulos de políticas individuales sin cambiar todo el conjunto de políticas.

Crea un módulo de políticas personalizado

Cuando SELinux deniega una acción que debería estar permitida, puedes generar un módulo de política personalizado para permitirla:

  1. Revisa el registro de auditoría para ver las operaciones denegadas:
sudo ausearch -m avc -ts recent

Esto muestra todos los mensajes de denegación de la caché de vectores de acceso (AVC) del registro de auditoría desde el último inicio.

  1. Usa audit2allow para crear un módulo basado en todas las denegaciones AVC recientes. Reemplaza my_custom_policy por el nombre que prefieras:
sudo audit2allow -a -M my_custom_policy

Este comando genera dos archivos:

  • my_custom_policy.te: la política de origen.
  • my_custom_policy.pp: el módulo compilado.
  1. Carga el módulo compilado en SELinux:
sudo semodule -i my_custom_policy.pp

Después de la instalación, las nuevas reglas entran en vigor de inmediato y permiten las acciones que antes se rechazaban.

Editar y gestionar módulos de políticas

Para personalizar o ajustar aún más las políticas, edita el archivo de políticas de origen:

  1. Abre my_custom_policy.te en vi y modifica las reglas:
sudo vi my_custom_policy.te

Guarda tus cambios cuando termines.

  1. Convierte el código fuente editado en un módulo:
checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te
  1. Crea un archivo .pp a partir del módulo compilado:
semodule_package -o my_custom_policy.pp -m my_custom_policy.mod
  1. Instala el módulo actualizado:
sudo semodule -i my_custom_policy.pp

Administra los módulos de pólizas existentes

Usa el comando semodule para ver o eliminar módulos de políticas de SELinux.

  • Enumera todos los módulos instalados:
semodule -l
  • Eliminar un módulo de política específico:
sudo semodule -r my_custom_policy

¿Qué herramientas están disponibles para solucionar problemas de SELinux?

Hay varias herramientas disponibles para diagnosticar y resolver problemas de denegación de SELinux. Dos de las herramientas que se usan con más frecuencia son sealert y audit2allow.

sealert: analiza las denegaciones de SELinux

La herramienta sealert, que forma parte del paquete setroubleshoot, proporciona resúmenes de los mensajes de denegación de SELinux en un lenguaje fácil de entender. Interpreta los registros de /var/log/audit/audit.log y te ofrece sugerencias para resolver problemas.

Primero, instala setroubleshoot si aún no está instalado:

sudo dnf install setroubleshoot

Luego, analiza las denegaciones recientes de SELinux:

sudo sealert -a /var/log/audit/audit.log

Esto analiza el registro de auditoría y te brinda información detallada sobre las denegaciones, incluidas posibles soluciones como ajustar los contextos de los archivos o habilitar opciones booleanas específicas de SELinux.

audit2allow: genera módulos de políticas personalizados

Cuando SELinux bloquea operaciones legítimas y ajustar los booleanos o volver a etiquetar los archivos no es suficiente, audit2allow puede ayudarte. Lee mensajes de denegación del registro de auditoría y genera módulos de políticas personalizados que permiten acciones específicas.

¡Advertencia!

Usa audit2allow con cuidado. Permitir automáticamente todas las acciones denegadas puede introducir vulnerabilidades de seguridad. Revisa siempre el archivo de políticas generado antes de instalarlo.

Puedes generar un módulo recopilando mensajes de denegación de AVC con ausearch y luego pasándolos a audit2allow para crear un módulo de políticas personalizado, como se mostró en la sección anterior.

Como alternativa, combínalo con el comando grep para crear una política de una sola vez:

sudo grep "avc: denied" /var/log/audit/audit.log | audit2allow -M my_custom_policy

Este comando filtra los mensajes de denegación con grep y luego los envía a audit2allow, que genera el módulo de política. Luego, puedes instalar el módulo generado como de costumbre.

Consejos adicionales para solucionar problemas

  • Verifica los contextos de los archivos, ya que etiquetar un archivo de forma incorrecta es una causa común de rechazo. Usa restorecon para restablecer los contextos de archivo:
sudo restorecon -Rv /path/to/directory
  • Activa los booleanos necesarios: algunos servicios requieren booleanos específicos de SELinux para funcionar correctamente. Por ejemplo, para permitir que Apache acceda a los directorios personales de usuario:
sudo setsebool -P httpd_enable_homedirs on
  • Revisa los registros de auditoría manualmente para inspeccionar los registros detallados directamente:
sudo less /var/log/audit/audit.log

Diferencias entre SELinux y AppArmor

La principal diferencia entre estos módulos es que SELinux usa un control de acceso basado en etiquetas que asigna contextos de seguridad a cada proceso y archivo, mientras que AppArmor se basa en un modelo basado en rutas que aplica políticas a rutas de archivos específicas.

Aquí tienes una tabla comparativa para ayudarte a entender cómo se comparan estos módulos de seguridad de Linux:

Función SELinux AppArmor
Modelo de control de acceso Basado en etiquetas (usa contextos de seguridad) Basado en rutas (usa rutas de archivos)
Cumplimiento de políticas Se deniega de forma predeterminada y requiere permisos explícitos. Permitir de forma predeterminada, restringe el uso de reglas de perfil
Granularidad Alto: admite seguridad multinivel (MLS) y seguridad multicategoría (MCS) Moderado, no es compatible con MLS/MCS
Facilidad de uso Complejo, con una curva de aprendizaje más pronunciada Más fácil de configurar y administrar
Distribuciones predeterminadas RHEL, CentOS y Fedora Ubuntu, Debian, SUSE
Herramientas Conjunto amplio de herramientas, como audit2allow, semanage y sestatus Herramientas más simples y perfiles administrados mediante archivos planos

¿Cuándo elegir SELinux en lugar de AppArmor?

  • Elige SELinux para obtener seguridad de nivel empresarial con control detallado de políticas, especialmente en entornos que requieren cumplimiento, aislamiento estricto o MLS/MCS, como sistemas gubernamentales, militares o empresariales a gran escala que ejecutan RHEL o CentOS.
  • Elige AppArmor si quieres una configuración más simple y rápida, con una administración de perfiles más sencilla. Es ideal para entornos de desarrollo, implementaciones en la nube o sistemas Ubuntu/Debian en los que la facilidad de uso y la flexibilidad son más importantes que el cumplimiento estricto de políticas.

¿Cuáles son los beneficios de usar SELinux?

A continuación, se enumeran los beneficios de usar SELinux:

  • Mayor seguridad del sistema: al implementar MAC, SELinux garantiza que los procesos y las personas usuarias solo puedan acceder a los recursos que la política permite explícitamente.
  • Control de acceso detallado: con su sistema basado en etiquetas, SELinux permite que los administradores definan permisos de acceso precisos para archivos, procesos y otros recursos del sistema.
  • Mejor cumplimiento normativo: SELinux ayuda a cumplir requisitos normativos, como PCI-DSS y HIPAA, al aplicar controles de acceso estrictos y mantener registros de auditoría detallados.
  • Contención de servicios comprometidos: incluso si un servicio se ve comprometido, SELinux limita el daño potencial al restringir el acceso del servicio solo a lo que realmente necesita.
  • Auditoría y registro detallados: SELinux ofrece un registro completo de los intentos de acceso y las violaciones de políticas, lo que facilita el monitoreo, la solución de problemas y el análisis forense.
  • Gestión flexible de políticas: los administradores pueden personalizar las políticas de SELinux para satisfacer necesidades específicas de la organización y respaldar una amplia variedad de requisitos operativos.

Conclusión

SELinux aplica un control de acceso estricto en tu sistema Linux mediante políticas claramente definidas y un modelo de seguridad basado en etiquetas que asigna permisos específicos a cada proceso y recurso según el contexto.

Aunque la configuración es un poco compleja, los beneficios de seguridad superan con creces la curva de aprendizaje, especialmente en entornos empresariales y de VPS.

Para reforzar aún más la seguridad de tu sistema, revisa los booleanos activos de SELinux con getsebool -a y habilita solo los que sean relevantes para tu configuración.

También puedes combinar SELinux con herramientas como firewalld para proteger la red o configurar fail2ban para bloquear ataques de fuerza bruta contra SSH.

Todo el contenido tutorial en este sitio web está sujeto a los estándares y valores editoriales más rigurosos de Hostinger.

Author
El autor

Katerina

Katerina is a Localization Project Manager at Hostinger, bringing over 5 years of project management experience and a 6-year background as a linguist. She focuses on making technology more approachable by transforming complex guides into clear, easy-to-follow tutorials. In her free time, when she’s not staying up-to-date with the latest in localization, she enjoys watching movies and reading books.

Lo que dicen nuestros clientes

Deja una respuesta

Llena los campos obligatorios, por favor.Acepta la casilla de verificación Privacidad, por favor.Llena los campos requeridos y acepta la casilla de verificación de privacidad, por favor.

Thank you! Your comment has been successfully submitted. It will be approved within the next 24 hours.