SELinux goljufija za sistemske skrbnike: 42 odgovorov na pomembna vprašanja

Prevod članka je bil pripravljen posebej za študente tečaja "Linux Administrator".

SELinux goljufija za sistemske skrbnike: 42 odgovorov na pomembna vprašanja

Tukaj boste dobili odgovore na pomembna vprašanja o življenju, vesolju in vsem v Linuxu z izboljšano varnostjo.

"Pomembna resnica, da stvari niso vedno takšne, kot se zdijo, je splošno znana ..."

-Douglas Adams, Autostoperski vodnik po galaksiji

Varnost. Povečana zanesljivost. Dopisovanje. Politika. Sistemski administrator Štirje jezdeci apokalipse. Poleg vsakodnevnih nalog – spremljanje, varnostno kopiranje, implementacija, konfiguracija, posodabljanje itd. – smo odgovorni tudi za varnost naših sistemov. Tudi tisti sistemi, kjer tretji ponudnik priporoča, da onemogočimo povečano varnost. Zdi se kot delo Ethan Hunt iz filma "Misija: nemogoče".

Ko se soočijo s to dilemo, se nekateri sistemski skrbniki odločijo za uporabo modra tabletka, ker mislijo, da nikoli ne bodo izvedeli odgovora na veliko vprašanje življenja, vesolja in vsega tega. In kot vsi vemo, je ta odgovor 42.

V duhu Štoparskega vodnika po galaksiji je tukaj 42 odgovorov na pomembna vprašanja o nadzoru in uporabi. SELinux na vaših sistemih.

1. SELinux je prisilni sistem za nadzor dostopa, kar pomeni, da ima vsak proces oznako. Vsaka datoteka, imenik in sistemski objekt ima tudi oznake. Pravila pravilnika nadzorujejo dostop med označenimi procesi in objekti. Jedro uveljavlja ta pravila.

2. Dva najpomembnejša pojma sta: Označevanje — oznake (datoteke, procesi, vrata itd.) in Vrsta uveljavitve (ki ločuje procese drug od drugega na podlagi tipov).

3. Pravilna oblika etikete user:role:type:level (neobvezno).

4. Namen zagotavljanja večnivojske varnosti (Varnost na več ravneh – MLS) je upravljanje procesov (domen) glede na stopnjo varnosti podatkov, ki jih bodo uporabljali. Skrivni proces na primer ne more brati strogo zaupnih podatkov.

5. Zagotavljanje večkategorijske varnosti (Multi-Category Security - MCS) ščiti podobne procese drug pred drugim (na primer virtualne stroje, motorje OpenShift, peskovnike SELinux, vsebnike itd.).

6. Možnosti jedra za spreminjanje načinov SELinux ob zagonu:

  • autorelabel=1 → povzroči, da sistem izvede ponovno označevanje
  • selinux=0 → jedro ne naloži infrastrukture SELinux
  • enforcing=0 → nalaganje v dovoljenem načinu

7. Če morate znova označiti celoten sistem:

# touch /.autorelabel
#reboot

Če označevanje sistema vsebuje veliko število napak, se boste morda morali zagnati v dovoljenem načinu, da bo označevanje uspelo.

8. Če želite preveriti, ali je SELinux omogočen: # getenforce

9. Če želite začasno omogočiti/onemogočiti SELinux: # setenforce [1|0]

10. Preverjanje stanja SELinux: # sestatus

11. Konfiguracijska datoteka: /etc/selinux/config

12. Kako deluje SELinux? Tukaj je primer označevanja za spletni strežnik Apache:

  • Binarna predstavitev: /usr/sbin/httpd→httpd_exec_t
  • Imenik konfiguracije: /etc/httpd→httpd_config_t
  • Imenik dnevniške datoteke: /var/log/httpd → httpd_log_t
  • Imenik vsebine: /var/www/html → httpd_sys_content_t
  • Zaženi skript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proces: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Pristanišča: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces teče v kontekstu httpd_t, lahko komunicira z označenim predmetom httpd_something_t.

13. Mnogi ukazi sprejmejo argument -Z za ogled, ustvarjanje in spreminjanje konteksta:

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

Konteksti so vzpostavljeni, ko so datoteke ustvarjene na podlagi konteksta njihovega nadrejenega imenika (z nekaterimi izjemami). RPM-ji lahko vzpostavijo kontekst kot med namestitvijo.

14. Obstajajo štirje glavni vzroki za napake SELinux, ki so podrobneje opisani v točkah 15-21 spodaj:

  • Težave z označevanjem
  • Zaradi nečesa, kar mora SELinux vedeti
  • Napaka v pravilniku/aplikaciji SELinux
  • Vaši podatki so lahko ogroženi

15. Težava z označevanjem: če so vaše datoteke v /srv/myweb so nepravilno označeni, bo dostop morda zavrnjen. Tukaj je nekaj načinov, kako to popraviti:

  • Če poznate oznako:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Če poznate datoteko z enakovrednimi oznakami:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Obnovitev konteksta (za oba primera):
    # restorecon -vR /srv/myweb

