SELinux varalica za administratore sustava: 42 odgovora na važna pitanja

Prijevod članka pripremljen je posebno za studente kolegija "Linux administrator".

SELinux varalica za administratore sustava: 42 odgovora na važna pitanja

Ovdje ćete dobiti odgovore na važna pitanja o životu, svemiru i svemu u Linuxu uz poboljšanu sigurnost.

“Opće je poznata važna istina da stvari nisu uvijek onakve kakvima se čine...”

-Douglas Adams, Vodič kroz galaksiju za autostopere

Sigurnost. Povećana pouzdanost. Dopisivanje. Politika. Četiri jahača apokalipse sistemski administrator. Uz naše svakodnevne zadatke - nadzor, backup, implementacija, konfiguracija, ažuriranje itd. - odgovorni smo i za sigurnost naših sustava. Čak i oni sustavi za koje dobavljač treće strane preporučuje da onemogućimo poboljšanu sigurnost. Osjeća se kao posao Ethan Hunt iz filma "Nemoguća misija".

Suočeni s ovom dilemom, neki administratori sustava odlučuju uzeti plava pilula, jer misle da nikada neće znati odgovor na veliko pitanje života, svemira i svega toga. I kao što svi znamo, taj odgovor je 42.

U duhu Vodiča kroz galaksiju za autostopere, evo 42 odgovora na važna pitanja o kontroli i korištenju. Uklanjanje poteškoća na vašim sustavima.

1. SELinux je prisilni sustav kontrole pristupa, što znači da svaki proces ima oznaku. Svaka datoteka, direktorij i sistemski objekt također ima oznake. Pravila politike kontroliraju pristup između označenih procesa i objekata. Kernel provodi ova pravila.

2. Dva najvažnija koncepta su: označavanje — oznake (datoteke, procesi, portovi itd.) i Ovrha tipa (koji izolira procese jedne od drugih na temelju tipova).

3. Ispravan format naljepnice user:role:type:level (neobavezno).

4. Svrha pružanja sigurnosti na više razina (Višerazinska sigurnost - MLS) je upravljanje procesima (domenama) na temelju razine sigurnosti podataka koje će koristiti. Na primjer, tajni proces ne može čitati strogo povjerljive podatke.

5. Osiguravanje višekategorijske sigurnosti (Multi-Category Security - MCS) štiti slične procese jedan od drugog (na primjer, virtualne strojeve, OpenShift motore, SELinux sandboxe, spremnike itd.).

6. Opcije kernela za promjenu načina rada SELinuxa pri dizanju sustava:

  • autorelabel=1 → uzrokuje pokretanje sustava za ponovno označavanje
  • selinux=0 → kernel ne učitava SELinux infrastrukturu
  • enforcing=0 → učitavanje u dopuštenom načinu rada

7. Ako trebate ponovno označiti cijeli sustav:

# touch /.autorelabel
#reboot

Ako označavanje sustava sadrži velik broj pogrešaka, možda ćete se morati pokrenuti u dopuštenom načinu rada da bi označavanje uspjelo.

8. Da provjerite je li SELinux omogućen: # getenforce

9. Da biste privremeno omogućili/onemogućili SELinux: # setenforce [1|0]

10. Provjera SELinux statusa: # sestatus

11. Konfiguracijska datoteka: /etc/selinux/config

12. Kako radi SELinux? Ovdje je primjer označavanja za Apache web poslužitelj:

  • Binarno predstavljanje: /usr/sbin/httpd→httpd_exec_t
  • Konfiguracijski direktorij: /etc/httpd→httpd_config_t
  • Direktorij datoteke zapisnika: /var/log/httpd → httpd_log_t
  • Direktorij sadržaja: /var/www/html → httpd_sys_content_t
  • Pokretanje skripte: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Priključci: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces koji se izvodi u kontekstu httpd_t, može komunicirati s označenim objektom httpd_something_t.

13. Mnoge naredbe prihvaćaju argument -Z za pregled, stvaranje i promjenu konteksta:

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

Konteksti se uspostavljaju kada se datoteke kreiraju na temelju konteksta nadređenog direktorija (uz neke iznimke). RPM-ovi mogu uspostaviti kontekste kao tijekom instalacije.

14. Postoje četiri glavna uzroka SELinux pogrešaka, koji su detaljnije opisani u točkama 15-21 u nastavku:

  • Problemi s označavanjem
  • Zbog nečega što SELinux mora znati
  • Greška u politici/aplikaciji SELinuxa
  • Vaši podaci mogu biti ugroženi

15. Problem s označavanjem: ako su vaše datoteke unutra /srv/myweb su netočno označeni, pristup može biti odbijen. Evo nekoliko načina da to popravite:

  • Ako znate oznaku:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ako znate datoteku s ekvivalentnim oznakama:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Vraćanje konteksta (za oba slučaja):
    # restorecon -vR /srv/myweb

16. Problem s označavanjem: ako premjestite datoteku umjesto da je kopirate, datoteka će zadržati svoj izvorni kontekst. Da biste riješili ovaj problem:

  • Promijenite naredbu konteksta s oznakom:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Promijenite naredbu konteksta s oznakom veze:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Vratite kontekst (za oba slučaja): # restorecon -vR /var/www/html/

