Folla de trucos de SELinux para administradores de sistemas: 42 respostas a preguntas importantes

A tradución do artigo foi elaborada expresamente para o alumnado do curso "Administrador Linux".

Folla de trucos de SELinux para administradores de sistemas: 42 respostas a preguntas importantes

Aquí obterás respostas a preguntas importantes sobre a vida, o universo e todo en Linux cunha seguridade mellorada.

"A verdade importante de que as cousas non sempre son o que parecen é de coñecemento común..."

-Douglas Adams, A guía do autoestopista da galaxia

Seguridade. Aumento da fiabilidade. Correspondencia. Política. Administrador do sistema Catro cabaleiros do Apocalipse. Ademais das nosas tarefas diarias -seguimento, copia de seguridade, implantación, configuración, actualización, etc.- tamén somos responsables da seguridade dos nosos sistemas. Incluso aqueles sistemas nos que o provedor externo recomenda que desactivemos a seguridade mellorada. Parece traballo Ethan Hunt de "Misión: imposible".

Ante este dilema, algúns administradores do sistema deciden tomar pastilla azul, porque pensan que nunca coñecerán a resposta á gran pregunta da vida, o universo e todo iso. E como todos sabemos, esa resposta é 42.

No espírito da Guía do autoestopista da galaxia, aquí tes 42 respostas a preguntas importantes sobre control e uso. SELinux nos seus sistemas.

1. SELinux é un sistema de control de acceso forzado, o que significa que cada proceso ten unha etiqueta. Cada ficheiro, directorio e obxecto do sistema tamén ten etiquetas. As regras de políticas controlan o acceso entre os procesos e obxectos etiquetados. O núcleo fai cumprir estas regras.

2. Os dous conceptos máis importantes son: Etiquetado — marcas (arquivos, procesos, portos, etc.) e Tipo de execución (que illa os procesos entre si en función dos tipos).

3. Formato de etiqueta correcto user:role:type:level (опционально).

4. O propósito de proporcionar seguridade multinivel (Seguridade multinivel - MLS) é xestionar procesos (dominios) en función do nivel de seguridade dos datos que utilizarán. Por exemplo, un proceso secreto non pode ler datos de alto segredo.

5. Garantir a seguridade de varias categorías (Seguridade multicategoría - MCS) protexe procesos similares entre si (por exemplo, máquinas virtuais, motores OpenShift, sandbox SELinux, contedores, etc.).

6. Opcións do núcleo para cambiar os modos de SELinux no arranque:

  • autorelabel=1 → заставляет систему запускать перемаркировку
  • selinux=0 → o núcleo non carga a infraestrutura SELinux
  • enforcing=0 → cargando en modo permisivo

7. Se precisa reetiquetar todo o sistema:

# touch /.autorelabel
#reboot

Se a marcación do sistema contén un gran número de erros, é posible que necesites arrancar en modo permisivo para que a observación teña éxito.

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

9. Para activar/desactivar temporalmente SELinux: # setenforce [1|0]

10. Comprobando o estado de SELinux: # sestatus

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

12. Como funciona SELinux? Aquí tes un exemplo de marcado para o servidor web Apache:

  • Representación binaria: /usr/sbin/httpd→httpd_exec_t
  • Directorio de configuración: /etc/httpd→httpd_config_t
  • Directorio do ficheiro de rexistro: /var/log/httpd → httpd_log_t
  • Directorio de contidos: /var/www/html → httpd_sys_content_t
  • Script de lanzamento: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proceso: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Portos: 80/tcp, 443/tcp → httpd_t, http_port_t

Процесс, запущенный в контексте httpd_t, pode interactuar cun obxecto etiquetado httpd_something_t.

13. Moitos comandos aceptan un argumento -Z para ver, crear e cambiar o contexto:

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

Os contextos establécense cando se crean ficheiros en función do contexto do seu directorio principal (con algunhas excepcións). Os RPM poden establecer contextos como durante a instalación.

14. Hai catro causas principais dos erros de SELinux, que se describen con máis detalle nos puntos 15-21 a continuación:

  • Problemas de etiquetaxe
  • Por algo que SELinux necesita saber
  • Erro na política/aplicación de SELinux
  • A túa información pode estar comprometida

15. Problema de etiquetaxe: se os seus ficheiros están en /srv/myweb están marcados incorrectamente, o acceso pode ser denegado. Aquí tes algunhas formas de solucionar isto:

  • Se coñeces a etiqueta:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Se coñeces un ficheiro con marcas equivalentes:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restauración do contexto (para ambos os casos):
    # restorecon -vR /srv/myweb

