Hoja de trucos del administrador del sistema SELinux: 42 respuestas a preguntas importantes

Se preparó una traducción del artículo específicamente para estudiantes del curso de Administrador de Linux .




Aquí obtendrá respuestas a preguntas importantes sobre la vida, el universo y todo eso en Linux con seguridad mejorada.

"La verdad importante es que las cosas no siempre son lo que parecen ser bien conocidas ..."

―Douglas Adams, La guía del autoestopista galáctico

Seguridad Mejora de la fiabilidad. Cumplimiento Política 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 en los que un proveedor externo recomienda que desactivemos la seguridad mejorada. Esto es similar al trabajo de Ethan Hunt de Mission Impossible.

Ante este dilema, algunos administradores de sistemas deciden tomar la píldora 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, esta respuesta es 42.

En el espíritu de la "Guía del autoestopista galáctico", aquí hay 42 respuestas a preguntas importantes sobre cómo administrar y usar 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: etiquetado : etiquetado (archivos, procesos, puertos, etc.) y aplicación de tipo (que aísla los procesos entre sí en función de los tipos).

3. El formato de etiqueta correcto es user:role:type:level (opcional).

4. El objetivo de proporcionar seguridad multinivel (MLS ) es administrar procesos (dominios) en función del nivel de seguridad de los datos que utilizarán. Por ejemplo, un proceso secreto no puede leer datos de alto secreto.

5. Garantizar la seguridad de múltiples categorías (MCS ) protege procesos similares entre sí (por ejemplo, máquinas virtuales, mecanismos OpenShift, cajas de arena SELinux, contenedores, etc.).

6. Parámetros del núcleo para cambiar los modos SELinux en el arranque:

  • autorelabel=1 obliga al sistema a comenzar a volver a marcar
  • selinux=0 núcleo no carga la infraestructura SELinux
  • enforcing=0 carga en modo permisivo

7. Si necesita volver a marcar todo el sistema:

# touch /.autorelabel
#reboot


Si la marca del sistema contiene una gran cantidad de errores, es posible que deba iniciar en modo permisivo para que la marca tenga éxito.

8. Para verificar 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? 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 del archivo de registro: /var/log/httpd → httpd_log_t
  • Directorio de contenido: /var/www/html → httpd_sys_content_t
  • Lanzar script: /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

Un proceso que se ejecuta en el contexto de httpd_t puede interactuar con un objeto etiquetado httpd_something_t .

13. Muchos comandos aceptan el argumento -Z para ver, crear y cambiar el 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. Existen cuatro causas principales de errores de SELinux, que se describen con más detalle en los párrafos 15-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 con el marcado : si sus archivos en /srv/myweb marcados incorrectamente, el acceso puede ser denegado. Aquí hay algunas formas de solucionar esto:

  • 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
  • Habiendo restaurado el contexto (para ambos casos):
    # restorecon -vR /srv/myweb

16. El problema con el marcado: si mueve el archivo en lugar de copiarlo, el archivo conservará su contexto original. Para solucionar este problema:

  • Cambie el comando de contexto etiquetado:
    # 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
  • Restaure el contexto (para ambos casos): # restorecon -vR /var/www/html/

17. Si SELinux necesita saber que HTTPD está escuchando en el puerto 8585, dígale a SELinux:

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

18. SELinux necesita conocer los valores booleanos que le permiten cambiar partes de la política de SELinux en tiempo de ejecución sin conocimiento de reescribir las políticas de SELinux. Por ejemplo, si desea que httpd envíe un correo electrónico, ingrese: # setsebool -P httpd_can_sendmail 1

19. SELinux necesita conocer los 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:

  • Caminos de código de fantasía
  • Configuraciones
  • Redireccionar stdout
  • El descriptor de archivo tiene fugas
  • Memoria ejecutable
  • Bibliotecas mal construidas

Entradas abiertas (no envíe un informe a Bugzilla; no hay SLA en Bugzilla).

21. Su información puede verse comprometida si tiene dominios limitados que intentan:

  • Descargar módulos del kernel
  • Deshabilitar el modo SELinux forzado
  • Escribe en etc_t/shadow_t
  • Cambiar las reglas de iptables

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

# yum -y install setroubleshoot setroubleshoot-server

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

23. Uso
 journalctl 
para enumerar todos los registros asociados con setroubleshoot :

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

24. Use journalctl para enumerar todos los registros asociados con una etiqueta SELinux particular. Por ejemplo:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Si se produce un error de SELinux, use el registro de setroubleshoot con algunas 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/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Registro: busque 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. La 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 del motivo del acceso denegado: # audit2allow -w -a
  • Para ver una regla de cumplimiento de tipo 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 cumplimiento de tipo (.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 separado (dominio) para trabajar en modo permisivo: # semanage permissive -a httpd_t

31. Si ya no desea 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
# yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls


Asegúrese de que SELinux esté en modo permisivo: # setenforce 0
Use el script de archivos de fixfiles para asegurarse de que los archivos se vuelvan a marcar durante el próximo reinicio:

# fixfiles -F onboot # reboot

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

Con el comando useradd , staff_u el nuevo usuario al 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 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 las categorías o comenzar a crear las suyas, edite el archivo de la siguiente manera:

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

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

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

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

41. Contenedores que trabajan con SELinux deshabilitado:

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

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

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

Y ahora ya sabes la respuesta. Por lo tanto, por favor: no entre en pánico y encienda SELinux.

Referencias


Source: https://habr.com/ru/post/484896/


All Articles