Cheat sheet SELinux sysadmin: 42 odpovědí na důležité otázky

Překlad článku byl připraven speciálně pro studenty kurzu "Správce Linuxu".

Cheat sheet SELinux sysadmin: 42 odpovědí na důležité otázky

Zde získáte odpovědi na důležité otázky o životě, vesmíru a všem v Linuxu s vylepšeným zabezpečením.

„Důležitá pravda, že věci nejsou vždy takové, jak se zdají, je dobře známá…“

- Douglas Adams, Stopařův průvodce po Galaxii

Bezpečnost. Zvyšování spolehlivosti. Korespondence. Politika. Čtyři jezdci z Apokalypsy sysadmin. Kromě našich každodenních úkolů – monitorování, zálohování, implementace, konfigurace, aktualizace atd. – jsme také zodpovědní za bezpečnost našich systémů. Dokonce i ty systémy, kde nám poskytovatel třetí strany radí deaktivovat vylepšené zabezpečení. Vypadá to na práci Ethan Hunt z Mission Impossible.

Tváří v tvář tomuto dilematu se někteří správci systému rozhodnou přijmout modrá pilulkaprotože si myslí, že nikdy nebudou znát odpověď na velkou otázku života a vesmíru a tak dále. A jak všichni víme, odpověď je 42.

V duchu Stopařova průvodce po Galaxii je zde 42 odpovědí na důležité otázky týkající se správy a používání SELinux na vašich systémech.

1. SELinux je systém kontroly vynuceného přístupu, což znamená, že každý proces má označení. Každý soubor, adresář a systémový objekt má také štítky. Pravidla zásad řídí přístup mezi označenými procesy a objekty. Jádro tato pravidla vynucuje.

2. Dva nejdůležitější pojmy jsou: Označování - značení (soubory, procesy, porty atd.) a Vynucení typu (který izoluje procesy od sebe na základě typů).

3. Správný formát štítku user:role:type:level (volitelný).

4. Účelem poskytování víceúrovňového zabezpečení (Víceúrovňové zabezpečení - MLS) je řídit procesy (domény) na základě úrovně zabezpečení dat, které budou používat. Tajný proces například nemůže číst přísně tajná data.

5. Zajištění bezpečnosti ve více kategoriích (Zabezpečení více kategorií - MCS) chrání podobné procesy před sebou navzájem (například virtuální stroje, motory OpenShift, sandboxy SELinux, kontejnery atd.).

6. Možnosti jádra pro změnu režimů SELinux při spouštění:

  • autorelabel=1 → způsobí, že systém začne znovu označovat
  • selinux=0 → jádro nenačte infrastrukturu SELinux
  • enforcing=0 → stáhnout v permisivním režimu

7. Pokud potřebujete přeoznačit celý systém:

# touch /.autorelabel
#reboot

Pokud označení systému obsahuje mnoho chyb, může být nutné zavést systém v permisivním režimu, aby bylo opětovné označení úspěšné.

8. Chcete-li zkontrolovat, zda je povolen SELinux: # getenforce

9. Chcete-li dočasně povolit/zakázat SELinux: # setenforce [1|0]

10. Kontrola stavu SELinux: # sestatus

11. Konfigurační soubor: /etc/selinux/config

12. Jak SELinux funguje? Zde je příklad označení pro webový server Apache:

  • Binární reprezentace: /usr/sbin/httpd→httpd_exec_t
  • Konfigurační adresář: /etc/httpd→httpd_config_t
  • Adresář souborů protokolu: /var/log/httpd → httpd_log_t
  • Adresář obsahu: /var/www/html → httpd_sys_content_t
  • Spustit skript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Postup: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Porty: 80/tcp, 443/tcp → httpd_t, http_port_t

Proces běžící v kontextu httpd_t, může interagovat s objektem se štítkem httpd_something_t.

13. Mnoho příkazů má argument -Z pro zobrazení, vytvoření a úpravu kontextu:

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

Kontexty se nastavují při vytváření souborů na základě kontextu jejich nadřazeného adresáře (s některými výjimkami). RPM mohou nastavovat kontexty stejně jako během instalace.

14. Existují čtyři hlavní příčiny chyb SELinux, které jsou podrobněji popsány v odstavcích 15-21 níže:

  • Problémy s označováním
  • Kvůli něčemu, co SELinux potřebuje vědět
  • Chyba v zásadách/aplikaci SELinux
  • Vaše informace mohou být ohroženy

15. Problém s označováním: pokud jsou vaše soubory v /srv/myweb nesprávně označený, přístup může být odepřen. Zde je několik způsobů, jak to opravit:

  • Pokud znáte označení:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Pokud znáte soubor s ekvivalentním označením:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Obnovení kontextu (pro oba případy):
    # restorecon -vR /srv/myweb

16. Problém se značením: pokud soubor přesunete místo zkopírování, zachová si svůj původní kontext. Chcete-li tento problém vyřešit:

  • Změňte kontextový příkaz s popiskem:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Změňte kontextový příkaz s popiskem odkazu:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Obnovte kontext (pro oba případy): # restorecon -vR /var/www/html/

