Full de trucs de SELinux per a administradors de sistemes: 42 respostes a preguntes importants

La traducció de l'article s'ha elaborat expressament per als alumnes del curs "Administrador Linux".

Full de trucs de SELinux per a administradors de sistemes: 42 respostes a preguntes importants

Aquí obtindreu respostes a preguntes importants sobre la vida, l'univers i tot a Linux amb seguretat millorada.

"La veritat important que les coses no sempre són el que semblen és de coneixement comú..."

-Douglas Adams, La guia de l'autoestopista de la galàxia

Seguretat. Augment de la fiabilitat. Correspondència. Política. Administrador del sistema Quatre genets de l'Apocalipsi. A més de les nostres tasques diàries -vigilància, còpia de seguretat, implementació, configuració, actualització, etc.- també som responsables de la seguretat dels nostres sistemes. Fins i tot aquells sistemes en què el proveïdor extern recomana que desactivem la seguretat millorada. Sembla una feina Ethan Hunt de "Missió: Impossible".

Davant d'aquest dilema, alguns administradors del sistema decideixen prendre pastilla blava, perquè pensen que mai sabran la resposta a la gran pregunta de la vida, l'univers i tot això. I com tots sabem, aquesta resposta és 42.

En l'esperit de La guia de l'autoestopista de la galàxia, aquí hi ha 42 respostes a preguntes importants sobre control i ús. SELinux als vostres sistemes.

1. SELinux és un sistema de control d'accés forçat, el que significa que cada procés té una etiqueta. Cada fitxer, directori i objecte del sistema també té etiquetes. Les regles de política controlen l'accés entre els processos i objectes etiquetats. El nucli fa complir aquestes regles.

2. Els dos conceptes més importants són: Etiquetatge — marques (fitxers, processos, ports, etc.) i Tipus d'execució (que aïlla els processos entre si en funció dels tipus).

3. Format d'etiqueta correcte user:role:type:level (opcional).

4. El propòsit de proporcionar seguretat a diversos nivells (Seguretat multinivell - MLS) és gestionar processos (dominis) en funció del nivell de seguretat de les dades que utilitzaran. Per exemple, un procés secret no pot llegir dades secretes.

5. Garantir la seguretat multicategoria (Seguretat multicategoria - MCS) protegeix processos similars entre si (per exemple, màquines virtuals, motors OpenShift, sandbox SELinux, contenidors, etc.).

6. Opcions del nucli per canviar els modes de SELinux a l'arrencada:

  • autorelabel=1 → fa que el sistema executi el reetiquetatge
  • selinux=0 → el nucli no carrega la infraestructura SELinux
  • enforcing=0 → càrrega en mode permissiu

7. Si necessiteu reetiquetar tot el sistema:

# touch /.autorelabel
#reboot

Si el marcatge del sistema conté un gran nombre d'errors, és possible que hàgiu d'arrencar en mode permissiu perquè el comentari tingui èxit.

8. Per comprovar si SELinux està habilitat: # getenforce

9. Per habilitar/desactivar temporalment SELinux: # setenforce [1|0]

10. Comprovació de l'estat de SELinux: # sestatus

11. Fitxer de configuració: /etc/selinux/config

12. Com funciona SELinux? Aquí teniu un exemple de marcatge per al servidor web Apache:

  • Representació binària: /usr/sbin/httpd→httpd_exec_t
  • Directori de configuració: /etc/httpd→httpd_config_t
  • Directori del fitxer de registre: /var/log/httpd → httpd_log_t
  • Directori de continguts: /var/www/html → httpd_sys_content_t
  • Guió de llançament: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Procés: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Ports: 80/tcp, 443/tcp → httpd_t, http_port_t

Procés que s'executa en context httpd_t, pot interactuar amb un objecte etiquetat httpd_something_t.

13. Moltes ordres accepten un argument -Z per veure, crear i canviar el context:

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

Els contextos s'estableixen quan es creen fitxers en funció del context del seu directori principal (amb algunes excepcions). Els RPM poden establir contextos com durant la instal·lació.

14. Hi ha quatre causes principals dels errors de SELinux, que es descriuen amb més detall als punts 15-21 següents:

  • Problemes d'etiquetatge
  • Per alguna cosa que SELinux necessita saber
  • Error a la política/aplicació SELinux
  • La vostra informació pot estar compromesa

15. Problema d'etiquetatge: si els vostres fitxers estan a /srv/myweb estan marcats incorrectament, es pot denegar l'accés. Aquí hi ha algunes maneres de solucionar-ho:

  • Si coneixeu l'etiqueta:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Si coneixeu un fitxer amb marques equivalents:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restauració del context (per als dos casos):
    # restorecon -vR /srv/myweb

16. Problema d'etiquetatge: si moveu el fitxer en lloc de copiar-lo, el fitxer conservarà el seu context original. Per solucionar aquest problema:

  • Canvieu l'ordre de context amb l'etiqueta:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Canvieu l'ordre de context amb l'etiqueta d'enllaç:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Restaura el context (per als dos casos): # restorecon -vR /var/www/html/

17. Si SELinux que necessites saberque HTTPD està escoltant al port 8585, digueu a SELinux:

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

18. SELinux que necessites saber Valors booleans que permeten canviar parts de la política SELinux en temps d'execució sense que s'hagi sobreescriu la política SELinux. Per exemple, si voleu que httpd enviï correu electrònic, introduïu: # setsebool -P httpd_can_sendmail 1

19. SELinux que necessites saber valors lògics per activar/desactivar la configuració de SELinux:

  • Per veure tots els valors booleans: # getsebool -a
  • Per veure una descripció de cadascun: # semanage boolean -l
  • Per establir un valor booleà: # setsebool [_boolean_] [1|0]
  • Per a una instal·lació permanent, afegiu -P. Per exemple: # setsebool httpd_enable_ftp_server 1 -P

20. Les polítiques/aplicacions de SELinux poden contenir errors, com ara:

  • Camins de codi inusuals
  • Configuracions
  • Redirigint stdout
  • Fuites de descriptors de fitxers
  • Memòria executable
  • Biblioteques mal construïdes

Entrades obertes (no envieu cap informe a Bugzilla; Bugzilla no té SLA).

21. La vostra informació pot estar compromesasi teniu dominis restringits intentant:

  • Carregueu els mòduls del nucli
  • Desactiveu el mode SELinux forçat
  • Escriu a etc_t/shadow_t
  • Canvia les regles d'iptables

22. Eines SELinux per desenvolupar mòduls de polítiques:

# yum -y install setroubleshoot setroubleshoot-server

Reinicieu o reinicieu auditd després de la instal·lació.

23. ús

journalctl

per mostrar una llista de tots els registres associats setroubleshoot:

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

24. ús journalctl per llistar tots els registres associats a una etiqueta SELinux específica. Per exemple:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Si es produeix un error de SELinux, utilitzeu el registre setroubleshoot oferint diverses solucions possibles.
Per exemple, 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. Registre: SELinux registra informació en molts llocs:

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

27. Registre: cerca d'errors de SELinux al registre d'auditoria:

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

28. Per trobar missatges de SELinux Access Vector Cache (AVC) per a un servei específic:

# ausearch -m avc -c httpd

29. Utilitat audit2allow recopila informació dels registres d'operacions prohibides i després genera regles de política de permisos de SELinux. Per exemple:

  • Per crear una descripció llegible per les persones de per què es denega l'accés: # audit2allow -w -a
  • Per veure una regla d'aplicació de tipus que permet l'accés denegat: # audit2allow -a
  • Per crear un mòdul personalitzat: # audit2allow -a -M mypolicy
  • Opció -M crea un fitxer d'aplicació de tipus (.te) amb el nom especificat i compila la regla en un paquet de polítiques (.pp): mypolicy.pp mypolicy.te
  • Per instal·lar un mòdul personalitzat: # semodule -i mypolicy.pp

30. Per configurar un procés separat (domini) perquè funcioni en mode permissiu: # semanage permissive -a httpd_t

31. Si ja no voleu que el domini sigui permissiu: # semanage permissive -d httpd_t

32. Per desactivar tots els dominis permissius: # semodule -d permissivedomains

33. Habilitació de la política MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Assegureu-vos que SELinux s'està executant en mode permissiu: # setenforce 0
Utilitzeu un guió fixfilesper assegurar-vos que els fitxers es tornen a etiquetar en el proper reinici:

# fixfiles -F onboot # reboot

34. Creeu un usuari amb un rang MLS específic: # useradd -Z staff_u john

Utilitzant l'ordre useradd, assigneu el nou usuari a un usuari SELinux existent (en aquest cas, staff_u).

35. Per veure el mapeig entre els usuaris de SELinux i Linux: # semanage login -l

36. Definiu un interval específic per a l'usuari: # semanage login --modify --range s2:c100 john

37. Per corregir l'etiqueta del directori inicial de l'usuari (si cal): # chcon -R -l s2:c100 /home/john

38. Per veure les categories actuals: # chcat -L

39. Per canviar de categories o començar a crear-ne una, editeu el fitxer de la següent manera:

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

40. Per executar una ordre o un script en un fitxer, una funció i un context d'usuari específics:

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

  • -t context del fitxer
  • -r context de rol
  • -u context d'usuari

41. Contenidors que s'executen amb SELinux desactivat:

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

42. Si necessiteu donar al contenidor accés complet al sistema:

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

I ara ja saps la resposta. Així que si us plau: no us espanteu i activeu SELinux.

Enllaços:

Font: www.habr.com

Afegeix comentari