Introducción
Security Enhanced Linux o SELinux es un mecanismo de control de acceso avanzado integrado en la mayoría de las distribuciones de Linux modernas. Inicialmente fue desarrollado por la Agencia de Seguridad Nacional de EE. UU. para proteger los sistemas informáticos de intrusiones y manipulaciones maliciosas. Con el tiempo, SELinux se lanzó al dominio público y, desde entonces, varias distribuciones lo incorporaron en su código
Muchos administradores de sistemas consideran que SELinux es un territorio algo desconocido. El tema puede parecer desalentador y, a veces, bastante confuso. Sin embargo, un sistema SELinux correctamente configurado puede reducir en gran medida los riesgos de seguridad, y saber un poco sobre él puede ayudarlo a solucionar los mensajes de error relacionados con el acceso. En este tutorial aprenderemos sobre los conceptos detrás de SELinux:sus paquetes, comandos y archivos de configuración
Instalando paquetes SELinux
Se utilizan varios paquetes en SELinux. Algunos están instalados por defecto. Aquí hay una lista de distribuciones basadas en Red Hat:
- policycoreutils (proporciona utilidades para administrar SELinux)
- policycoreutils-python (proporciona utilidades para administrar SELinux)
- política de selinux (proporciona la política de referencia de SELinux)
- selinux-policy-targeted (proporciona la política específica de SELinux)
- libselinux-utils (proporciona algunas herramientas para administrar SELinux)
- establecer servidor de solución de problemas (proporciona herramientas para descifrar mensajes de registro de auditoría)
- herramientas (proporciona herramientas para la supervisión de registros de auditoría, la política de consultas y la gestión del contexto de archivos)
- consola de setools (proporciona herramientas para la supervisión de registros de auditoría, la política de consultas y la gestión del contexto de archivos)
- mcstrans (herramientas para traducir diferentes niveles a un formato fácil de entender)
Algunos de estos ya están instalados. Para verificar qué paquetes de SELinux están instalados en su sistema CentOS 7, puede ejecutar algunos comandos como el siguiente (con diferentes términos de búsqueda después de grep
) como usuario root:
rpm -qa | grep selinux
La salida debería verse así:
libselinux-utils-2.2.2-6.el7.x86_64
libselinux-2.2.2-6.el7.x86_64
selinux-policy-targeted-3.12.1-153.el7.noarch
selinux-policy-3.12.1-153.el7.noarch
libselinux-python-2.2.2-6.el7.x86_64
Puede continuar e instalar todos los paquetes con el siguiente comando (yum solo actualizará los que ya tenga), o solo los que encuentre que faltan en su sistema:
yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
Ahora deberíamos tener un sistema cargado con todos los paquetes de SELinux.
Modos SELinux
Es hora de comenzar a jugar con SELinux, así que comencemos con los modos de SELinux. En cualquier momento, SELinux puede estar en cualquiera de los tres modos posibles:
- Cumplimiento
- permisivo
- Deshabilitado
En el modo de aplicación, SELinux aplicará su política en el sistema Linux y asegúrese de que cualquier intento de acceso no autorizado por parte de usuarios y procesos sea denegado. Las denegaciones de acceso también se escriben en archivos de registro relevantes. Hablaremos sobre las políticas de SELinux y los registros de auditoría más adelante.
El modo permisivo es como un estado semihabilitado. SELinux no aplica su política en modo permisivo, por lo que no se deniega el acceso. Sin embargo, cualquier infracción de la política aún se registra en los registros de auditoría. Es una excelente manera de probar SELinux antes de aplicarlo.
El modo deshabilitado se explica por sí mismo:el sistema no se ejecutará con seguridad mejorada.
Comprobando modos y estado de SELinux
Podemos ejecutar el getenforce
comando para verificar el modo SELinux actual.
getenforce
SELinux debería estar deshabilitado actualmente, por lo que la salida se verá así:
Disabled
También podemos ejecutar el sestatus
comando:
sestatus
Cuando SELinux está deshabilitado, la salida mostrará:
SELinux status: disabled
Archivo de configuración SELinux
El archivo de configuración principal de SELinux es /etc/selinux/config. Podemos ejecutar el siguiente comando para ver su contenido:
cat /etc/selinux/config
La salida se verá así:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Hay dos directivas en este archivo. La directiva SELINUX dicta el modo SELinux y puede tener tres valores posibles como discutimos antes.
Habilitar y deshabilitar SELinux
Habilitar SELinux es bastante simple; pero a diferencia de deshabilitarlo, debe hacerse en un proceso de dos pasos. Suponemos que SELinux está actualmente deshabilitado y que ha instalado todos los paquetes de SELinux de la sección anterior.
Como primer paso, necesitamos editar el /etc/selinux/config
para cambiar la directiva SELINUX al modo permisivo.
vi /etc/sysconfig/selinux
...
SELINUX=permissive
...
Establecer el estado en permisivo first es necesario porque cada archivo en el sistema necesita tener su contexto etiquetado antes de que se pueda aplicar SELinux. A menos que todos los archivos estén debidamente etiquetados, los procesos que se ejecutan en dominios confinados pueden fallar porque no pueden acceder a los archivos con los contextos correctos. Esto puede hacer que el proceso de arranque falle o comience con errores. Presentaremos contextos y dominios más adelante en el tutorial.
Ahora emita un reinicio del sistema:
reboot
El proceso de reinicio verá todos los archivos en el servidor etiquetados con un contexto SELinux.
En la segunda fase, necesitamos editar el archivo de configuración para cambiar la directiva SELINUX de permisivo para hacer cumplir en el /etc/sysconfig/selinux
archivo:
...
SELINUX=enforcing
...
A continuación, reinicie el servidor de nuevo.
reboot
Una vez que el servidor vuelve a estar en línea, podemos ejecutar sestatus
Comando para comprobar el estado de SELinux. Ahora debería mostrar más detalles sobre el servidor:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28