Průvodce SELinuxem pro začátečníky

Průvodce SELinuxem pro začátečníky

Překlad článku připraveného pro studenty kurzu "Zabezpečení Linuxu"

SELinux nebo Security Enhanced Linux je vylepšený mechanismus kontroly přístupu vyvinutý americkou Národní bezpečnostní agenturou (NSA), aby zabránil škodlivým vniknutí. Implementuje vynucený (nebo povinný) model řízení přístupu (anglicky Mandatory Access Control, MAC) nad stávající diskreční (nebo selektivní) model (anglicky Discretionary Access Control, DAC), tedy oprávnění ke čtení, zápisu, spouštění.

SELinux má tři režimy:

  1. Vynucování — odepření přístupu na základě pravidel politiky.
  2. Povolný — vedení záznamu o akcích, které porušují zásady, což by bylo v režimu prosazování zakázáno.
  3. invalidní — úplné zakázání SELinuxu.

Ve výchozím nastavení jsou nastavení in /etc/selinux/config

Změna režimů SELinux

Chcete-li zjistit aktuální režim, spusťte

$ getenforce

Chcete-li změnit režim na permisivní, spusťte následující příkaz

$ setenforce 0

nebo pro změnu režimu permissive na prosazování, provést

$ setenforce 1

Pokud potřebujete zcela zakázat SELinux, lze to provést pouze prostřednictvím konfiguračního souboru

$ vi /etc/selinux/config

Chcete-li deaktivovat, změňte parametr SELINUX následovně:

SELINUX=disabled

Nastavení SELinuxu

Každý soubor a proces je označen kontextem SELinux, který obsahuje další informace, jako je uživatel, role, typ atd. Pokud je to vaše první povolení SELinuxu, budete muset nejprve nakonfigurovat kontext a štítky. Proces přiřazování štítků a kontextu je známý jako značkování. Chcete-li začít s označováním, v konfiguračním souboru změníme režim na permissive.

$ vi /etc/selinux/config
SELINUX=permissive

Po nastavení režimu permissive, vytvořte prázdný skrytý soubor v kořenovém adresáři s názvem autorelabel

$ touch /.autorelabel

a restartujte počítač

$ init 6

Poznámka: Používáme režim permissive pro značení, od použití režimu prosazování může způsobit selhání systému během restartu.

Nebojte se, pokud se stahování zasekne u některého souboru, označení chvíli trvá. Jakmile je označení dokončeno a váš systém je zaveden, můžete přejít do konfiguračního souboru a nastavit režim prosazovánía také spustit:

$ setenforce 1

Nyní jste úspěšně povolili SELinux na vašem počítači.

Sledování protokolů

Při označování nebo při běhu systému jste mohli narazit na nějaké chyby. Chcete-li zkontrolovat, zda váš SELinux funguje správně a zda neblokuje přístup k některému portu, aplikaci atd., musíte se podívat na protokoly. Protokol SELinux se nachází v /var/log/audit/audit.log, ale nemusíte číst celou věc, abyste našli chyby. K nalezení chyb můžete použít obslužný program audit2why. Spusťte následující příkaz:

$ audit2why < /var/log/audit/audit.log

V důsledku toho obdržíte seznam chyb. Pokud v protokolu nebyly žádné chyby, nebudou se zobrazovat žádné zprávy.

Konfigurace zásad SELinux

Politika SELinux je sada pravidel, kterými se řídí bezpečnostní mechanismus SELinux. Zásada definuje sadu pravidel pro konkrétní prostředí. Nyní se naučíme, jak nakonfigurovat zásady, které umožní přístup k zakázaným službám.

1. Logické hodnoty (přepínače)

Přepínače (booleans) umožňují měnit části zásady za běhu, aniž byste museli vytvářet nové zásady. Umožňují vám provádět změny bez restartu nebo rekompilace zásad SELinuxu.

příklad
Řekněme, že chceme sdílet domovský adresář uživatele pomocí FTP pro čtení/zápis a už jsme ho sdíleli, ale když se k němu pokusíme získat přístup, nic nevidíme. Je to proto, že zásady SELinuxu brání FTP serveru číst a zapisovat do domovského adresáře uživatele. Musíme změnit zásady, aby měl FTP server přístup k domovským adresářům. Podívejme se, zda pro to existují nějaké přepínače

$ semanage boolean -l

Tento příkaz zobrazí seznam dostupných přepínačů s jejich aktuálním stavem (zapnuto nebo vypnuto) a popisem. Vyhledávání můžete upřesnit přidáním grep, abyste našli pouze výsledky ftp:

$ semanage boolean -l | grep ftp

a zjistíte následující

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Tento přepínač je deaktivován, takže jej povolíme pomocí setsebool $ setsebool ftp_home_dir on

Nyní bude mít náš ftp démon přístup k domovskému adresáři uživatele.
Poznámka: Seznam dostupných přepínačů bez popisu můžete získat také provedením getsebool -a

2. Označení a kontext

Toto je nejběžnější způsob implementace zásad SELinux. Každý soubor, složka, proces a port je označen v kontextu SELinux:

  • U souborů a složek jsou štítky uloženy jako rozšířené atributy v systému souborů a lze je zobrazit pomocí následujícího příkazu:
    $ ls -Z /etc/httpd
  • U procesů a portů je označování spravováno jádrem a tyto štítky můžete zobrazit následovně:

proces

$ ps –auxZ | grep httpd

порт

$ netstat -anpZ | grep httpd

příklad
Nyní se podívejme na příklad, abychom lépe porozuměli popiskům a kontextu. Řekněme, že máme webový server, který místo adresáře /var/www/html/ использует /home/dan/html/. SELinux to bude považovat za porušení zásad a nebudete moci prohlížet své webové stránky. Důvodem je, že jsme nenastavili kontext zabezpečení spojený se soubory HTML. Chcete-li zobrazit výchozí kontext zabezpečení, použijte následující příkaz:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Tady to máme httpd_sys_content_t jako kontext pro html soubory. Tento kontext zabezpečení musíme nastavit pro náš aktuální adresář, který má aktuálně následující kontext:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Alternativní příkaz ke kontrole kontextu zabezpečení souboru nebo adresáře:

$ semanage fcontext -l | grep '/var/www'

Jakmile najdeme správný kontext zabezpečení, použijeme také semanage ke změně kontextu. Chcete-li změnit kontext /home/dan/html, spusťte následující příkazy:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Po změně kontextu pomocí semanage příkaz restorecon načte výchozí kontext pro soubory a adresáře. Náš webový server nyní bude moci číst soubory ze složky /home/dan/htmlprotože kontext zabezpečení pro tuto složku byl změněn na httpd_sys_content_t.

3. Vytvořte místní zásady

Mohou nastat situace, kdy vám výše uvedené metody nebudou k ničemu a v audit.log se zobrazí chyby (avc/denial). Když k tomu dojde, musíte vytvořit místní politiku. Všechny chyby můžete najít pomocí audit2why, jak je popsáno výše.

Můžete vytvořit místní zásady pro řešení chyb. Například dostaneme chybu související s httpd (apache) nebo smbd (samba), chyby grepujeme a vytvoříme pro ně zásady:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Zde http_policy и smb_policy jsou názvy místních zásad, které jsme vytvořili. Nyní musíme tyto vytvořené místní zásady načíst do aktuální zásady SELinuxu. To lze provést následovně:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Naše místní zásady byly staženy a v audit.log bychom již neměli dostávat žádné avc ani denail.

Toto byl můj pokus pomoci vám porozumět SELinuxu. Doufám, že po přečtení tohoto článku se budete se SELinuxem cítit pohodlněji.

Zdroj: www.habr.com

Přidat komentář