Guía para administradores sobre SELinux: 42 respuestas a preguntas importantes

La traducción del artículo ha sido preparada especialmente para los estudiantes del curso «Administrador de Linux».

Guía para administradores sobre SELinux: 42 respuestas a preguntas importantes

Aquí encontrarás respuestas a preguntas importantes sobre la vida, el universo y todo lo relacionado en Linux con una mejor seguridad.

«La importante verdad de que las cosas no siempre son lo que parecen es bien conocida…»

―Douglas Adams, Guía del autoestopista galáctico

Seguridad. Aumento de la fiabilidad. Cumplimiento. Políticas. Los Cuatro Jinetes del Apocalipsis del administrador de sistemas. Además de nuestras tareas diarias—monitoreo, respaldo, implementación, configuración, actualización, etc.—también somos responsables de la seguridad de nuestros sistemas. Incluso aquellos sistemas donde un proveedor externo nos recomienda desactivar la seguridad mejorada. Es similar a la labor de Ethan Hunt en 'Misión Imposible'.

Al enfrentarse a este dilema, algunos administradores de sistemas deciden tomar la pastilla azul, porque creen que nunca conocerán la respuesta a la gran pregunta de la vida, el universo y todo lo demás. Y, como todos sabemos, esa respuesta es 42.

En el espíritu de 'Guía del autoestopista galáctico', aquí hay 42 respuestas a preguntas importantes sobre la gestión y uso de SELinux en sus sistemas.

1. SELinux es un sistema de control de acceso obligatorio, lo que significa que cada proceso tiene una etiqueta (label). Cada archivo, directorio y objeto del sistema también tiene etiquetas. Las reglas de políticas gestionan el acceso entre procesos y objetos etiquetados. El núcleo asegura el cumplimiento de estas reglas.

2. Los dos conceptos más importantes son: Etiquetado — etiquetado (archivos, procesos, puertos, etc.) y Aplicación de tipos (que aísla procesos entre sí según tipos).

3. El formato correcto de la etiqueta usuario:rol:tipo:nivel (opcional).

4. El objetivo de proporcionar seguridad de múltiples niveles (Seguridad de Múltiples Niveles — MLS) es gestionar procesos (dominios) basándose en el nivel de seguridad de los datos que utilizarán. Por ejemplo, un proceso confidencial no puede leer datos ultraconfidenciales.

5. Proporcionar seguridad multicategoría (Seguridad Multicategoría — MCS) protege procesos similares entre sí (por ejemplo, máquinas virtuales, mecanismos OpenShift, espacios de trabajo de SELinux, contenedores, etc.).

6. Opciones del núcleo para modificar los modos de SELinux al inicio:

  • autorelabel=1 → hace que el sistema ejecute un reetiquetado
  • selinux=0 → el núcleo no carga la infraestructura de SELinux
  • enforcing=0 → inicio en modo permisivo

7. Si necesita volver a etiquetar todo el sistema:

# touch /.autorelabel
#reboot

Si la etiquetación del sistema contiene muchos errores, puede que necesite iniciar en modo permisivo para que la reetiquetación sea exitosa.

8. Para comprobar si SELinux está activado: # getenforce

9. Para habilitar/deshabilitar SELinux temporalmente: # setenforce [1|0]

10. Comprobando el estado de SELinux: # sestatus

11. Archivo de configuración: /etc/selinux/config

12. ¿Cómo funciona SELinux? Aquí hay un ejemplo de etiquetado 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
  • Script de inicio: /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

El proceso que se ejecuta en el contexto httpd_t, puede interactuar con el objeto etiquetado httpd_something_t.

13. Muchas órdenes aceptan el argumento -Z para visualizar, crear y modificar el contexto:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Los contextos se establecen cuando los archivos se crean con base en el contexto de su directorio principal (con algunas excepciones). RPM puede establecer contextos durante la instalación.

14. Hay cuatro razones principales para errores de SELinux que están descritas en detalle en los puntos 15-21 a continuación:

  • Problemas con la etiquetación
  • Debido a algo que SELinux debe saber
  • Error en la política/aplicación de SELinux
  • Su información puede estar comprometida

15. Problema con la etiquetación: si sus archivos están /srv/myweb mal etiquetados, el acceso puede estar denegado. Aquí hay algunas formas de solucionarlo:

  • Si conoce la etiqueta:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Si conoce un archivo con una etiquetación equivalente:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restaurando el contexto (para ambos casos):
    # restorecon -vR /srv/myweb

16. Problema con la etiquetación: si mueve un archivo en lugar de copiarlo, el archivo mantendrá su contexto original. Para resolver este problema:

  • Modifique el comando de contexto con la etiqueta:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Modifique el comando de contexto con la etiqueta de 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 necesita saber, que HTTPD escucha en el puerto 8585, informe a SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux necesita saber valores lógicos que permiten modificar partes de la política de SELinux en tiempo de ejecución sin conocimiento de la reescritura de la política de SELinux. Por ejemplo, si desea que httpd envíe correos electrónicos, escriba: # setsebool -P httpd_can_sendmail 1

