Cheat sheet SELinux pre systémových administrátorov: 42 odpovedí na dôležité otázky

Preklad článku bol pripravený špeciálne pre študentov kurzu "Správca Linuxu".

Cheat sheet SELinux pre systémových administrátorov: 42 odpovedí na dôležité otázky

Tu získate odpovede na dôležité otázky o živote, vesmíre a všetkom v Linuxe s vylepšeným zabezpečením.

„Dôležitá pravda, že veci nie sú vždy také, ako sa zdajú, je všeobecne známa...“

-Douglas Adams, Stopárov sprievodca po Galaxii

Bezpečnosť. Zvýšená spoľahlivosť. Korešpondencia. politika. Systémový správca štyroch jazdcov Apokalypsy. Okrem našich každodenných úloh - monitorovanie, zálohovanie, implementácia, konfigurácia, aktualizácia atď. - sme zodpovední aj za bezpečnosť našich systémov. Dokonca aj tie systémy, v ktorých poskytovateľ tretej strany odporúča, aby sme zakázali rozšírenú bezpečnosť. Je to ako práca Ethan Hunt z "Misia: Impossible."

Tvárou v tvár tejto dileme sa niektorí správcovia systému rozhodnú prijať modrá pilulka, pretože si myslia, že nikdy nepoznajú odpoveď na veľkú otázku života, vesmíru a tak ďalej. A ako všetci vieme, odpoveď je 42.

V duchu Stopárovho sprievodcu po galaxii je tu 42 odpovedí na dôležité otázky o ovládaní a používaní. SELinux na vašich systémoch.

1. SELinux je systém kontroly núteného prístupu, čo znamená, že každý proces má označenie. Každý súbor, adresár a systémový objekt má tiež štítky. Pravidlá politiky riadia prístup medzi označenými procesmi a objektmi. Jadro presadzuje tieto pravidlá.

2. Dva najdôležitejšie pojmy sú: označovanie — označenia (súbory, procesy, porty atď.) a Typ presadzovania (ktorý izoluje procesy od seba na základe typov).

3. Správny formát štítku user:role:type:level (voliteľné).

4. Účelom poskytovania viacúrovňového zabezpečenia (Viacúrovňová bezpečnosť – MLS) je riadiť procesy (domény) na základe úrovne zabezpečenia údajov, ktoré budú používať. Napríklad tajný proces nemôže čítať prísne tajné údaje.

5. Zabezpečenie bezpečnosti viacerých kategórií (Bezpečnosť viacerých kategórií – MCS) chráni podobné procesy pred sebou navzájom (napríklad virtuálne stroje, motory OpenShift, sandboxy SELinux, kontajnery atď.).

6. Možnosti jadra na zmenu režimov SELinux pri zavádzaní:

  • autorelabel=1 → spôsobí, že systém spustí nové označenie
  • selinux=0 → jadro nenačítava infraštruktúru SELinux
  • enforcing=0 → načítanie v permisívnom režime

7. Ak potrebujete zmeniť označenie celého systému:

# touch /.autorelabel
#reboot

Ak označovanie systému obsahuje veľký počet chýb, možno budete musieť zaviesť systém v tolerantnom režime, aby bolo označovanie úspešné.

8. Ak chcete skontrolovať, či je povolený SELinux: # getenforce

9. Ak chcete dočasne zapnúť/vypnúť SELinux: # setenforce [1|0]

10. Kontrola stavu SELinux: # sestatus

11. Konfiguračný súbor: /etc/selinux/config

12. Ako funguje SELinux? Tu je príklad označenia pre webový server Apache:

  • Binárne zobrazenie: /usr/sbin/httpd→httpd_exec_t
  • Konfiguračný adresár: /etc/httpd→httpd_config_t
  • Adresár súboru denníka: /var/log/httpd → httpd_log_t
  • Adresár obsahu: /var/www/html → httpd_sys_content_t
  • Spustiť 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 beží v kontexte httpd_t, môže interagovať s označeným objektom httpd_something_t.

13. Mnoho príkazov akceptuje argument -Z zobraziť, vytvoriť a zmeniť kontext:

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

Kontexty sa vytvárajú pri vytváraní súborov na základe kontextu ich nadradeného adresára (s niektorými výnimkami). RPM môžu vytvárať kontexty ako počas inštalácie.

14. Existujú štyri hlavné príčiny chýb SELinux, ktoré sú podrobnejšie popísané v bodoch 15-21 nižšie:

  • Problémy s označovaním
  • Kvôli niečomu, čo SELinux potrebuje vedieť
  • Chyba v politike/aplikácii SELinux
  • Vaše informácie môžu byť ohrozené

15. Problém s označovaním: ak sú vaše súbory v /srv/myweb sú označené nesprávne, prístup môže byť odmietnutý. Tu je niekoľko spôsobov, ako to vyriešiť:

  • Ak poznáte označenie:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Ak poznáte súbor s ekvivalentnými označeniami:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Obnovenie kontextu (pre oba prípady):
    # restorecon -vR /srv/myweb

16. Problém s označovaním: ak súbor presuniete namiesto skopírovania, súbor si zachová svoj pôvodný kontext. Ak chcete vyriešiť tento problém:

  • Zmeňte kontextový príkaz s označením:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Zmeňte kontextový príkaz s označením odkazu:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Obnovte kontext (pre oba prípady): # restorecon -vR /var/www/html/