17. Ako SELinux morate znatida HTTPD sluša port 8585, recite SELinuxu:

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

18. SELinux morate znati Booleove vrijednosti koje dopuštaju promjenu dijelova SELinux politike tijekom izvođenja bez znanja o prepisivanju SELinux politike. Na primjer, ako želite da httpd šalje e-poštu, unesite: # setsebool -P httpd_can_sendmail 1

19. SELinux morate znati logičke vrijednosti za omogućavanje/onemogućavanje SELinux postavki:

  • Da biste vidjeli sve Booleove vrijednosti: # getsebool -a
  • Da biste vidjeli opis svakog: # semanage boolean -l
  • Za postavljanje Booleove vrijednosti: # setsebool [_boolean_] [1|0]
  • Za trajnu instalaciju dodajte -P, Na primjer: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux pravila/aplikacije mogu sadržavati pogreške, uključujući:

  • Neobične staze koda
  • Konfiguracije
  • Preusmjeravanje stdout-a
  • Curenje deskriptora datoteke
  • Izvršna memorija
  • Loše izgrađene knjižnice

Otvorite tikete (ne šaljite izvješće Bugzilli; Bugzilla nema SLA).

21. Vaši podaci mogu biti ugroženiako imate ograničene domene koje pokušavaju:

  • Učitaj module jezgre
  • Onemogući prisilni SELinux način rada
  • Pišite etc_t/shadow_t
  • Promijenite pravila za iptables

22. SELinux alati za razvoj modula politike:

# yum -y install setroubleshoot setroubleshoot-server

Ponovo pokrenite ili ponovno pokrenite auditd nakon instalacije.

23. upotreba

journalctl

za prikaz popisa svih dnevnika povezanih s setroubleshoot:

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

24. upotreba journalctl za popis svih zapisa povezanih s određenom SELinux oznakom. Na primjer:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Ako se pojavi greška SELinuxa, koristite dnevnik setroubleshoot nudeći nekoliko mogućih rješenja.
Na primjer, iz 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. Zapisivanje: SELinux bilježi informacije na mnogim mjestima:

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

27. Bilježenje: traženje SELinux grešaka u dnevniku revizije:

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

28. Da biste pronašli SELinux Access Vector Cache (AVC) poruke za određenu uslugu:

# ausearch -m avc -c httpd

29. Korisnost audit2allow prikuplja informacije iz zapisa zabranjenih operacija i zatim generira SELinux pravila pravila dopuštenja. Na primjer:

  • Da biste stvorili čovjeku čitljiv opis zašto je pristup odbijen: # audit2allow -w -a
  • Da biste vidjeli pravilo provedbe tipa koje dopušta odbijeni pristup: # audit2allow -a
  • Za izradu prilagođenog modula: # audit2allow -a -M mypolicy
  • Opcija -M stvara datoteku za provedbu tipa (.te) s navedenim nazivom i kompajlira pravilo u paket pravila (.pp): mypolicy.pp mypolicy.te
  • Da biste instalirali prilagođeni modul: # semodule -i mypolicy.pp

30. Da biste konfigurirali zasebni proces (domenu) za rad u dopuštenom načinu rada: # semanage permissive -a httpd_t

31. Ako više ne želite da domena bude permisivna: # semanage permissive -d httpd_t

32. Da biste onemogućili sve dopuštene domene: # semodule -d permissivedomains

33. Omogućavanje MLS SELinux pravila: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Provjerite radi li SELinux u dopuštenom načinu rada: # setenforce 0
Koristite skriptu fixfileskako biste bili sigurni da su datoteke ponovno označene pri sljedećem ponovnom pokretanju:

# fixfiles -F onboot # reboot

34. Stvorite korisnika s određenim MLS rasponom: # useradd -Z staff_u john

Korištenje naredbe useradd, mapirajte novog korisnika na postojećeg SELinux korisnika (u ovom slučaju, staff_u).

35. Za pregled preslikavanja između SELinux i Linux korisnika: # semanage login -l

36. Definirajte određeni raspon za korisnika: # semanage login --modify --range s2:c100 john

37. Da biste ispravili oznaku korisničkog matičnog imenika (ako je potrebno): # chcon -R -l s2:c100 /home/john

38. Za pregled trenutnih kategorija: # chcat -L

39. Da biste promijenili kategorije ili počeli stvarati vlastitu, uredite datoteku na sljedeći način:

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

40. Za pokretanje naredbe ili skripte u određenoj datoteci, ulozi i korisničkom kontekstu:

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

  • -t kontekst datoteke
  • -r kontekst uloge
  • -u korisnički kontekst

41. Spremnici koji rade s onemogućenim SELinuxom:

  • Podman: # podman run --security-opt label=disable …
  • Lučki radnik: # docker run --security-opt label=disable …

42. Ako spremniku trebate dati puni pristup sustavu:

  • Podman: # podman run --privileged …
  • Lučki radnik: # docker run --privileged …

A sada već znate odgovor. Stoga vas molimo: nemojte paničariti i omogućite SELinux.

reference:

Izvor: www.habr.com

Dodajte komentar