GNU/Linux >> Znalost Linux >  >> Linux

Příručka správce systému SELinux:42 odpovědí na velké otázky

„Je důležitým a oblíbeným faktem, že věci nejsou vždy takové, jak se zdají…“

―Douglas Adams, Stopařův průvodce po galaxii

Bezpečnostní. Kalení. Dodržování. Politika. Čtyři jezdci z SysAdmin apokalypsy. Kromě našich každodenních úkolů – monitorování, zálohování, implementace, ladění, aktualizace a tak dále – máme na starosti také zabezpečení našich systémů. Dokonce i ty systémy, kde nám poskytovatel třetí strany říká, abychom deaktivovali vylepšené zabezpečení. Vypadá to jako práce pro Mission Impossible je Ethan Hunt.

Tváří v tvář tomuto dilematu se někteří systémoví správci rozhodnou vzít si modrou pilulku, protože si myslí, že nikdy nebudou znát odpověď na velkou otázku života, vesmíru a všeho ostatního. A jak všichni víme, odpověď je 42 .

V duchu Stopařova průvodce po galaxii , zde je 42 odpovědí na velké otázky o správě a používání SELinuxu s vašimi systémy.

  1. SELinux je systém LABELING, což znamená, že každý proces má svůj LABEL. Každý soubor, adresář a systémový objekt má LABEL. Pravidla zásad řídí přístup mezi označenými procesy a označenými objekty. Jádro tato pravidla vynucuje.
  1. Dva nejdůležitější pojmy jsou:Označení (soubory, proces, porty atd.) a vynucení typu (který od sebe izoluje procesy na základě typů).
  1. Správný formát štítku je user:role:type:level (volitelné ).
  1. Účel vynucení víceúrovňového 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.
  1. Vynucení zabezpečení více kategorií (MCS) chrání podobné procesy před sebou navzájem (jako jsou virtuální stroje, ozubená kola OpenShift, sandboxy SELinux, kontejnery atd.).
  1. Parametry jádra pro změnu režimů SELinux při spouštění:
    • autorelabel=1 → donutí systém přeznačkovat
    • selinux=0 → jádro nenačte žádnou část infrastruktury SELinux
    • enforcing=0 → zavést v permisivním režimu
  1. Pokud potřebujete znovu označit celý systém:
    # touch /.autorelabel
    # reboot

    Pokud označení systému obsahuje velké množství chyb, možná budete muset zavést systém v permisivním režimu, aby bylo automatické označování úspěšné.

  1. Chcete-li zkontrolovat, zda je povolen SELinux:

    # getenforce
  1. Chcete-li dočasně povolit/zakázat SELinux:

    # setenforce [1|0]
  1. Stavový nástroj SELinux:

    # sestatus
  1. Konfigurační soubor:

    /etc/selinux/config
  1. Jak SELinux funguje? Zde je příklad označení pro webový server Apache:
    • Binární:/usr/sbin/httpdhttpd_exec_t
    • Konfigurační adresář:/etc/httpdhttpd_config_t
    • Adresář logfile:/var/log/httpdhttpd_log_t
    • Adresář obsahu:/var/www/htmlhttpd_sys_content_t
    • Spouštěcí skript:/usr/lib/systemd/system/httpd.servicehttpd_unit_file_d
    • Proces:/usr/sbin/httpd -DFOREGROUNDhttpd_t
    • Porty:80/tcp, 443/tcphttpd_t, http_port_t

