
Se preparó una traducción del artículo para los estudiantes del curso de seguridad de Linux.
SELinux o Security Enhanced Linux es un mecanismo de control de acceso avanzado desarrollado por la Agencia de Seguridad Nacional de los Estados Unidos (NSA) para evitar intrusiones maliciosas. Implementa un modelo de control de acceso forzado (u obligatorio) (Ing. Control de acceso obligatorio, MAC) sobre el modelo discrecional (o selectivo) existente (Ing. Control de acceso discrecional, DAC), es decir, permisos para leer, escribir, ejecutar.
SELinux tiene tres modos:
- Cumplimiento : denegación de acceso según las reglas de la política.
- Permisivo : acciones de registro que violan las políticas que estarían prohibidas en el modo obligatorio.
- Deshabilitado : deshabilita SELinux por completo.
Por defecto, la configuración está en /etc/selinux/config
Cambio de modos SELinux
Para averiguar el modo actual, ejecute
$ getenforce
Para cambiar el modo a permisivo, ejecute el siguiente comando
$ setenforce 0
o, para cambiar el modo de permisivo a obligatorio , hacer
$ setenforce 1
Si necesita deshabilitar completamente SELinux, esto solo se puede hacer a través del archivo de configuración
$ vi /etc/selinux/config
Para deshabilitar, cambie el parámetro SELINUX de la siguiente manera:
SELINUX=disabled
Configuración de SELinux
Cada archivo y proceso está marcado con un contexto SELinux, que contiene información adicional como usuario, rol, tipo, etc. Si es la primera vez que habilita SELinux, primero debe configurar el contexto y las etiquetas. El proceso de etiquetado y contexto se conoce como etiquetado. Para comenzar a marcar, en el archivo de configuración, cambie el modo a permisivo .
$ vi /etc/selinux/config SELINUX=permissive
Después de configurar el modo permisivo , cree un archivo oculto vacío llamado autorelabel
en la raíz
$ touch /.autorelabel
y reinicie la computadora
$ init 6
Nota: utilizamos el modo permisivo para marcar, porque el uso del modo forzado puede provocar el bloqueo del sistema durante el reinicio.
No se preocupe si la descarga se atasca en algún archivo, el marcado lleva algún tiempo. Después de marcar e iniciar su sistema, puede ir al archivo de configuración y configurar el modo de ejecución , así como ejecutar:
$ setenforce 1
Ahora ha habilitado con éxito SELinux en su computadora.
Monitorear registros
Es posible que tenga algún tipo de error al marcar o mientras el sistema se estaba ejecutando. Para verificar si su SELinux funciona correctamente y si no bloquea el acceso a ningún puerto, aplicación, etc., debe mirar los registros. El registro de SELinux se encuentra en /var/log/audit/audit.log
, pero no necesita leerlo por completo para encontrar errores. Puede usar audit2why para encontrar errores. Ejecute el siguiente comando:
$ audit2why < /var/log/audit/audit.log
Como resultado, obtienes una lista de errores. Si no hubo errores en el registro, no se mostrarán mensajes.
Configurar la política de SELinux
Una política de SELinux es un conjunto de reglas que guían la seguridad de SELinux. Una política define un conjunto de reglas para un entorno particular. Ahora aprenderemos cómo configurar políticas para permitir el acceso a servicios restringidos.
1. Valores lógicos (interruptores)
Los conmutadores (booleanos) le permiten cambiar partes de una política mientras trabaja, sin la necesidad de crear nuevas políticas. Le permiten realizar cambios sin reiniciar o volver a compilar las políticas de SELinux.
Ejemplo
Supongamos que queremos compartir el directorio de inicio del usuario a través de FTP para leer y escribir, y ya lo hemos compartido, pero cuando intentamos acceder, no vemos nada. Esto se debe a que la política de SELinux prohíbe que el servidor FTP lea y escriba en el directorio de inicio del usuario. Necesitamos cambiar la política para que el servidor FTP pueda acceder a los directorios principales. Veamos si hay algún cambio para esto haciendo
$ semanage boolean -l
Este comando mostrará una lista de interruptores disponibles con su estado actual (encendido / encendido o apagado / apagado) y descripción. Puede refinar su búsqueda agregando grep para encontrar solo resultados relacionados con ftp:
$ semanage boolean -l | grep ftp
y encuentra lo siguiente
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Este interruptor está desactivado, así que lo habilitaremos con setsebool $ setsebool ftp_home_dir on
Ahora nuestro demonio ftp podrá acceder al directorio de inicio del usuario.
Nota: también puede obtener una lista de modificadores disponibles sin descripción haciendo getsebool -a
2. Etiquetas y contexto
Esta es la forma más común de implementar políticas SELinux. Cada archivo, carpeta, proceso y puerto está marcado con un contexto SELinux:
- Para los archivos y carpetas, las etiquetas se almacenan como atributos extendidos en el sistema de archivos y se pueden ver con el siguiente comando:
$ ls -Z /etc/httpd
- Para procesos y puertos, el núcleo controla el marcado y puede ver estas etiquetas de la siguiente manera:
el proceso
$ ps –auxZ | grep httpd
puerto
$ netstat -anpZ | grep httpd
Ejemplo
Ahora veamos un ejemplo para comprender mejor las etiquetas y el contexto. Supongamos que tenemos un servidor web que /var/www/html/ /home/dan/html/
lugar del directorio /var/www/html/ /home/dan/html/
. SELinux considerará esto como una violación de la política y es posible que no pueda navegar por sus páginas web. Esto se debe a que no hemos configurado el contexto de seguridad asociado con los archivos HTML. Para ver el contexto de seguridad predeterminado, use el siguiente comando:
$ ls –lz /var/www/html -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Aquí tenemos httpd_sys_content_t
como contexto para los archivos html. Necesitamos establecer este contexto de seguridad para nuestro directorio actual, que ahora tiene el siguiente contexto:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Comando alternativo para verificar el contexto de seguridad de un archivo o directorio:
$ semanage fcontext -l | grep '/var/www'
También usaremos semanage para cambiar el contexto después de encontrar el contexto de seguridad correcto. Para cambiar el contexto de / home / dan / html, ejecute los siguientes comandos:
$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?' $ semanage fcontext -l | grep '/home/dan/html' /home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 $ restorecon -Rv /home/dan/html
Después de cambiar el contexto usando semanage, el comando restorecon cargará el contexto predeterminado para archivos y directorios. Nuestro servidor web ahora podrá leer archivos de la carpeta /home/dan/html
, ya que el contexto de seguridad de esta carpeta se ha cambiado a httpd_sys_content_t
.
3. Crear políticas locales
Puede haber situaciones en las que los métodos anteriores son inútiles para usted y obtiene errores (avc / negación) en audit.log. Cuando esto sucede, debe crear una política local. Puede encontrar todos los errores con audit2why, como se describió anteriormente.
Para resolver errores, puede crear una política local. Por ejemplo, obtenemos un error relacionado con httpd (apache) o smbd (samba), grep errores y creamos una política para ellos:
apache $ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy samba $ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
Aquí http_policy
y smb_policy
son los nombres de las políticas locales que creamos. Ahora necesitamos cargar estas políticas locales creadas en la política actual de SELinux. Esto se puede hacer de la siguiente manera:
$ semodule –I http_policy.pp $ semodule –I smb_policy.pp
Se cargaron nuestras políticas locales, y ya no deberíamos recibir ningún avc o denail en audit.log.
Fue mi intento de ayudarlo a comprender SELinux. Espero que después de leer este artículo se sienta más cómodo con SELinux.