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

Zde získáte odpovědi na důležité otázky o životě, vesmíru a o všem kolem v Linuxu s vylepšenou bezpečností.
„Důležitá pravda, že věci nejsou vždy tím, čím se zdají, je obecně známá…“
― Douglas Adams, Stopařovým průvodcem po galaxii
Bezpečnost. Zvyšování spolehlivosti. Shoda. Politika. Čtyři jezdci apokalypsy sysadmina. Kromě našich každodenních úkolů – monitorování, zálohování, nasazení, konfigurace, aktualizace atd. – také odpovídáme za bezpečnost našich systémů. Dokonce i u systémů, kde nám externí poskytovatel doporučuje vypnout zesílenou bezpečnost. Je to podobné práci z „Mission: Impossible.“
Když čelí této dilematu, někteří správci systémů se rozhodnou vzít si , protože si myslí, že se nikdy nedozvědí odpověď na velkou otázku života, vesmíru a všeho ostatního. A, jak víme, odpověď je 42.
Ve duchu „Stopařova průvodce po galaxii“ je zde 42 odpovědí na důležité otázky o správě a používání ve vašich systémech.
1. SELinux je systém vynucování přístupu, což znamená, že každý proces má štítek (label). Každý soubor, adresář a systémový objekt má také štítky. Politiky pravidel řídí přístup mezi označenými procesy a objekty. Jádro zajišťuje dodržování těchto pravidel.
2. Dvě nejdůležitější koncepty jsou: Označení — štítkování (soubory, procesy, porty atd.) a Typová restrikce (která izoluje procesy od sebe na základě typů).
3. Správný formát štítku uživatel:role:typ:úroveň (volitelné).
4. Cílem zajištění vícestupňové bezpečnosti (Multi-Level Security — MLS) je řídit procesy (domény) na základě úrovně bezpečnosti dat, která budou používat. Například tajný proces nemůže číst přísně tajná data.
5. Zajištění vícekategoriální bezpečnosti (Multi-Category Security — MCS) chrání podobné procesy navzájem (např. virtuální stroje, mechanismy OpenShift, sandboxy SELinux, kontejnery atd.).
6. Jádrové parametry pro změnu módů SELinux při zavádění:
autorelabel=1→ nutí systém provést přeštítkováníselinux=0→ jádro nenačítá infrastrukturu SELinuxenforcing=0→ zavádění v permissive režimu
7. Pokud potřebujete přenastavit celý systém:
# touch /.autorelabel
#reboot
Pokud systémové přenastavení obsahuje velké množství chyb, může být nutné spustit v povoleném režimu, aby přenastavení proběhlo úspěšně.
8. Jak zkontrolovat, zda je SELinux zapnutý: # getenforce
9. Jak dočasně zapnout/vypnout SELinux: # setenforce [1|0]
10. Kontrola stavu SELinux: # sestatus
11. Konfigurační soubor: /etc/selinux/config
12. Jak funguje SELinux? Zde je příklad přenastavení pro webový server Apache:
- Binární zobrazení:
/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 - Spouštěcí skript:
/usr/lib/systemd/system/httpd.service → httpd_unit_file_d - Proces:
/usr/sbin/httpd -DFOREGROUND → httpd_t - Porty:
80/tcp, 443/tcp → httpd_t, http_port_t
Proces spuštěný v kontextu httpd_t, může komunikovat s objektem se značkou httpd_something_t.
13. Mnoho příkazů bere argument -Z pro prohlížení, vytváření a úpravu kontextu:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Kontexty jsou nastavovány, když jsou soubory vytvářeny na základě kontextu jejich nadřazeného adresáře (s výjimkami). RPM mohou nastavovat kontexty během instalace.
14. Existují čtyři hlavní důvody chyb SELinux, které jsou podrobně uvedeny v bodech 15-21 níže:
- Problémy s přenastavením
- Z důvodu něčeho, co SELinux musí vědět
- Chyba v politice/aplikaci SELinux
- Vaše informace mohou být ohroženy
15. Problém s přenastavením: pokud jsou vaše soubory v /srv/myweb přenastaveny nesprávně, může být přístup zamítnut. Zde je několik způsobů, jak to opravit:
- Pokud znáte značku:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Pokud znáte soubor s ekvivalentním přenastavením:
# semanage fcontext -a -e /srv/myweb /var/www - Obnovením kontextu (pro oba případy):
# restorecon -vR /srv/myweb
16. Problém s přenastavením: Pokud soubor přesunete místo toho, abyste jej zkopírovali, soubor si uchová svůj původní kontext. Chcete-li tento problém opravit:
- Změňte příkaz kontextu se značkou:
# chcon -t httpd_system_content_t /var/www/html/index.html - Změňte příkaz kontextu s odkazovou značkou:
# chcon --reference /var/www/html/ /var/www/html/index.html - Obnovte kontext (pro oba případy):
# restorecon -vR /var/www/html/
17. Pokud SELinux potřebuje vědět, že HTTPD naslouchá portu 8585, informujte SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux potřebuje vědět logické hodnoty umožňující měnit části politiky SELinux za běhu bez znalosti přepsání politiky SELinux. Například pokud chcete, aby httpd odesílal e-maily, zadejte: # setsebool -P httpd_can_sendmail 1
19. SELinux potřebuje vědět logické hodnoty pro zapnutí/vypnutí nastavení SELinux:
- Abychom viděli všechna logická nastavení:
# getsebool -a - Abychom viděli popis každého:
# semanage boolean -l - Abychom nastavili logickou hodnotu:
# setsebool [_boolean_] [1|0] - Pro trvalé nastavení přidejte
-P. Například:# setsebool httpd_enable_ftp_server 1 -P
20. Politiky/aplikace SELinux mohou obsahovat chyby, včetně:
- Neobvyklé cesty kódu
- Konfigurace
- Přesměrování stdout
- Úniky popisovačů souborů
- Spustitelná paměť
- Špatně sestavené knihovny
Otevírejte tikety (neposílejte zprávu do Bugzilla; v Bugzilla není SLA).
21. Vaše informace mohou být ohroženy, pokud máte omezené domény, které se pokoušejí:
- Načíst moduly jádra
- Vypnout enforced režim SELinux
- Zapisovat do
etc_t/shadow_t - Změnit pravidla iptables
22. Nástroje SELinux pro vývoj politiky modulů:
# yum -y install setroubleshoot setroubleshoot-server
Restartujte nebo znovu spusťte auditd po instalaci.
23. Použijte
journalctl pro výpis seznamu všech protokolů souvisejících s setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Použijte journalctl pro výpis seznamu všech protokolů souvisejících se specifickou značkou SELinux. Například:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Při chybě SELinux použijte protokol setroubleshoot s návrhem několika možných řešení.
Například, z journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux brání httpd v přístupu k getattr na souboru /var/www/html/index.html. Pro kompletní zprávu spusťte: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux brání httpd v přístupu k getattr na souboru /var/www/html/index.html.
***** Plugin restorecon (99.5 % jistoty) navrhuje ************************
Pokud chcete opravit značku,
standardní značka pro /var/www/html/index.html by měla být httpd_syscontent_t.
Pak můžete obnovit značku.
Dělejte
# /sbin/restorecon -v /var/www/html/index.html26. Protokolování: SELinux zapisuje informace na mnoha místech:
- /var/log/messages
- /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. Abychom našli zprávy SELinux Access Vector Cache (AVC) pro určitou službu:
# ausearch -m avc -c httpd
29. Nástroj audit2allow shromažďuje informace z protokolů zakázaných operací a poté generuje pravidla povolení politiky SELinux. Například:
- Abychom vytvořili čitelné popisy důvodů odmítnutí přístupu:
# audit2allow -w -a - Abychom si prohlédli pravidlo vynucování typů, které povoluje zakázaný přístup:
# audit2allow -a - Abychom vytvořili uživatelský modul:
# audit2allow -a -M mypolicy - Volba
-Mvytváří soubor vynucení typu (.te) se zvoleným názvem a kompiluje pravidlo do balíčku politiky (.pp):mypolicy.pp mypolicy.te - Abychom nainstalovali uživatelský modul:
# semodule -i mypolicy.pp
30. Abychom nastavili jednotlivý proces (doménu) na práci v permissive režimu: # semanage permissive -a httpd_t
31. Pokud už nechcete, aby doména byla permissive: # semanage permissive -d httpd_t
32. Abychom vypnuli všechny permissive domény: # semodule -d permissivedomains
33. Povolení politiky MLS SELinux: # yum install selinux-policy-mls
v /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Ujistěte se, že SELinux běží v permissive režimu: # setenforce 0
Použijte skript fixfiles, abyste zajistili, že soubory budou přeznačeny při příštím restartu:
# fixfiles -F onboot # reboot
34. Vytvoření uživatele s konkrétním rozsahem MLS: # useradd -Z staff_u john
Pomocí příkazu useradd, přiřaďte nového uživatele k existujícímu uživateli SELinux (v tomto případě, staff_u).
35. Chcete-li zobrazit odpovídající uživatele mezi SELinux a Linuxem: # semanage login -l
36. Určete konkrétní rozsah pro uživatele: # semanage login --modify --range s2:c100 john
37. Chcete-li opravit označení v domácím adresáři uživatele (pokud je to nutné): # chcon -R -l s2:c100 /home/john
38. Pro zobrazení aktuálních kategorií: # chcat -L
39. Chcete-li změnit kategorie nebo začít vytvářet své vlastní, upravte soubor následovně:
\/etc\/selinux\/_<selinuxtype>_\/setrans.conf
40. Chcete-li spustit příkaz nebo skript v určitém souboru, roli a uživatelském kontextu:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tkontext souboru-rkontext role-ukontext uživatele
41. Kontejnery běžící s vypnutým SELinux:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Pokud potřebujete poskytnout kontejneru plný přístup k systému:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
A teď už víte odpověď. Tak prosím: nepanikařte a povolte SELinux.
Odkazy:
- by
- od Dana Walshe
- by
- by
Zdroj: habr.com