16. Težava z označevanjem: če datoteko premaknete, namesto da bi jo kopirali, bo datoteka ohranila prvotni kontekst. Če želite odpraviti to težavo:

  • Spremenite kontekstni ukaz z oznako:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Spremenite kontekstni ukaz z oznako povezave:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Obnovite kontekst (za oba primera): # restorecon -vR /var/www/html/

17. če SELinux morate poznatida HTTPD posluša na vratih 8585, povejte SELinuxu:

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

18. SELinux morate poznati Logične vrednosti, ki omogočajo spreminjanje delov pravilnika SELinux med izvajanjem, ne da bi vedeli, da je pravilnik SELinux prepisan. Na primer, če želite, da httpd pošilja e-pošto, vnesite: # setsebool -P httpd_can_sendmail 1

19. SELinux morate poznati logične vrednosti za omogočanje/onemogočanje nastavitev SELinux:

  • Če želite videti vse logične vrednosti: # getsebool -a
  • Če si želite ogledati opis vsakega: # semanage boolean -l
  • Če želite nastaviti logično vrednost: # setsebool [_boolean_] [1|0]
  • Za trajno namestitev dodajte -P. Na primer: # setsebool httpd_enable_ftp_server 1 -P

20. Politike/aplikacije SELinux lahko vsebujejo napake, vključno z:

  • Nenavadne kodne poti
  • Konfiguracije
  • Preusmerjanje stdout
  • Puščanje deskriptorja datoteke
  • Izvedljiv pomnilnik
  • Slabo zgrajene knjižnice

Odprite vstopnice (ne oddajte poročila Bugzilli; Bugzilla nima SLA).

21. Vaši podatki so lahko ogroženiče imate omejene domene, ki poskušajo:

  • Naloži module jedra
  • Onemogoči prisilni način SELinux
  • Pišite etc_t/shadow_t
  • Spremenite pravila iptables

22. Orodja SELinux za razvoj modulov politik:

# yum -y install setroubleshoot setroubleshoot-server

Ponovno zaženite ali ponovno zaženite auditd po namestitvi.

23. Uporabi

journalctl

za prikaz seznama vseh dnevnikov, povezanih z setroubleshoot:

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

24. Uporabi journalctl za seznam vseh dnevnikov, povezanih z določeno oznako SELinux. Na primer:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Če pride do napake SELinux, uporabite dnevnik setroubleshoot ponuja več možnih rešitev.
Na primer od 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. Beleženje: SELinux beleži informacije na številnih mestih:

  • / var / log / sporočila
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Beleženje: iskanje napak SELinux v revizijskem dnevniku:

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

28. Če želite najti sporočila SELinux Access Vector Cache (AVC) za določeno storitev:

# ausearch -m avc -c httpd

29. Uporabnost audit2allow zbira informacije iz dnevnikov prepovedanih operacij in nato generira pravila dovoljenj SELinux. Na primer:

  • Če želite ustvariti človeku berljiv opis, zakaj je dostop zavrnjen: # audit2allow -w -a
  • Če si želite ogledati pravilo uveljavljanja vrste, ki dovoljuje zavrnjen dostop: # audit2allow -a
  • Če želite ustvariti modul po meri: # audit2allow -a -M mypolicy
  • Možnost -M ustvari datoteko za uveljavljanje tipa (.te) s podanim imenom in prevede pravilo v paket pravilnika (.pp): mypolicy.pp mypolicy.te
  • Če želite namestiti modul po meri: # semodule -i mypolicy.pp

30. Za konfiguracijo ločenega procesa (domene) za delo v dovoljenem načinu: # semanage permissive -a httpd_t

31. Če ne želite več, da je domena permisivna: # semanage permissive -d httpd_t

32. Če želite onemogočiti vse permisivne domene: # semodule -d permissivedomains

33. Omogočanje pravilnika MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Prepričajte se, da SELinux deluje v dovoljenem načinu: # setenforce 0
Uporabite skript fixfilesda zagotovite, da so datoteke ob naslednjem ponovnem zagonu ponovno označene:

# fixfiles -F onboot # reboot

34. Ustvarite uporabnika z določenim obsegom MLS: # useradd -Z staff_u john

Uporaba ukaza useraddpreslika novega uporabnika v obstoječega uporabnika SELinux (v tem primeru staff_u).

35. Za ogled preslikave med uporabniki SELinux in Linux: # semanage login -l

36. Določite določen obseg za uporabnika: # semanage login --modify --range s2:c100 john

37. Če želite popraviti oznako domačega imenika uporabnika (če je potrebno): # chcon -R -l s2:c100 /home/john

38. Za ogled trenutnih kategorij: # chcat -L

39. Če želite spremeniti kategorije ali začeti ustvarjati svojo, uredite datoteko na naslednji način:

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

40. Če želite zagnati ukaz ali skript v določeni datoteki, vlogi in uporabniškem kontekstu:

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

  • -t kontekst datoteke
  • -r kontekst vloge
  • -u uporabniški kontekst

41. Vsebniki, ki se izvajajo z onemogočenim SELinuxom:

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

42. Če morate vsebniku omogočiti popoln dostop do sistema:

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

In zdaj že poznate odgovor. Zato prosim: brez panike in omogočite SELinux.

Reference:

Vir: www.habr.com

Dodaj komentar