SELinux en RHEL 9
SELinux
Security-Enhanced Linux (SELinux) es un módulo de seguridad integrado en el kernel de Linux que implementa un modelo de Control de Acceso Obligatorio (MAC). A diferencia del Control de Acceso Discrecional (DAC) tradicional, donde los permisos son asignados por los propietarios de los archivos, SELinux define políticas de seguridad centralizadas que determinan cómo los procesos y usuarios pueden interactuar con los archivos y recursos del sistema.
Objetivo de SELinux
El propósito principal de SELinux es proporcionar una capa adicional de seguridad al sistema, controlando y restringiendo las acciones que los procesos pueden realizar, incluso si estos procesos son ejecutados por usuarios con privilegios elevados. Esto ayuda a mitigar posibles vulnerabilidades y a prevenir accesos no autorizados.
Funcionamiento de SELinux
SELinux opera asignando contextos de seguridad a cada proceso, archivo y recurso del sistema. Estos contextos son etiquetas que contienen información sobre el usuario, rol, tipo y nivel de seguridad. Las políticas de SELinux utilizan estos contextos para permitir o denegar accesos específicos basados en reglas predefinidas.
Beneficios de utilizar SELinux
Control de acceso granular: Permite definir políticas detalladas sobre qué acciones pueden realizar los procesos y usuarios.
Mitigación de vulnerabilidades: Restringe las capacidades de los procesos, limitando el impacto de posibles exploits o vulnerabilidades.
Registro y auditoría: Proporciona registros detallados de las acciones y accesos, facilitando la auditoría y el monitoreo del sistema.
RHEL 9 proporciona los siguientes paquetes necesarios para el funcionamiento de SELinux:
- Políticas: selinux-policy-targeted, selinux-policy-mls
- Herramientas: policycoreutils, policycoreutils-gui, libselinux-utils, policycoreutils-python-utils, setools-console, checkpolicy
Nota: La creación de políticas esta fuera del alcance de este curso. El contenido esta orientado a poder hacer uso de las políticas incluidas en el sistema tomando como base ejemplos y explicaciones de algunas de ellas.
Componentes Clave
- Políticas: Conjunto de reglas que definen los permisos para procesos y objetos (archivos, puertos, etc).
- Contextos de seguridad: Cada archivo, proceso o recurso tiene un contexto como:
user:role:type:level - Tipos (Type): Parte crítica del control de acceso. Un tipo define qué puede hacer un proceso con un recurso.
Comandos Importantes
getenforce: Muestra el modo actual de SELinux.setenforce [0|1]: Cambia entre modo permissive (0) y enforcing (1).sestatus: Muestra el estado y configuración de SELinux.ls -Z: Muestra los contextos SELinux de los archivos.ps -eZ: Muestra los contextos de procesos en ejecución.semanage: Administra configuraciones como puertos, usuarios y equivalencias de rutas.restorecon: Restaura el contexto SELinux predeterminado de archivos.chcon: Cambia temporalmente el contexto de un archivo.
Modos de operación de SELinux
SELinux puede operar en tres modos distintos:
-
Enforcing (Impositivo): Es el modo predeterminado y recomendado. En este modo, SELinux aplica activamente las políticas de seguridad y bloquea cualquier acción no permitida.
setenforce 1 -
Permissive (Permisivo): En este modo, SELinux no bloquea las acciones no permitidas, pero las registra en los logs. Es útil para propósitos de depuración y desarrollo de políticas.
setenforce 0 -
Disabled (Deshabilitado): SELinux está completamente desactivado. No se recomienda este modo, ya que el sistema no tendrá la protección adicional que ofrece SELinux.
Verificando el estado de SELinux
Para obtener información detallada sobre el estado de SELinux en el sistema:
sestatus
Ejemplo:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
Cambiando el modo de SELinux permanentemente
Para cambiar el modo de SELinux de forma permanente, es necesario editar el archivo de configuración: /etc/selinux/config.
Dentro de este archivo, localizar la línea que comienza con SELINUX= y modificar su valor a enforcing, permissive o disabled, según se desee:
- enforcing
- permissive
- disabled
Guardar los cambios y reiniciar el sistema para que surtan efecto.
reboot
Si el modo se cambia de Disabled a Permissive o Enforcing, se recomienda validar este cambio primero en Permissive:
touch /.autorelabel
Obtener ayuda acerca de SELinux
Puede instalar el paquete: selinux-policy-doc, el cual contiene la documentación de las políticas de SELinux para paquetes instalado y no instalados en el sistema. Esto significa que puede obtener documentación de todas las políticas incluidas en la distribución.
dnf install selinux-policy-doc
mandb
man -k _selinux