1. Preambule
Security-Enhanced Linux (SELinux) je modul jádra Linuxu a bezpečnostní subsystém Linuxu.
SELinux byl primárně vyvinut NSA. Linuxová jádra 2.6 a výše již integrují SELinux moduly.
SELinux je velmi složitý a obsahuje spoustu konceptuálních věcí, které se těžko naučí. Mnoho linuxových systémových administrátorů SELinux vypnulo, protože jim přijde problematický.
Pokud zvládneš SELinux a použiješ ho správně, myslím, že celý systém může v podstatě dosáhnout bodu "nezničitelnosti" (vždy měj na paměti, že neexistuje absolutní bezpečnost).
Zvládnutí základních konceptů SELinuxu i jednoduchých konfiguračních metod je povinným kurzem pro každého správce linuxového systému.
Tento článek je založen na CentOS 7.4.1708.
Tento článek je čistě osobní zkušeností a výměna zkušeností, chyby jsou nevyhnutelné, pouze pro informaci! Pokud najdete chybu, prosím, upozorněte na ni, moc děkuji!
2. Role SELinuxu a mechanismus správy oprávnění
2.1 Role SELinuxu
Hlavní funkcí SELinuxu je minimalizovat zdroje, ke kterým mohou servisní procesy v systému přistupovat (princip nejmenších privilegií).
Představte si, že pokud síťová služba běžící jako root má zranitelnost 0day, hackeři ji mohou využít k tomu, aby si na vašem serveru jako root dělali, co chtějí. Není to děsivé?
SELinux je tu, aby tento problém vyřešil.
2.2 DAC
V operačním systému, který SELinux nepoužívá, je faktorem určujícím, zda je zdroj přístupný, zda má zdroj oprávnění příslušného uživatele (číst, zapisovat, vykonávat).
Pokud proces přistupující k tomuto zdroji splňuje výše uvedené podmínky, lze k němu přistupovat.
Nejzávažnějším problémem je, že uživatelé root nejsou podrobeni žádné regulaci a ke všem zdrojům v systému lze přistupovat bez omezení.
Hlavní částí tohoto mechanismu správy oprávnění je uživatel, známý také jako autonomní řízení přístupu (DAC).
2.3 MAC
V operačním systému používajícím SELinux jsou faktory, které určují, zda je zdroj přístupný, nejen výše uvedené faktory, ale také to, zda má každý typ procesu přístup k určitému typu zdroje.
Tímto způsobem, i když proces běží jako root, je nutné určit typ procesu a typy zdrojů, ke kterým je přístup povolen, než se rozhodne, zda povolit přístup ke zdroji. Aktivní prostor procesu lze také zkomprimovat na minimum.
Dokonce i servisní proces běžící jako root má obvykle přístup pouze k potřebným zdrojům. I když je program zranitelný, rozsah dopadu je omezen na zdroje, ke kterým má přístup. Bezpečnost je výrazně zvýšena.
Hlavní částí tohoto mechanismu správy oprávnění je proces, známý také jako povinná kontrola přístupu (MAC).
MAC se dělí na dva způsoby, jeden se nazývá režim kategoriové bezpečnosti (MCS) a druhý režim víceúrovňové bezpečnosti (MLS).
Následující akce jsou v režimu MCS.
2.4 Srovnání DAC a MAC
Tady je obrázek pro ilustraci.
Jak vidíte, v režimu DAC lze k adresáři přistupovat, pokud má příslušný adresář oprávnění příslušného uživatele. V režimu MAC je také omezen rozsahem adresářů, ke kterým mohou procesy přistupovat.
3. Základní koncepty SELinuxu
3.1 Subjekt
Lze to zcela přirovnat k procesu.
Poznámka: Pro snadnější pochopení, pokud není uvedeno jinak, je tento proces považován za hlavní část níže.
3.2 Cíl
Zdroje přístupné ředitelem. Mohou to být soubory, adresáře, porty, zařízení atd.
Poznámka: Pro snadnější pochopení, pokud není uvedeno jinak, jsou následující dokumenty nebo adresáře považovány za objekty.
3.3 Politika a pravidla
V systému je obvykle velké množství souborů a procesů, a abychom ušetřili čas a režijní zátěž, obvykle selektivně regulujeme pouze určité procesy.
A které procesy je třeba regulovat a jak je kontrolovat, určuje politika.
V pojistce je více pravidel. Některá pravidla lze podle potřeby povolit nebo vypnout (dále jen Booleovská pravidla).
Pravidla jsou modulární a rozšiřitelná. Při instalaci nové aplikace může aplikace přidávat pravidla přidáváním nových modulů. Uživatelé mohou také ručně přidávat nebo odebírat pravidla.
V systému CentOS 7 existují tři sady politik, a to:
1. Cílené: Řídí většinu procesů síťových služeb. Toto je politika, kterou systém používá ve výchozím nastavení (všechny níže uvedené jsou použity).
2. Minimum: Na základě cílených procesů jsou regulovány pouze vybrané procesy síťové služby. Obecně ne.
3. MLS: Víceúrovňová bezpečnostní ochrana. Regulujte všechny procesy. To je nejpřísnější politika a konfigurace je velmi obtížná. Obecně se nepoužívá, pokud nejsou extrémně vysoké požadavky na bezpečnost.
Politiky lze nastavit v /etc/selinux/config.
3.4 Bezpečnostní kontext
Bezpečnostní kontext je jádrem SELinuxu.
Bezpečnostní kontext rozděluji na "kontext bezpečnosti procesů" a "kontext bezpečnosti dokumentů".
Kontext bezpečnosti procesů obvykle odpovídá více kontextům zabezpečení dokumentů.
Pouze tehdy, když bezpečnostní kontext těchto dvou souborů odpovídá, může proces přistupovat k souboru. Jejich korespondence je určena pravidly v pojistce.
Kontext zabezpečení souboru je určen místem, kde byl soubor vytvořen, a procesem, který jej vytvořil. Systém má sadu výchozích hodnot a uživatelé si mohou také nastavit výchozí hodnoty.
Je důležité si uvědomit, že samotné přesunutí souborů nemění bezpečnostní kontext vašich souborů.
Struktura a význam bezpečnostního kontextu
Bezpečnostní kontext má čtyři pole, oddělená dvojtečkou. Tvar jako: system_u:object_r:admin_home_t:s0.
3.5 Pracovní režim SELinux
SELinux má tři režimy provozu, a to:
1. vynucování: Vynucený režim. Porušení pravidel SELinux budou blokována a zaznamenávána do logů.
2. Permisivní: Tolerantní režim. Porušení pravidel SELinux se zaznamenává pouze v logech. Obecně kvůli ladění.
3. deaktivováno: Vypnout SELinux.
Pracovní režim SELinux lze nastavit v /etc/selinux/config.
Pokud chcete přejít z deaktivního na vynucující nebo permisivní, budete muset systém restartovat. A naopak.
Režim vynucování a povolení lze rychle přepínat příkazem Setenforce 1|0.
Je důležité poznamenat, že pokud systém běží s vypnutým SELinuxem delší dobu, první restart po zapnutí SELinuxu může být pomalejší. Protože systém musí vytvořit bezpečný kontext pro soubory na disku (řekl jsem, že jsem restartoval asi 10 minut a myslel jsem, že je mrtvý...... )。
SELinux logy je třeba zaznamenávat pomocí auditd.service, prosím, nedeaktivujte to.
3.6 Workflow SELinux
Tady je citát z obrázku, bez většího vysvětlení.
Poznámka: Bezpečnostní text výše se vztahuje na bezpečnostní kontext.
4. Základní operace SELinuxu
4.1 Dotaz na bezpečnostní kontext souboru nebo adresáře
Základní použití příkazů
ls -Z
Příklady použití
Dotazujte se na bezpečnostní kontext /etc/host.
ls -Z /etc/hostitelé
Výsledky popravy
-r-r--r--. Kořenový kořen system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Dotaz na bezpečnostní kontext procesu
Základní použití příkazů
ps auxZ | Grep -v Grep | Grep
Příklady použití
Dotazujte se na bezpečnostní kontext procesů souvisejících s Nginx.
ps auxZ | Grep -v Grep | Grep Nginx
Výsledky popravy
system_u:system_r:httpd_t:s0 kořen 7997 0.0 0.0 122784 2156 ? SS 14:31 0:00 nginx: master process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: pracovní proces
4.3 Ručně upravte bezpečnostní kontext souboru nebo adresáře
Základní použití příkazů
CHCON [...]
Volitelná funkce -u Upravit uživatelské pole bezpečnostního kontextu -r Upravit pole role bezpečnostního kontextu -t Upravit typ bezpečnostního kontextu -l Upravit pole úrovně bezpečnostního kontextu --reference Upravit bezpečnostní kontext odpovídající zadanému souboru nebo adresáři -R Rekurzivní operace -h Upravit bezpečnostní kontext softwarového odkazu (upravit odpovídající soubor měkkého odkazu bez této možnosti)
Příklady použití
Upravte bezpečnostní kontext testu na aaa_u:bbb_r:ccc_t:s0.
chcon -u aaa_u -r bbb_r -t ccc_t test
4.4 Vrátit bezpečnostní kontext souboru nebo adresáře na výchozí hodnotu
Základní použití příkazů
RestoreCon [možnosti] [...]
Option Function - V Tisková operace - R Rekurzivní operace
Příklady použití
Poté, co přidáte nějaké webové soubory do adresáře vašeho Nginx serveru, nastavte pro tyto nové soubory správný bezpečnostní kontext.
restorecon -R /usr/share/nginx/html/
4.5 Dotaz na Booleovská pravidla a jejich stav v systému
Základní použití příkazů
getsebool -a
Protože příkaz dotazuje buď všechna pravidla, nebo jen jedno pravidlo, obvykle nejprve dotazuje všechna pravidla a pak filtruje pomocí grep.
Příklady použití
Dotaz na Booleovská pravidla týkající se httpd.
getsebool -a | grep httpd
Výsledky popravy
httpd_anon_write --> pryč
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp --> pryč
#以下省略
4.6 Přepnutí Booleovského pravidla
Základní použití příkazů
Setsebool [Možnost]
Funkce volby -P restart stále platí
Příklady použití
Zapněte httpd_anon_write pravidla.
setsebool -P httpd_anon_write on
4.7 Přidat výchozí bezpečnostní kontext pro adresář
Základní použití příkazů
semanage fcontext -a -t "(/.*)?"
Poznámka: Výchozí bezpečnostní kontext adresáře nebo souboru lze zobrazit pomocí příkazu semanage fcontext -l ve spojení s filtrováním grep.
Příklady použití
Po přidání nového adresáře /usr/share/nginx/html2 do Nginx je potřeba nastavit stejný výchozí bezpečnostní kontext jako původní adresář.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Přidat porty, které jsou povoleny určitými typy procesů
Základní použití příkazů
semanage port -a -t -p
Poznámka: Čísla portů povolená pro různé typy služeb lze zobrazit pomocí příkazu semanage port -l s filtrováním grep.
Příklady použití
Pro Nginx je potřeba použít port 10080 pro HTTP služby.
SEMANAGE port -a -t http_port_t -p tcp 10080
5. Analýza a řešení chyby SELinux
5.1 Porozumění SELinux logům
Když je SELinux povolen, je běžné chování mnoha služeb považováno za porušení (jak v názvu, tak v chybách níže).
V tuto chvíli musíme použít logy porušení SELinuxu k jejich analýze a vyřešení.
Logy porušení SELinuxu se ukládají v /var/log/audit/audit.log.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(žádný) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=úspěch'
...
Soubor je plný obsahu a je smíchaný s mnoha systémovými auditními logy, které nemají nic společného se SELinux chybami. Použijeme nástroj sealert k pomoci s analýzou (pokud výzva příkaz nenajde, nainstalujte balíček setroubleshoot).
5.2 Analýza chyb pomocí sealertu
Základní použití příkazů
sealert -a /var/log/audit/audit.log
Po provedení příkazu musí systém věnovat nějaký čas analýze porušení v logech a poskytnout analytickou zprávu. |