17. Jestliže SELinux musíte znátže HTTPD naslouchá na portu 8585, řekněte SELinuxu:

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

18. SELinux musíte znát booleans, které umožňují měnit části zásad SELinux za běhu bez znalosti přepisování zásad SELinux. Pokud například chcete, aby httpd odeslal e-mail, zadejte: # setsebool -P httpd_can_sendmail 1

19. SELinux musíte znát Booleovské hodnoty pro povolení/zakázání nastavení SELinux:

  • Chcete-li zobrazit všechny logické hodnoty: # getsebool -a
  • Chcete-li zobrazit popis každého: # semanage boolean -l
  • Chcete-li nastavit booleovskou hodnotu: # setsebool [_boolean_] [1|0]
  • Pro trvalou instalaci přidejte -P. Například: # setsebool httpd_enable_ftp_server 1 -P

20. Zásady/aplikace SELinuxu mohou obsahovat chyby, včetně:

  • Neobvyklé cesty kódu
  • Konfigurace
  • Přesměrování stdout
  • Úniky deskriptoru souboru
  • Spustitelná paměť
  • Špatně postavené knihovny

Otevřené vstupenky (nepodávejte hlášení do Bugzilly, v Bugzille není SLA).

21. Vaše informace mohou být ohroženypokud máte omezené domény, které se snaží:

  • Načtěte moduly jádra
  • Zakázat vynucený režim SELinux
  • napsat etc_t/shadow_t
  • Změňte pravidla iptables

22. Nástroje SELinux pro vývoj modulů zásad:

# yum -y install setroubleshoot setroubleshoot-server

Restartujte nebo restartujte auditd po instalaci.

23. použití

journalctl

vypsat všechny související protokoly setroubleshoot:

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

24. použití journalctl zobrazí seznam všech protokolů spojených s konkrétním štítkem SELinux. Například:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Když dojde k chybě SELinux, použijte protokol setroubleshoot nabízí několik možných řešení.
Například z 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. Protokolování: SELinux protokoluje informace na mnoha místech:

  • / var / log / zprávy
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Protokolování: hledání chyb SELinux v protokolu auditu:

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

28. Chcete-li najít zprávy SELinux Access Vector Cache (AVC) pro konkrétní službu:

# ausearch -m avc -c httpd

29. Užitečnost audit2allow shromažďuje informace z protokolů zakázaných operací a poté generuje pravidla zásad oprávnění SELinux. Například:

  • Chcete-li vytvořit lidsky čitelný popis, proč byl přístup odepřen: # audit2allow -w -a
  • Chcete-li zobrazit pravidlo vynucení typu, které umožňuje odepřený přístup: # audit2allow -a
  • Chcete-li vytvořit vlastní modul: # audit2allow -a -M mypolicy
  • Možnost -M vytvoří soubor pro vynucení typu (.te) se zadaným názvem a zkompiluje pravidlo do balíčku zásad (.pp): mypolicy.pp mypolicy.te
  • Chcete-li nainstalovat vlastní modul: # semodule -i mypolicy.pp

30. Chcete-li nakonfigurovat jeden proces (doménu), aby běžel v permisivním režimu: # semanage permissive -a httpd_t

31. Pokud již nechcete, aby byla doména povolená: # semanage permissive -d httpd_t

32. Postup deaktivace všech povolených domén: # semodule -d permissivedomains

33. Povolení zásad MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Ujistěte se, že SELinux běží v permisivním režimu: # setenforce 0
Použijte skript fixfilesabyste zajistili, že při příštím restartu budou soubory přeznačeny:

# fixfiles -F onboot # reboot

34. Vytvořte uživatele s konkrétním rozsahem MLS: # useradd -Z staff_u john

Pomocí příkazu useradd, namapujte nového uživatele na stávajícího uživatele SELinuxu (v tomto případě staff_u).

35. Chcete-li zobrazit korespondenci mezi uživateli SELinuxu a Linuxu: # semanage login -l

36. Definujte konkrétní rozsah pro uživatele: # semanage login --modify --range s2:c100 john

37. Chcete-li opravit štítek v domovském adresáři uživatele (v případě potřeby): # chcon -R -l s2:c100 /home/john

38. Chcete-li zobrazit aktuální kategorie: # chcat -L

39. Chcete-li změnit kategorie nebo začít vytvářet vlastní, upravte soubor následovně:

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

40. Chcete-li spustit příkaz nebo skript v konkrétním souboru, roli a uživatelském kontextu:

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

  • -t kontext souboru
  • -r kontext role
  • -u uživatelský kontext

41. Kontejnery běžící se zakázaným SELinux:

  • Podman: # podman run --security-opt label=disable …
  • Přístavní dělník: # docker run --security-opt label=disable …

42. Pokud potřebujete dát kontejneru plný přístup k systému:

  • Podman: # podman run --privileged …
  • Přístavní dělník: # docker run --privileged …

A teď už znáte odpověď. Takže prosím nepropadejte panice a povolte SELinux.

Odkazy:

Zdroj: www.habr.com

Přidat komentář