La Configuración avanzada de SELinux (Security-Enhanced Linux) es esencial para reforzar la seguridad en sistemas Linux mediante una política de control de acceso obligatorio (MAC) que restringe el acceso a usuarios y aplicaciones según reglas estrictas. A continuación, se exploran los aspectos avanzados y configuraciones esenciales de SELinux para maximizar la seguridad en un entorno de producción.
1. Comprender los Modos de SELinux
SELinux tiene tres modos de operación, cada uno adecuado para diferentes entornos y necesidades:
- Enforcing: Aplicación de todas las políticas de SELinux. Es el modo recomendado para producción.
- Permissive: Registra los eventos que violan las políticas, pero no los bloquea. Útil para pruebas y depuración.
- Disabled: Desactiva SELinux. No recomendado, ya que desactiva toda la protección.
Para verificar el modo actual:
sestatus
Para cambiar el modo (permanentemente), edita /etc/selinux/config
y configura SELINUX=enforcing
o SELINUX=permissive
. Luego, reinicia el sistema para que los cambios surtan efecto.
2. Comprender las Políticas de SELinux
SELinux utiliza políticas para definir reglas de acceso:
- Política dirigida (targeted): Restringe solo a ciertos servicios, permitiendo a los usuarios y otros servicios funcionar sin restricciones.
- Política estricta (strict): Aplica restricciones a todos los procesos y usuarios. Es más compleja y adecuada para entornos de alta seguridad.
En la mayoría de los sistemas modernos, la política dirigida es la predeterminada. Puedes verificarla usando:
sestatus
3. Administrar Contextos de Seguridad
Los contextos de seguridad son etiquetas que SELinux asigna a archivos, procesos y usuarios para controlar el acceso. El contexto incluye el usuario, el rol, el tipo y el nivel de seguridad.
Ver el contexto de un archivo o proceso
Para ver el contexto de un archivo:
ls -Z /ruta/del/archivo
Para ver el contexto de un proceso:
ps -eZ
Cambiar el contexto de un archivo
El comando chcon
cambia temporalmente el contexto de seguridad de un archivo:
chcon -t httpd_sys_content_t /var/www/html/index.html
Para cambios permanentes, es mejor usar semanage
, ya que chcon
se restablecerá después de un reinicio o un cambio de políticas:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -R /var/www/html
4. Gestión de Booleans en SELinux
Los booleans en SELinux son configuraciones dinámicas que permiten ajustar el comportamiento de las políticas sin modificarlas. Cada booleano se utiliza para activar o desactivar características de seguridad en ciertos servicios.
Listar todos los booleans y sus valores actuales
getsebool -a
Cambiar el valor de un booleano temporalmente
setsebool httpd_can_network_connect on
Cambiar el valor de un booleano permanentemente
setsebool -P httpd_can_network_connect on
5. Auditoría y Registros de SELinux
SELinux registra cada violación de política en el archivo de auditoría del sistema, generalmente ubicado en /var/log/audit/audit.log
.
Para examinar y diagnosticar problemas de permisos, puedes utilizar el comando ausearch
para buscar en los registros:
ausearch -m avc -ts today
También puedes utilizar audit2why
para interpretar los mensajes de error y audit2allow
para generar reglas que permitan el acceso denegado:
grep "avc: denied" /var/log/audit/audit.log | audit2why
Para crear una regla que permita el acceso:
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mycustompolicy
semodule -i mycustompolicy.pp
6. Crear y Modificar Módulos de Políticas Personalizados
En algunos casos, es posible que necesites crear módulos de políticas personalizados para ajustar SELinux a necesidades específicas.
Crear un módulo de política a partir de registros de auditoría
- Filtra los mensajes de denegación en el registro:
grep "avc: denied" /var/log/audit/audit.log > denied.log
- Crea un módulo de política con
audit2allow
:cat denied.log | audit2allow -M mycustompolicy
- Instala el módulo:
semodule -i mycustompolicy.pp
Este módulo permitirá explícitamente las acciones previamente denegadas, así que revísalo para evitar sobrepermisos.
7. Gestión de Roles y Usuarios en SELinux
SELinux también permite definir roles y usuarios con diferentes permisos. Esto es particularmente útil en entornos multiusuario con niveles de acceso diferenciados.
Para asignar un contexto a un usuario de Linux en SELinux:
semanage login -a -s user_u usuario_linux
Para listar los usuarios de SELinux:
semanage user -l
8. Herramientas de Administración de SELinux
Algunas herramientas esenciales para la administración avanzada de SELinux son:
semanage
: Configura contextos de archivo, puertos y políticas de SELinux.restorecon
: Restablece contextos de seguridad predeterminados de SELinux en archivos.chcon
: Cambia contextos de seguridad de archivos de manera temporal.setsebool
: Cambia los valores de los booleans de SELinux.semodule
: Administra los módulos de políticas de SELinux.
9. Optimización del Rendimiento de SELinux
En entornos de alto rendimiento, SELinux puede afectar ligeramente la velocidad de los procesos. Sin embargo, esta diferencia es mínima en sistemas modernos. Para optimizar, asegúrate de que solo las políticas necesarias estén habilitadas y utiliza setroubleshoot
y auditd
para reducir los registros innecesarios.
10. Recomendaciones Finales para una Configuración Avanzada
- Auditoría continua: Revisa periódicamente los registros para ajustar políticas y booleans según las necesidades actuales.
- Documentación de cambios: Mantén un registro de todos los cambios realizados en los booleans, módulos y contextos.
- Pruebas en modo permisivo: Antes de habilitar nuevas políticas, pruébalas en modo permisivo para identificar posibles problemas sin afectar el sistema.
- Educación y entrenamiento: Los administradores deben estar capacitados en SELinux para manejar eficientemente su configuración y resolución de problemas.
En resumen
La configuración avanzada de SELinux es una herramienta poderosa para reforzar la seguridad en sistemas Linux, proporcionando un control granular sobre los accesos de aplicaciones y usuarios. A través del uso de contextos de seguridad, booleans, módulos personalizados y auditoría, los administradores pueden crear entornos altamente seguros y adaptados a las necesidades específicas de la organización.