Proces běžící v httpd_t kontext může interagovat s objektem pomocí httpd_something_t štítek.

  1. Mnoho příkazů přijí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 (až na několik výjimek). RPM mohou nastavit kontext jako součást instalace.

  1. Existují čtyři hlavní příčiny chyb SELinux, které jsou dále vysvětleny v bodech 15-21 níže:
    • Problémy s označováním
    • Něco, co SELinux potřebuje vědět
    • Chyba v zásadách/aplikaci SELinux
    • Vaše informace mohou být ohroženy
  1. Problém s označováním: Pokud máte soubory v /srv/myweb nejsou správně označeny, přístup může být odepřen. Zde je několik způsobů, jak to opravit:
    • Pokud znáte štítek:

      # 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
    • Obnovte kontext (pro oba případy):

      # restorecon -vR /srv/myweb
  1. Problém s označováním: Pokud soubor přesunete místo zkopírování, zachová si svůj původní kontext. Chcete-li tyto problémy vyřešit:
    • Změňte kontextový příkaz s popiskem:

      $ sudo chcon -t httpd_system_content_t /var/www/html/index.html
    • Změňte kontextový příkaz s referenčním štítkem:

      $ sudo chcon --reference /var/www/html/ /var/www/html/index.html
    • Obnovte kontext (pro oba případy):

      $ sudo restorecon -vR /var/www/html/
  1. Pokud to SELinux potřebuje vědět HTTPD naslouchá na portu 8585, řekněte SELinuxu:

    $ sudo semanage port -a -t http_port_t -p tcp 8585
  1. SELinux to potřebuje vědět booleans umožňují měnit části zásad SELinux za běhu bez znalosti psaní zásad SELinux. Pokud například chcete, aby httpd odeslal e-mail, zadejte:

    $ sudo setsebool -P httpd_can_sendmail 1
  1. SELinux to potřebuje vědět Booleany jsou pouze nastavení vypnutí/zapnutí pro SELinux:
    • Chcete-li zobrazit všechny logické hodnoty:# getsebool -a
    • Chcete-li zobrazit popis každého z nich:# semanage boolean -l
    • Chcete-li nastavit logické provedení:# setsebool [_boolean_] [1|0]
    • Chcete-li jej nakonfigurovat trvale, přidejte -P . Například:

      # setsebool httpd_enable_ftp_server 1 -P
  1. Zásady/aplikace SELinux mohou obsahovat chyby, včetně:
    • Neobvyklé cesty kódu
    • Konfigurace
    • Přesměrování stdout
    • Uniklé deskriptory souborů
    • Spustitelná paměť
    • Špatně sestavené knihovny
  1. Vaše informace mohou být ohroženy pokud máte omezené domény, které se snaží:
    • Načtěte moduly jádra
    • Vypněte režim vynucení SELinux
    • Napište do etc_t/shadow_t
    • Upravit pravidla iptables
  1. Nástroje SELinux pro vývoj modulů zásad:
    $ yum -y install setroubleshoot setroubleshoot-server

    Restartujte nebo restartujte auditd po instalaci.

  1. Použijte journalctl pro výpis všech protokolů souvisejících s setroubleshoot :
    $ sudo journalctl -t setroubleshoot --since=14:20

  1. Použijte journalctl pro výpis všech protokolů souvisejících s konkrétním štítkem SELinux. Například:
    $ sudo journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
  1. Použijte setroubleshoot log, když dojde k chybě SELinux a navrhněte některá možná ř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
  1. Protokolování:SELinux zaznamenává informace všude:
    • /var/log/messages
    • /var/log/audit/audit.log
    • /var/lib/setroubleshoot/setroubleshoot_database.xml
  1. Protokolování:Hledání chyb SELinux v protokolu auditu:

    $ sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
  1. Chcete-li vyhledat zprávy SELinux Access Vector Cache (AVC) pro konkrétní službu:

    $ sudo ausearch -m avc -c httpd
  1. Položka audit2allow obslužný program shromažďuje informace z protokolů zakázaných operací a poté generuje pravidla SELinux policy-allow. 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

      -M volba vytvoří soubor pro vynucení typu (.te) se zadaným názvem a zkompiluje pravidlo do balíčku zásad (.pp):mypolicy.pp mypolicy.te
    • Instalace vlastního modulu:# semodule -i mypolicy.pp
  1. Chcete-li nakonfigurovat jeden proces (doménu), aby spouštěl povolený provoz:# semanage permissive -a httpd_t
  1. Pokud již nechcete, aby byla doména povolena:# semanage permissive -d httpd_t
  1. Zakázání všech povolených domén:

    $ sudo semodule -d permissivedomains
  1. Povolení zásad SELinux MLS:

    $ sudo yum install selinux-policy-mls

    V /etc/selinux/config:

    SELINUX=permissive
    SELINUXTYPE=mls

    Ujistěte se, že SELinux běží v permisivním režimu:

    $ sudo setenforce 0

    Použijte fixfiles skript, který zajistí, že soubory budou při příštím restartu znovu označeny:

    $ sudo fixfiles -F onboot
    $ sudo reboot
  1. Vytvořte uživatele s konkrétním rozsahem MLS:

    $ sudo useradd -Z staff_u tux

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

  1. Chcete-li zobrazit mapování mezi uživateli SELinuxu a Linuxu:

    $ sudo semanage login -l
  1. Definujte konkrétní rozsah pro uživatele:

    $ sudo semanage login --modify --range s2:c100 tux
  1. Oprava štítku v domovském adresáři uživatele (v případě potřeby):

    $ sudo chcon -R -l s2:c100 /home/tux
  1. Seznam aktuálních kategorií:

    $ sudo chcat -L
  1. Chcete-li upravit kategorie nebo začít vytvářet vlastní, upravte soubor následovně:

    /etc/selinux/_<selinuxtype>_/setrans.conf
  1. Chcete-li spustit příkaz nebo skript v konkrétním souboru, roli a uživatelském kontextu:

    $ sudo runcon -t initrc_t -r system_r -u user_u yourcommandhere
    • -t je kontext souboru
    • -r je kontext role
    • -u je kontext uživatele
  1. Kontejnery běžící se zakázaným SELinux:
    • S Podmanem:# podman run --security-opt label=disable …
    • S Dockerem:# docker run --security-opt label=disable …
  1. Pokud potřebujete udělit kontejneru úplný přístup k systému:
    • S Podmanem:# podman run --privileged …
    • S Dockerem:# docker run --privileged …

A s tímto už znáte odpověď. Takže prosím: Nepropadejte panice a zapněte SELinux .

Zdroje:

  • SELinux od Dana Walshe
  • Váš vizuální návod pro prosazování zásad SELinux také od Dana Walshe
  • Security Enhanced Linux pro pouhé smrtelníky od Thomase Camerona
  • Omalovánky SELinux od Máirín Duffy
  • Uživatelská a administrátorská příručka SELinux — Red Hat Enterprise Linux 7

Linux
  1. Představení průvodce meziprocesovou komunikací v Linuxu

  2. Praktický cheat pro systémového administrátora pro SELinux

  3. 30 nejlepších otázek a odpovědí v rámci rozhovoru s OpenStack

  1. 20 Postfix Interview Otázky a odpovědi

  2. 20 nejlepších průvodců a výukových programů pro správce systému

  3. Výzva a příslib velkých dat

  1. Průvodce linuxovým terminálem pro začátečníky

  2. SELinux v reálném světě

  3. Otázky týkající se uloženého ID uživatele