17. Ak SELinux musíte vedieťže HTTPD počúva na porte 8585, povedzte SELinuxu:

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

18. SELinux musíte vedieť Booleovské hodnoty, ktoré umožňujú meniť časti politiky SELinux za behu bez znalosti prepísania politiky SELinux. Napríklad, ak chcete, aby httpd odoslal e-mail, zadajte: # setsebool -P httpd_can_sendmail 1

19. SELinux musíte vedieť logické hodnoty na zapnutie/vypnutie nastavení SELinuxu:

  • Ak chcete zobraziť všetky boolovské hodnoty: # getsebool -a
  • Ak chcete zobraziť popis každého: # semanage boolean -l
  • Ak chcete nastaviť boolovskú hodnotu: # setsebool [_boolean_] [1|0]
  • Pre trvalú inštaláciu pridajte -P, Napríklad: # setsebool httpd_enable_ftp_server 1 -P

20. Politiky/aplikácie SELinux môžu obsahovať chyby, vrátane:

  • Nezvyčajné cesty kódu
  • Konfigurácie
  • Prebieha presmerovanie stdout
  • Úniky deskriptora súboru
  • Spustiteľná pamäť
  • Zle postavené knižnice

Otvorené vstupenky (neodosielajte hlásenie Bugzille, Bugzilla nemá SLA).

21. Vaše informácie môžu byť ohrozenéak máte obmedzené domény, ktoré sa pokúšajú:

  • Načítajte moduly jadra
  • Zakázať vynútený režim SELinux
  • Písať etc_t/shadow_t
  • Zmeňte pravidlá iptables

22. Nástroje SELinux na vývoj modulov politiky:

# yum -y install setroubleshoot setroubleshoot-server

Reštartujte alebo reštartujte auditd po inštalácii.

23. použitie

journalctl

zobrazíte zoznam všetkých priradených protokolov setroubleshoot:

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

24. použitie journalctl zobrazí zoznam všetkých protokolov spojených s konkrétnou značkou SELinux. Napríklad:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Ak sa vyskytne chyba SELinux, použite protokol setroubleshoot ponúka niekoľko možných riešení.
Napríklad 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. Protokolovanie: SELinux zaznamenáva informácie na mnohých miestach:

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

27. Protokolovanie: hľadanie chýb SELinux v protokole auditu:

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

28. Ak chcete nájsť správy SELinux Access Vector Cache (AVC) pre konkrétnu službu:

# ausearch -m avc -c httpd

29. Užitočnosť audit2allow zhromažďuje informácie z protokolov zakázaných operácií a potom generuje pravidlá politiky povolení SELinux. Napríklad:

  • Ak chcete vytvoriť ľudsky čitateľný popis, prečo je prístup odmietnutý: # audit2allow -w -a
  • Ak chcete zobraziť pravidlo presadzovania typu, ktoré umožňuje odmietnutý prístup: # audit2allow -a
  • Ak chcete vytvoriť vlastný modul: # audit2allow -a -M mypolicy
  • Možnosť -M vytvorí súbor presadzovania typu (.te) so zadaným názvom a zostaví pravidlo do balíka politík (.pp): mypolicy.pp mypolicy.te
  • Ak chcete nainštalovať vlastný modul: # semodule -i mypolicy.pp

30. Ak chcete nakonfigurovať samostatný proces (doménu), aby fungoval v povolenom režime: # semanage permissive -a httpd_t

31. Ak už nechcete, aby bola doména povolená: # semanage permissive -d httpd_t

32. Ak chcete zakázať všetky povolené domény: # semodule -d permissivedomains

33. Povolenie politiky MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Uistite sa, že SELinux beží v povolenom režime: # setenforce 0
Použite skript fixfilesaby ste sa uistili, že súbory budú pri ďalšom reštarte označené:

# fixfiles -F onboot # reboot

34. Vytvorte používateľa s konkrétnym rozsahom MLS: # useradd -Z staff_u john

Pomocou príkazu useradd, namapujte nového používateľa na existujúceho používateľa SELinux (v tomto prípade staff_u).

35. Ak chcete zobraziť mapovanie medzi používateľmi SELinux a Linux: # semanage login -l

36. Definujte konkrétny rozsah pre používateľa: # semanage login --modify --range s2:c100 john

37. Ak chcete opraviť označenie domovského adresára používateľa (ak je to potrebné): # chcon -R -l s2:c100 /home/john

38. Ak chcete zobraziť aktuálne kategórie: # chcat -L

39. Ak chcete zmeniť kategórie alebo začať vytvárať vlastné, upravte súbor takto:

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

40. Ak chcete spustiť príkaz alebo skript v konkrétnom súbore, úlohe a používateľskom kontexte:

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

  • -t kontext súboru
  • -r rolový kontext
  • -u používateľský kontext

41. Kontajnery spustené so zakázaným SELinuxom:

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

42. Ak potrebujete kontajneru poskytnúť úplný prístup do systému:

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

A teraz už poznáte odpoveď. Takže prosím: neprepadajte panike a povoľte SELinux.

odkazy:

Zdroj: hab.com

Pridať komentár