16. Problema de etiquetaxe: se moves o ficheiro en lugar de copialo, o ficheiro conservará o seu contexto orixinal. Para solucionar este problema:

  • Cambia o comando de contexto coa etiqueta:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Cambia o comando de contexto coa etiqueta da ligazón:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Restaura o contexto (en ambos casos): # restorecon -vR /var/www/html/

17. Se SELinux que necesitas saberque HTTPD está escoitando no porto 8585, diga a SELinux:

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

18. SELinux que necesitas saber Valores booleanos que permiten cambiar partes da política de SELinux en tempo de execución sen que se sobrescriba a política de SELinux. Por exemplo, se desexa que httpd envíe correo electrónico, introduza: # setsebool -P httpd_can_sendmail 1

19. SELinux que necesitas saber valores lóxicos para activar/desactivar a configuración de SELinux:

  • Para ver todos os valores booleanos: # getsebool -a
  • Para ver unha descrición de cada un: # semanage boolean -l
  • Para establecer un valor booleano: # setsebool [_boolean_] [1|0]
  • Para unha instalación permanente, engade -P. Por exemplo: # setsebool httpd_enable_ftp_server 1 -P

20. As políticas/aplicacións de SELinux poden conter erros, incluíndo:

  • Camiños de código pouco habituais
  • Configuracións
  • Redirixindo stdout
  • Fugas de descritores de ficheiros
  • Memoria executable
  • Bibliotecas mal construídas

Tickets abertos (non envíe un informe a Bugzilla; Bugzilla non ten SLA).

21. A túa información pode estar comprometidase tes dominios restrinxidos intentando:

  • Загрузить модули ядра
  • Desactivar o modo SELinux forzado
  • Escribe a etc_t/shadow_t
  • Cambiar as regras de iptables

22. Ferramentas de SELinux para desenvolver módulos de políticas:

# yum -y install setroubleshoot setroubleshoot-server

Reinicie ou reinicie auditd despois da instalación.

23. Usar

journalctl

para mostrar unha lista de todos os rexistros asociados setroubleshoot:

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

24. Usar journalctl para listar todos os rexistros asociados cunha etiqueta SELinux específica. Por exemplo:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Se se produce un erro de SELinux, use o rexistro setroubleshoot ofrecendo varias solucións posibles.
Por exemplo, 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. Rexistro: SELinux rexistra información en moitos lugares:

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

27. Rexistro: busca de erros de SELinux no rexistro de auditoría:

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

28. Para atopar mensaxes de caché vectorial de acceso (AVC) de SELinux para un servizo específico:

# ausearch -m avc -c httpd

29. Utilidade audit2allow recolle información dos rexistros de operacións prohibidas e despois xera regras de política de permisos de SELinux. Por exemplo:

  • Para crear unha descrición lexible por humanos de por que se denega o acceso: # audit2allow -w -a
  • Para ver unha regra de aplicación de tipos que permite o acceso denegado: # audit2allow -a
  • Para crear un módulo personalizado: # audit2allow -a -M mypolicy
  • Opción -M crea un ficheiro de aplicación de tipo (.te) co nome especificado e compila a regra nun 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 que funcione en modo permisivo: # semanage permissive -a httpd_t

31. Se xa non queres que o dominio sexa permisivo: # semanage permissive -d httpd_t

32. Para desactivar todos os dominios permisivos: # semodule -d permissivedomains

33. Activación da política MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Asegúrate de que SELinux estea funcionando en modo permisivo: # setenforce 0
Используйте скрипт fixfiles, чтобы гарантировать, что файлы будут перемаркированы при следующей перезагрузке:

# fixfiles -F onboot # reboot

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

Usando o comando useradd, mapee o novo usuario a un usuario SELinux existente (neste caso, staff_u).

35. Para ver o mapeo entre usuarios de SELinux e Linux: # semanage login -l

36. Defina un rango específico para o usuario: # semanage login --modify --range s2:c100 john

37. Para corrixir a etiqueta do directorio de inicio do usuario (se é necesario): # chcon -R -l s2:c100 /home/john

38. Для просмотра текущих категорий: # chcat -L

39. Para cambiar de categoría ou comezar a crear a túa, edita o ficheiro do seguinte xeito:

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

40. Para executar un comando ou un script nun ficheiro, rol e contexto de usuario específicos:

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

  • -t contexto do ficheiro
  • -r contexto de rol
  • -u contexto de usuario

41. Contedores que se executan con SELinux desactivado:

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

42. Se precisas dar ao contedor acceso total ao sistema:

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

E agora xa sabes a resposta. Entón, por favor: non se asuste e active SELinux.

Referencias:

Fonte: www.habr.com

Engadir un comentario