19. SELinux necesita saber valores lógicos para habilitar/deshabilitar configuraciones de SELinux:

  • Para ver todos los valores lógicos: # getsebool -a
  • Para ver la descripción de cada uno: # semanage boolean -l
  • Para establecer un valor lógico: # setsebool [_boolean_] [1|0]
  • Para una configuración permanente, agregue -PPor ejemplo: # setsebool httpd_enable_ftp_server 1 -P

20. Las políticas/aplicaciones de SELinux pueden contener errores, incluyendo:

  • Rutas de código inusuales
  • Configuraciones
  • Redirección de stdout
  • Filtraciones de descriptores de archivos
  • Memoria ejecutable
  • Bibliotecas mal construidas

Abra tickets (no envíe reportes a Bugzilla; no hay SLA en Bugzilla).

21. Su información puede estar comprometida, si tiene dominios restringidos que intentan:

  • Cargar módulos del núcleo
  • Deshabilitar el modo enforced de SELinux
  • Escribir en etc_t/shadow_t
  • Modificar reglas de iptables

22. Herramientas de SELinux para el desarrollo de módulos de políticas:

# yum -y install setroubleshoot setroubleshoot-server

Reinicie o reinicie auditd después de la instalación.

23. desde cualquier lugar del mundo. Es la solución ideal para crear una oficina en la nube, donde todos los programas y datos de los empleados están en un entorno seguro

journalctl

para mostrar la lista de todos los logs relacionados con setroubleshoot:

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

24. desde cualquier lugar del mundo. Es la solución ideal para crear una oficina en la nube, donde todos los programas y datos de los empleados están en un entorno seguro journalctl para mostrar la lista de todos los logs relacionados con una etiqueta SELinux específica. Por ejemplo:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Al producirse un error de SELinux, use el log setroubleshoot con sugerencias sobre varias soluciones posibles.
Por ejemplo, de journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux está impidiendo que httpd acceda a getattr en el archivo /var/www/html/index.html. Para obtener el mensaje completo, ejecute: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux está impidiendo que httpd acceda a getattr en el archivo /var/www/html/index.html.

***** Plugin restorecon (99.5 confianza) sugiere ************************

Si desea corregir la etiqueta,
la etiqueta predeterminada de /var/www/html/index.html debería ser httpd_syscontent_t.
Luego puede restaurar con restorecon.
Hacer
# /sbin/restorecon -v /var/www/html/index.html

26. Registro: SELinux registra información en muchos lugares:

  • /var/log/messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Registro: búsqueda de errores de SELinux en el log de auditoría:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Para encontrar mensajes de la caché de vectores de acceso de SELinux (AVC) para un servicio específico:

# ausearch -m avc -c httpd

29. Utilidad audit2allow recopila información de los logs de operaciones denegadas y luego genera reglas de política de permisos de SELinux. Por ejemplo:

  • Para crear una descripción legible de la razón de la denegación de acceso: # audit2allow -w -a
  • Para ver una regla de aplicación obligatoria de tipos que permite el acceso denegado: # audit2allow -a
  • Para crear un módulo personalizado: # audit2allow -a -M mypolicy
  • La opción -M crea un archivo de aplicación obligatoria de tipo (.te) con el nombre especificado y compila la regla en un paquete de política (.pp): mypolicy.pp mypolicy.te
  • Para instalar un módulo personalizado: # semodule -i mypolicy.pp

30. Para configurar un proceso (dominio) específico para funcionar en modo permissive: # semanage permissive -a httpd_t

31. Si ya no desea que el dominio sea permissive: # semanage permissive -d httpd_t

32. Para deshabilitar todos los dominios permissive: # semodule -d permissivedomains

33. Habilitación de la política MLS de SELinux: # yum install selinux-policy-mls
en etcselinuxconfig:

SELINUX=permissive
SELINUXTYPE=mls

Asegúrese de que SELinux esté funcionando en modo permissive: # setenforce 0
Use el script fixfiles, para garantizar que los archivos serán reetiquetados en el próximo reinicio:

# fixfiles -F onboot # reboot

34. Crear un usuario con un rango específico de MLS: # useradd -Z staff_u john

Usando el comando useradd, asocie un nuevo usuario con un usuario existente de SELinux (en este caso, staff_u).

35. Para ver la correspondencia entre los 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 en el directorio personal del usuario (si es necesario): # chcon -R -l s2:c100 /home/john

38. Para ver las categorías actuales: # chcat -L

39. Para modificar categorías o comenzar a crear las suyas propias, modifique el archivo de la siguiente manera:

\/etc\/selinux\/_<selinuxtype>_\/setrans.conf

40. Para ejecutar un comando o script en un archivo específico, rol y contexto de usuario:

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

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

41. Contenedores que funcionan con SELinux deshabilitado:

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

42. Si necesitas otorgar al contenedor acceso completo al sistema:

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

Y ahora ya conoces la respuesta. Así que, por favor: no entres en pánico y activa SELinux.

Enlaces:

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster