Ghid pentru administratorii de sistem despre SELinux: 42 de răspunsuri la întrebări importante

Traducerea articolului a fost pregătită special pentru studenții cursului „Administrator Linux”.

Ghid pentru administratorii de sistem despre SELinux: 42 de răspunsuri la întrebări importante

Aici veți găsi răspunsuri la întrebările importante despre viață, univers și tot așa, în Linux cu o securitate îmbunătățită.

„Adevărul important este că lucrurile nu sunt întotdeauna așa cum par, lucru cunoscut…"

― Douglas Adams, Ghidul autostopistului prin galaxie

Securitate. Creșterea fiabilității. Conformitate. Politică. Cei patru călăreți ai Apocalipsei administratorului de sistem. În plus față de sarcinile noastre zilnice - monitorizare, backup, implementare, configurare, actualizare etc. - suntem, de asemenea, responsabili pentru securitatea sistemelor noastre. Chiar și a acelora în care furnizorul terț ne recomandă să dezactivăm securitatea îmbunătățită. Este ca și cum am lucra Ethan Hunt din "Misiune: Imposibilă".

Aflat în fața acestei dileme, unii administratori de sistem decid să ia pastila albastră, pentru că ei cred că nu vor afla niciodată răspunsul la marele întreb despre viață, univers și tot așa. Și, așa cum știm cu toții, acest răspuns este 42.

În spiritul „Ghidului autostopistului prin galaxie”, aici sunt 42 de răspunsuri la întrebările importante despre gestionarea și utilizarea SELinux în sistemele dumneavoastră.

1. SELinux este un sistem de control al accesului obligatoriu, ceea ce înseamnă că fiecare proces are o etichetă (lable). Fiecare fișier, director și obiect de sistem de asemenea au etichete. Regulile politicii controlează accesul între procesele și obiectele etichetate. Kernelul asigură respectarea acestor reguli.

2. Cele două concepte cele mai importante sunt: Etichetarea — etichetarea (fișiere, procese, porturi etc.) și Impunerea tipului (care izolează procesele unele de altele pe baza tipurilor).

3. Formatul corect al etichetei user:role:type:level (opțional).

4. Scopul asigurării securității multilaterale (Multi-Level Security — MLS) este de a gestiona procesele (domeniile) pe baza nivelului de securitate al datelor pe care le vor folosi. De exemplu, un proces secret nu poate citi date ultra-secrete.

5. Asigurarea securității multicategoriale (Multi-Category Security — MCS) protejează procese asemănătoare unele de altele (de exemplu, mașini virtuale, mecanisme OpenShift, sandbox-uri SELinux, containere etc.).

6. Parametrii kernelului pentru schimbarea modurilor SELinux la boot:

  • autorelabel=1 → forțează sistemul să ruleze re-etichetați
  • selinux=0 → kernelul nu încarcă infrastructura SELinux
  • enforcing=0 → bootare în mod permisiv

7. Dacă trebuie să reetichetați întregul sistem:

# touch /.autorelabel
#reboot

Dacă etichetarea sistemului conține multe erori, este posibil să fie necesar să încărcați în modul permissive pentru ca reetichetarea să aibă succes.

8. Pentru a verifica dacă SELinux este activat: # getenforce

9. Pentru a activa/dezactiva temporar SELinux: # setenforce [1|0]

10. Verificarea stării SELinux: # sestatus

11. Fișier de configurare: /etc/selinux/config

12. Cum funcționează SELinux? Iată un exemplu de etichetare pentru serverul web Apache:

  • Reprezentare binară: /usr/sbin/httpd→httpd_exec_t
  • Director de configurare: /etc/httpd→httpd_config_t
  • Director de fișiere jurnal: /var/log/httpd → httpd_log_t
  • Director de conținut: /var/www/html → httpd_sys_content_t
  • Script de pornire: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Porturi: 80/tcp, 443/tcp → httpd_t, http_port_t

Un proces care rulează în contextul httpd_t, poate interacționa cu un obiect etichetat httpd_something_t.

13. Multe comenzi acceptă argumentul -Z pentru vizualizarea, crearea și modificarea contextului:

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

Contextele sunt stabilite atunci când fișierele sunt create pe baza contextului directorului părinte (cu câteva excepții). RPM pot stabili contextele în timpul instalării.

14. Există patru motive principale pentru erorile SELinux, descrise mai detaliat în punctele 15-21 de mai jos:

  • Probleme de etichetare
  • Din cauza a ceva ce SELinux trebuie să știe
  • Eroare în politica/aplicația SELinux
  • Informațiile dumneavoastră pot fi compromise

15. Problema de etichetare: dacă fișierele dumneavoastră sunt /srv/myweb etichetate greșit, accesul poate fi interzis. Iată câteva metode de a remedia asta:

  • Dacă știți eticheta:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Dacă știți un fișier cu etichetare echivalentă:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Restaurând contextul (pentru ambele cazuri):
    # restorecon -vR /srv/myweb

16. Problema de etichetare: dacă mutați un fișier în loc să-l copiați, fișierul va păstra contextul său inițial. Pentru a remedia această problemă:

  • Schimbați comanda de context cu eticheta:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Schimbați comanda de context cu eticheta referinței:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Restaurati contextul (pentru ambele cazuri): # restorecon -vR /var/www/html/

17. Dacă SELinux trebuie să știe, că HTTPD ascultă pe portul 8585, informați SELinux:

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

18. SELinux trebuie să știe valori logice care permit modificarea unor părți ale politicii SELinux în timpul execuției fără a cunoaște despre rescrierea politicii SELinux. De exemplu, dacă doriți ca httpd să trimită e-mail, introduceți: # setsebool -P httpd_can_sendmail 1

19. SELinux trebuie să știe valori logice de activare/dezactivare a setărilor SELinux:

  • Pentru a vedea toate valorile logice: # getsebool -a
  • Pentru a vedea descrierea fiecărei: # semanage boolean -l
  • Pentru a stabili o valoare logică: # setsebool [_boolean_] [1|0]
  • Pentru o setare permanentă adăugați -P. De exemplu: # setsebool httpd_enable_ftp_server 1 -P

20. Politicile/aplicațiile SELinux pot conține erori, inclusiv:

  • Cărți de cod neobișnuite
  • Configurări
  • Redirecționare stdout
  • Scurgeri de descriptor de fișier
  • Memorie executabilă
  • Biblioteci prost construite

Deschideți tichete (nu trimiteți un raport în Bugzilla; nu există SLA în Bugzilla).

21. Informațiile dumneavoastră pot fi compromise, dacă aveți domenii limitate care încearcă:

  • Să încarce modulele nucleului
  • Să dezactiveze modul enforce SELinux
  • Să scrie în etc_t/shadow_t
  • Să schimbe regulile iptables

22. Instrumente SELinux pentru dezvoltarea modulelor de politici:

# yum -y install setroubleshoot setroubleshoot-server

Reporniți sau reporniti auditd după instalare.

23. Windows VPS pentru lucru la distanță

journalctl

pentru a lista toate jurnalele asociate cu setroubleshoot:

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

24. Windows VPS pentru lucru la distanță journalctl pentru a lista toate jurnalele asociate cu o anumită etichetă SELinux. De exemplu:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. În caz de eroare SELinux, folosiți jurnalul setroubleshoot cu sugestii despre posibile soluții.
De exemplu, din journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux împiedică httpd de la accesarea atributelor fișierului /var/www/html/index.html. Pentru un mesaj complet rulați: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux împiedică httpd de la accesarea atributelor fișierului /var/www/html/index.html.

***** Plugin restorecon (99.5 încredere) sugerează ************************

Dacă doriți să corectați eticheta,
/var/www/html/index.html ar trebui să aibă eticheta implicită httpd_syscontent_t.
Apoi, puteți rula restorecon.
Faceți
# /sbin/restorecon -v /var/www/html/index.html

26. Jurnalizare: SELinux înregistrează informații în multe locuri:

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

27. Jurnalizare: căutarea erorilor SELinux în jurnalul auditului:

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

28. Pentru a găsi mesajele SELinux Access Vector Cache (AVC) pentru un anumit serviciu:

# ausearch -m avc -c httpd

29. Utilitarul audit2allow colectează informații din jurnalele operațiunilor interzise și apoi generează reguli de politică pentru permisiunile SELinux. De exemplu:

  • Pentru a crea o descriere ușor de citit a motivului refuzului de acces: # audit2allow -w -a
  • Pentru a vizualiza regula de aplicare forțată a tipurilor care permite accesul interzis: # audit2allow -a
  • Pentru a crea un modul personalizat: # audit2allow -a -M mypolicy
  • Opțiune -M creează un fișier de aplicare forțată a tipului (.te) cu numele specificat și compilează regula într-un pachet de politică (.pp): mypolicy.pp mypolicy.te
  • Pentru a instala un modul personalizat: # semodule -i mypolicy.pp

30. Pentru a configura un proces (domeniu) distinct pentru a funcționa în modul permissive: # semanage permissive -a httpd_t

31. Dacă nu doriți ca domeniul să fie permissive: # semanage permissive -d httpd_t

32. Pentru a dezactiva toate domeniile permissive: # semodule -d permissivedomains

33. Activarea politicii MLS SELinux: # yum install selinux-policy-mls
în /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Asigurați-vă că SELinux funcționează în modul permissive: # setenforce 0
Utilizați scriptul fixfiles, pentru a garanta că fișierele vor fi reetichettate la următoarea repornire:

# fixfiles -F onboot # reboot

34. Creați un utilizator cu un anumit interval MLS: # useradd -Z staff_u john

Folosind comanda useradd, asociați un nou utilizator cu un utilizator existent SELinux (în acest caz, staff_u).

35. Pentru a vizualiza corespondența între utilizatorii SELinux și Linux: # semanage login -l

36. Definiți un anumit interval pentru utilizator: # semanage login --modify --range s2:c100 john

37. Pentru a corecta eticheta din directorul home al utilizatorului (dacă este necesar): # chcon -R -l s2:c100 /home/john

38. Pentru a vizualiza categoriile curente: # chcat -L

39. Pentru a modifica categoriile sau pentru a începe să creați propriile, modificați fișierul în următorul mod:

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

40. Pentru a rula o comandă sau un script într-un anumit fișier, rol și context de utilizator:

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

  • -t contextul fișierului
  • -r contextul rolului
  • -u contextul utilizatorului

41. Containere care rulează cu SELinux dezactivat:

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

42. Dacă trebuie să oferiți containerului acces complet la sistem:

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

Și acum deja știți răspunsul. Așadar, vă rog: nu vă panicați și activați SELinux.

Linkuri:

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster