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".

Hoja de trucos de SELinux para administradores de sistemas: 42 respuestas a preguntas importantes

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:

  • Representación binaria: /usr/sbin/httpd→httpd_exec_t
  • 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:

# yum -y install setroubleshoot setroubleshoot-server

Reiniciar o reiniciar auditd Después de la instalación.

23. uso

journalctl

para mostrar una lista de todos los registros asociados con setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. uso journalctl para enumerar todos los registros asociados con una etiqueta SELinux específica. Por ejemplo:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

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:

  • / var / log / messages
  • /var/log/auditoría/auditoría.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

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:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t contexto del archivo
  • -r contexto de rol
  • -u contexto de usuario

41. Contenedores que se ejecutan con SELinux deshabilitado:

  • Podman: # podman run --security-opt label=disable …
  • Estibador: # docker run --security-opt label=disable …

42. Si necesita darle al contenedor acceso completo al sistema:

  • Podman: # podman run --privileged …
  • Estibador: # docker run --privileged …

Y ahora ya sabes la respuesta. Entonces, por favor: no entre en pánico y habilite SELinux.

Enlaces:

Fuente: habr.com

Añadir un comentario