1. Preambula
Bezpečnostne vylepšený Linux (SELinux) je modul jadra Linuxu a bezpečnostný podsystém Linuxu.
SELinux bol primárne vyvinutý NSA. Linuxové jadrá 2.6 a vyššie už integrujú SELinux moduly.
SELinux je veľmi komplexný a obsahuje veľa konceptuálnych vecí, ktoré sa ťažko učia. Mnohí administrátori systémov Linuxu SELinux vypli, pretože ich považujú za problematický.
Ak ovládate SELinux a používate ho správne, myslím, že celý systém môže v podstate dosiahnuť úroveň "nezničiteľnosti" (vždy si pamätajte, že neexistuje absolútna bezpečnosť).
Zvládnutie základných konceptov SELinuxu, ako aj jednoduchých konfiguračných metód, je povinným kurzom pre každého správcu systému Linux.
Tento článok je založený na CentOS 7.4.1708.
Tento článok je čisto osobným vzdelávacím zážitkom, zdieľaním a výmenou, chyby sú nevyhnutné, len pre referenciu! Ak nájdete chybu, prosím, upozornite na ňu, veľmi pekne ďakujem!
2. Úloha SELinuxu a mechanizmus správy povolení
2.1 Úloha SELinuxu
Hlavnou funkciou SELinuxu je minimalizovať zdroje, ku ktorým môžu pristupovať servisné procesy v systéme (princíp najmenšej privilégiá).
Predstavte si, že ak sieťová služba bežiaca ako root má zraniteľnosť 0day, hackeri ju môžu využiť na to, aby robili čokoľvek na vašom serveri ako root. Nie je to desivé?
SELinux je tu, aby tento problém vyriešil.
2.2 DAC
V operačnom systéme, ktorý nepoužíva SELinux, faktorom určujúcim, či je zdroj prístupný, je to, či má zdroj oprávnenia príslušného používateľa (čítať, zapisovať, vykonávať).
Pokiaľ proces pristupujúci k tomuto zdroju spĺňa vyššie uvedené podmienky, je k nemu prístupný.
Najzávažnejším problémom je, že root používatelia nepodliehajú žiadnej regulácii a akékoľvek zdroje v systéme sú prístupné bez obmedzení.
Hlavnou súčasťou tohto mechanizmu správy oprávnení je používateľ, známy aj ako autonómna kontrola prístupu (DAC).
2.3 MAC
V operačnom systéme používajúcom SELinux faktory, ktoré určujú, či je zdroj prístupný, nie sú len vyššie uvedené faktory, ale aj to, či má každý typ procesu prístup k určitému typu zdroja.
Týmto spôsobom, aj keď proces beží ako root, je potrebné určiť typ procesu a typy zdrojov, ku ktorým je možné pristupovať, ešte predtým, než sa rozhodne, či povoliť prístup k zdroju. Aktívny priestor procesu môže byť tiež stlačený na minimum.
Dokonca aj servisný proces bežiaci ako root má zvyčajne prístup len k potrebným zdrojom. Aj keď je program zraniteľný, rozsah dopadu je obmedzený na zdroje, ku ktorým má prístup. Bezpečnosť je výrazne zvýšená.
Hlavnou súčasťou tohto mechanizmu správy oprávnení je proces, známy aj ako povinná kontrola prístupu (MAC).
MAC sa delí na dva spôsoby, jeden sa nazýva režim kategóriovej bezpečnosti (MCS) a druhý režim viacúrovňovej bezpečnosti (MLS).
Nasledujúce akcie sú v režime MCS.
2.4 Porovnanie DAC a MAC
Tu je obrázok na ilustráciu.
Ako vidíte, v režime DAC, pokiaľ má príslušný adresár oprávnenia príslušného používateľa, je prístupný. V MAC režime je tiež obmedzený rozsahom adresárov, ku ktorým môžu procesy pristupovať.
3. Základné koncepty SELinuxu
3.1 Predmet
Dá sa úplne prirovnať k procesu.
Poznámka: Pre jednoduchšie pochopenie, pokiaľ nie je uvedené inak, sa tento proces považuje za hlavné telo nižšie.
3.2 Cieľ
Zdroje, ku ktorým pristupuje riaditeľ. Môžu to byť súbory, adresáre, porty, zariadenia a podobne.
Poznámka: Pre jednoduchšie pochopenie, pokiaľ nie je uvedené inak, sa nasledujúce dokumenty alebo adresáre považujú za objekty.
3.3 Politika a pravidlá
V systéme je zvyčajne veľké množstvo súborov a procesov, a aby sme ušetrili čas a režijné náklady, zvyčajne selektívne regulujeme len určité procesy.
A ktoré procesy je potrebné regulovať a ako ich kontrolovať, určuje politika.
V poistke je viacero pravidiel. Niektoré pravidlá je možné podľa potreby povoliť alebo vypnúť (ďalej len Booleovské pravidlá).
Pravidlá sú modulárne a rozšíriteľné. Pri inštalácii novej aplikácie môže aplikácia pridávať pravidlá pridaním nových modulov. Používatelia môžu tiež manuálne pridávať alebo odoberať pravidlá.
V systéme CentOS 7 existujú tri sady politík, a to:
1. Targeted: Riadi väčšinu procesov sieťových služieb. Toto je politika, ktorú systém používa štandardne (všetky nižšie uvedené sú použité).
2. Minimum: Na základe cieľových sú regulované len vybrané procesy sieťových služieb. Vo všeobecnosti nie.
3. MLS: Viacúrovňová bezpečnostná ochrana. Regulujte všetky procesy. Toto je najprísnejšia politika a konfigurácia je veľmi náročná. Vo všeobecnosti sa nepoužíva, pokiaľ nie sú extrémne vysoké požiadavky na bezpečnosť.
Politiky je možné nastaviť v /etc/selinux/config.
3.4 Bezpečnostný kontext
Bezpečnostný kontext je jadrom SELinuxu.
Bezpečnostný kontext rozdeľujem na "kontext bezpečnosti procesu" a "kontext bezpečnosti dokumentov".
Kontext bezpečnosti procesu zvyčajne zodpovedá viacerým bezpečnostným kontextom dokumentov.
Iba keď bezpečnostný kontext týchto dvoch súborov zodpovedá, môže proces pristupovať k súboru. Ich korešpondencia je určená pravidlami v poistke.
Bezpečnostný kontext súboru je určený miestom vytvorenia súboru a procesom, ktorý ho vytvoril. Systém má sadu predvolených hodnôt a používatelia si môžu nastaviť aj predvolené hodnoty.
Je dôležité si uvedomiť, že samotné presúvanie súborov nemení bezpečnostný kontext vašich súborov.
Štruktúra a význam bezpečnostného kontextu
Bezpečnostný kontext má štyri polia, oddelené dvojbodkami. Tvar napríklad: system_u:object_r:admin_home_t:s0.
3.5 Pracovný režim SELinux
SELinux má tri režimy fungovania, a to:
1. vynucovanie: Vynútený režim. Porušenia pravidiel SELinux budú blokované a zaznamenávané do logov.
2. Permisívne: Režim tolerancie. Porušenia pravidiel SELinux sa zaznamenávajú len v logoch. Väčšinou na ladenie.
3. deaktivované: Vypnite SELinux.
Pracovný režim SELinux je možné nastaviť v /etc/selinux/config.
Ak chcete prejsť z deaktivovaného režimu na vynucovanie alebo povolenie, budete musieť systém reštartovať. A naopak.
Režim vynucovania a povolenia je možné rýchlo prepínať príkazom Setenforce 1|0.
Je dôležité poznamenať, že ak systém beží so SELinuxom vypnutým už nejaký čas, prvé reštartovanie po zapnutí SELinuxu môže byť pomalšie. Pretože systém musí vytvoriť bezpečný kontext pre súbory na disku (povedal som, že som reštartoval asi 10 minút a myslel som si, že je mŕtvy...... )。
SELinux logy je potrebné zaznamenávať pomocou auditd.service, prosím, nedeaktivujte ho.
3.6 Workflow SELinux
Tu je citát z obrázka, bez veľkého vysvetlenia.
Poznámka: Bezpečnostný text vyššie sa vzťahuje na bezpečnostný kontext.
4. Základné operácie SELinuxu
4.1 Dotaz na bezpečnostný kontext súboru alebo adresára
Základné použitie príkazov
ls -Z
Príklady použitia
Opýtajte sa na bezpečnostný kontext /etc/hosts.
ls -Z /atď/hostitelia
Výsledky vykonania
-RW-r--R--. koreňový system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Dotaz na bezpečnostný kontext procesu
Základné použitie príkazov
ps auxZ | grep -v grep | Grep
Príklady použitia
Dotazujte sa na bezpečnostný kontext procesov súvisiacich s Nginx.
ps auxZ | grep -v grep | Grep Nginx
Výsledky vykonania
system_u:system_r:httpd_t:s0 odmocniny 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 Manuálna úprava bezpečnostného kontextu súboru alebo adresára
Základné použitie príkazov
CHCON [...]
Voliteľná funkcia -u Upraviť používateľské pole bezpečnostného kontextu -r Upraviť pole roly bezpečnostného kontextu -t Upraviť pole typu bezpečnostného kontextu -l Upraviť pole úrovne bezpečnostného kontextu --referencia Upraviť bezpečnostný kontext v súlade so špecifikovaným súborom alebo adresárom -R Rekurzívna operácia -h Upraviť bezpečnostný kontext softvérového odkazu (upraviť príslušný súbor mäkkého odkazu bez tejto možnosti)
Príklady použitia
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átiť bezpečnostný kontext súboru alebo adresára na jeho predvolenú hodnotu
Základné použitie príkazov
Restorecon [možnosti] [...]
Voliteľná funkcia - V Tlačová operácia - R Rekurzívna operácia
Príklady použitia
Po pridaní niektorých webových súborov do adresára vášho Nginx servera nastavte správny bezpečnostný kontext pre tieto nové súbory.
restorecon -R /usr/share/nginx/html/
4.5 Dotaz na booleovské pravidlá a ich postavenie v systéme
Základné použitie príkazov
getsebool -a
Keďže príkaz dotazuje buď všetky pravidlá, alebo len jedno pravidlo, zvyčajne najprv dotazuje všetky pravidlá a potom filtruje pomocou grep.
Príklady použitia
Vyhľadajte Booleovské pravidlá týkajúce sa httpd.
getsebool -a | grep httpd
Výsledky vykonania
httpd_anon_write --> preč
httpd_builtin_scripting -->
httpd_can_check_spam -->
httpd_can_connect_ftp --> preč
#以下省略
4.6 Prepínanie booleovského pravidla
Základné použitie príkazov
Setsebool [Možnosť]
Voliteľná funkcia -P reštart stále platí
Príklady použitia
Zapnite httpd_anon_write pravidlá.
setsebool -P httpd_anon_write on
4.7 Pridanie predvoleného bezpečnostného kontextu pre adresár
Základné použitie príkazov
semanage fcontext -a -t "(/.*)?"
Poznámka: Predvolený bezpečnostný kontext adresára alebo súboru je možné zobraziť pomocou príkazu semanage fcontext -l v kombinácii s filtrovaním grep.
Príklady použitia
Po pridaní nového adresára /usr/share/nginx/html2 do Nginx musíte nastaviť rovnaký predvolený bezpečnostný kontext ako pre pôvodný adresár.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Pridaj porty, ktoré sú povolené určitými typmi procesov
Základné použitie príkazov
semanage port -a -t -p
Poznámka: Čísla portov povolené pre rôzne typy služieb je možné zobraziť pomocou príkazu semanage port -l s filtrovaním grep.
Príklady použitia
Pre Nginx musíte použiť port 10080 pre HTTP služby.
SeManage port -a -t http_port_t -p TCP 10080
5. Analýza a riešenie chýb SELinux
5.1 Pochopenie SELinux logov
Keď je SELinux povolený, bežné správanie mnohých služieb sa považuje za porušenie (ako v názve, tak aj v chybách nižšie).
V súčasnosti potrebujeme použiť logy porušenia SELinuxu na ich analýzu a vyriešenie.
Záznamy o porušeniach SELinux sa ukladajú 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=(žiadny) 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=úspech'
...
Súbor je plný obsahu a je zmiešaný s množstvom systémových auditných logov, ktoré nemajú nič spoločné so SELinux chybami. Na analýzu použijeme nástroj sealert (ak výzva príkaz nenájde, nainštalujeme balík setroubleshoot).
5.2 Analýza chýb pomocou sealertu
Základné použitie príkazov
SEALERT -a /var/log/audit/audit.log
Po vykonaní príkazu musí systém venovať čas analýze porušení v logoch a poskytnúť analytickú správu. |