ProHoster > Blog > administración > Hoja de trucos de SELinux para administradores de sistemas: 42 respuestas a preguntas importantes
Hoja de trucos de SELinux para administradores de sistemas: 42 respuestas a preguntas importantes
La traducción del artículo fue preparada específicamente para estudiantes del curso. "Administrador de Linux".
Aquí obtendrá respuestas a preguntas importantes sobre la vida, el universo y todo lo relacionado con Linux con seguridad mejorada.
“La importante verdad de que las cosas no siempre son lo que parecen es de conocimiento común...”
-Douglas Adams, La Guía del autoestopista galáctico
Seguridad. Mayor confiabilidad. Correspondencia. Política. Administrador de sistemas de Los Cuatro Jinetes del Apocalipsis. Además de nuestras tareas diarias (monitoreo, copia de seguridad, implementación, configuración, actualización, etc.), también somos responsables de la seguridad de nuestros sistemas. Incluso aquellos sistemas en los que el proveedor externo recomienda que desactivemos la seguridad mejorada. se siente como trabajo Ethan Cazar de “Misión: Imposible”.
Ante este dilema, algunos administradores de sistemas deciden tomar pastilla azul, porque creen que nunca sabrán la respuesta a la gran pregunta de la vida, el universo y todo eso. Y como todos sabemos, esa respuesta es 42.
Siguiendo el espíritu de La Guía del autoestopista galáctico, aquí hay 42 respuestas a preguntas importantes sobre control y uso. SELinux en sus sistemas.
1. SELinux es un sistema de control de acceso forzado, lo que significa que cada proceso tiene una etiqueta. Cada archivo, directorio y objeto del sistema también tiene etiquetas. Las reglas de política controlan el acceso entre procesos y objetos etiquetados. El núcleo hace cumplir estas reglas.
2. Los dos conceptos más importantes son: El etiquetado — marcas (archivos, procesos, puertos, etc.) y Tipo de aplicación (que aísla los procesos entre sí según los tipos).
3. Formato de etiqueta correcto user:role:type:level (Opcional).
4. El propósito de proporcionar seguridad multinivel (Seguridad multinivel - MLS) es gestionar procesos (dominios) en función del nivel de seguridad de los datos que utilizarán. Por ejemplo, un proceso secreto no puede leer datos ultrasecretos.
5. Garantizar la seguridad de múltiples categorías (Seguridad multicategoría - MCS) protege procesos similares entre sí (por ejemplo, máquinas virtuales, motores OpenShift, entornos aislados de SELinux, contenedores, etc.).
6. Opciones del kernel para cambiar los modos SELinux en el arranque:
autorelabel=1 → hace que el sistema ejecute el reetiquetado
selinux=0 → el kernel no carga la infraestructura SELinux
enforcing=0 → cargando en modo permisivo
7. Si necesita volver a etiquetar todo el sistema:
# touch /.autorelabel
#reboot
Si el marcado del sistema contiene una gran cantidad de errores, es posible que deba iniciar en modo permisivo para que el comentario se realice correctamente.
8. Para comprobar si SELinux está habilitado: # getenforce
9. Para habilitar/deshabilitar temporalmente SELinux: # setenforce [1|0]
10. Comprobando el estado de SELinux: # sestatus
11. Archivo de configuración: /etc/selinux/config
12. ¿Cómo funciona SELinux? A continuación se muestra un ejemplo de marcado para el servidor web Apache:
Directorio de configuración: /etc/httpd→httpd_config_t
Directorio de archivos de registro: /var/log/httpd → httpd_log_t
Directorio de contenido: /var/www/html → httpd_sys_content_t
Guión de lanzamiento: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
Proceso: /usr/sbin/httpd -DFOREGROUND → httpd_t
Puertos: 80/tcp, 443/tcp → httpd_t, http_port_t
Proceso ejecutándose en contexto httpd_t, puede interactuar con un objeto etiquetado httpd_something_t.
13. Muchos comandos aceptan un argumento. -Z para ver, crear y cambiar contexto:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
Los contextos se establecen cuando los archivos se crean en función del contexto de su directorio principal (con algunas excepciones). Los RPM pueden establecer contextos como durante la instalación.
14. Hay cuatro causas principales de errores de SELinux, que se describen con más detalle en los puntos 15 a 21 a continuación:
Problemas de etiquetado
Por algo que SELinux necesita saber
Error en la política/aplicación de SELinux
Su información puede verse comprometida
15.Problema de etiquetado: si sus archivos están en /srv/myweb están marcados incorrectamente, se puede denegar el acceso. A continuación se muestran algunas formas de solucionar este problema:
Si conoces la etiqueta: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Si conoce un archivo con marcas equivalentes: # semanage fcontext -a -e /srv/myweb /var/www
Restaurando el contexto (para ambos casos): # restorecon -vR /srv/myweb
16.Problema de etiquetado: Si mueve el archivo en lugar de copiarlo, el archivo conservará su contexto original. Para solucionar este problema:
Cambie el comando de contexto con la etiqueta: # chcon -t httpd_system_content_t /var/www/html/index.html
Cambie el comando de contexto con la etiqueta del enlace: # chcon --reference /var/www/html/ /var/www/html/index.html
Restaurar el contexto (para ambos casos): # restorecon -vR /var/www/html/
17. si SELinux que necesitas saberque HTTPD está escuchando en el puerto 8585, dígale a SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18.SELinux que necesitas saber Valores booleanos que permiten cambiar partes de la política de SELinux en tiempo de ejecución sin saber que se sobrescribe la política de SELinux. Por ejemplo, si desea que httpd envíe un correo electrónico, ingrese: # setsebool -P httpd_can_sendmail 1
19.SELinux que necesitas saber valores lógicos para habilitar/deshabilitar la configuración de SELinux:
Para ver todos los valores booleanos: # getsebool -a
Para ver una descripción de cada uno: # semanage boolean -l
Para establecer un valor booleano: # setsebool [_boolean_] [1|0]
Para una instalación permanente, agregue -P. Por ejemplo: # setsebool httpd_enable_ftp_server 1 -P
20. Las políticas/aplicaciones de SELinux pueden contener errores, que incluyen:
Rutas de código inusuales
Configuraciones
Redirigir salida estándar
Fugas de descriptores de archivos
memoria ejecutable
Bibliotecas mal construidas
Tickets abiertos (no envíe un informe a Bugzilla; Bugzilla no tiene SLA).
21.Su información puede verse comprometidasi tiene dominios restringidos intenta:
Cargar módulos del kernel
Deshabilitar el modo SELinux forzado
Escribir a etc_t/shadow_t
Cambiar reglas de iptables
22. Herramientas SELinux para desarrollar módulos de políticas:
25. Si ocurre un error de SELinux, use el registro setroubleshoot ofreciendo varias soluciones posibles.
Por ejemplo de journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26. Registro: SELinux registra información en muchos lugares:
27. Registro: búsqueda de errores de SELinux en el registro de auditoría:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Para buscar mensajes de SELinux Access Vector Cache (AVC) para un servicio específico:
# ausearch -m avc -c httpd
29. Utilidad audit2allow recopila información de registros de operaciones prohibidas y luego genera reglas de política de permisos de SELinux. Por ejemplo:
Para crear una descripción legible por humanos de por qué se deniega el acceso: # audit2allow -w -a
Para ver una regla de aplicación de tipos que permite el acceso denegado: # audit2allow -a
Para crear un módulo personalizado: # audit2allow -a -M mypolicy
Opcion -M crea un archivo de aplicación de tipos (.te) con el nombre especificado y compila la regla en un paquete de políticas (.pp): mypolicy.pp mypolicy.te
Para instalar un módulo personalizado: # semodule -i mypolicy.pp
30. Para configurar un proceso (dominio) separado para que funcione en modo permisivo: # semanage permissive -a httpd_t
31. Si ya no quieres que el dominio sea permisivo: # semanage permissive -d httpd_t
32. Para deshabilitar todos los dominios permisivos: # semodule -d permissivedomains
33. Habilitación de la política MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Asegúrese de que SELinux se esté ejecutando en modo permisivo: # setenforce 0
Usa un guión fixfilespara garantizar que los archivos se vuelvan a etiquetar en el próximo reinicio:
# fixfiles -F onboot # reboot
34. Cree un usuario con un rango MLS específico: # useradd -Z staff_u john
Usando el comando useradd, asigne el nuevo usuario a un usuario SELinux existente (en este caso, staff_u).
35. Para ver la asignación entre usuarios de SELinux y Linux: # semanage login -l
36. Defina un rango específico para el usuario: # semanage login --modify --range s2:c100 john
37. Para corregir la etiqueta del directorio de inicio del usuario (si es necesario): # chcon -R -l s2:c100 /home/john
38. Para ver las categorías actuales: # chcat -L
39. Para cambiar de categoría o comenzar a crear la suya propia, edite el archivo de la siguiente manera:
/etc/selinux/_<selinuxtype>_/setrans.conf
40. Para ejecutar un comando o secuencia de comandos en un archivo, función y contexto de usuario específicos: