
Překlad článku byl připraven pro studenty kurzu
SELinux neboli Security Enhanced Linux je vylepšený mechanismus řízení přístupu, vyvinutý Národním bezpečnostním agenturou USA (NSA), jehož cílem je zabránit škodlivým vniknutím. Implementuje vynucený (nebo mandátní) model řízení přístupu (angl. Mandatory Access Control, MAC) nad existujícím diskréčním (nebo volitelným) modelem (angl. Discretionary Access Control, DAC), tedy oprávněními pro čtení, zápis a vykonávání.
SELinux má tři režimy:
- Enforcing — zakazuje přístup na základě pravidel politiky.
- Permissive — zaznamenává činnosti, které by byly v režimu enforcing zakázány.
- Zakázáno — plné vypnutí SELinuxu.
Výchozí nastavení je v /etc/selinux/config
Změna režimů SELinux
Chcete-li zjistit aktuální režim, spusťte
$ getenforcePro změnu režimu na permissive spusťte následující příkaz
$ setenforce 0nebo pro změnu režimu z permissive na na enforcing, proveďte
$ setenforce 1Pokud potřebujete SELinux zcela vypnout, můžete to udělat pouze prostřednictvím konfiguračního souboru
$ vi /etc/selinux/configChcete-li vypnout, změňte parametr SELINUX následujícím způsobem:
SELINUX=disabledNastavení SELinux
Každý soubor a proces je označen kontextem SELinux, který obsahuje dodatečné informace, jako je uživatel, role, typ atd. Pokud SELinux zapínáte poprvé, je potřeba nejprve nastavit kontext a štítky. Proces přiřazení štítků a kontextu je známý jako označování. Pro zahájení označování v konfiguračním souboru změníme režim na permissive.
$ vi /etc/selinux/config
SELINUX=permissivePo nastavení režimu permissive, vytvoříme v kořenovém adresáři prázdný skrytý soubor s názvem .autorelabel
$ touch /.autorelabela restartujeme počítač
$ init 6Poznámka: Používáme režim permissive pro označování, jelikož použití režimu na enforcing může způsobit pád systému během restartu.
Nestrachujte se, pokud se spuštění zasekne na nějakém souboru, označování nějakou dobu trvá. Po dokončení označování a spuštění systému můžete přejít k konfiguračnímu souboru a nastavit režim na enforcing, a také spustit:
$ setenforce 1Nyní jste úspěšně aktivovali SELinux na svém počítači.
Sledování logů
Můžete mít během označování nebo provozu systému nějaké chyby. Abyste zjistili, jestli váš SELinux funguje správně a neblokuje přístup k nějakému portu, aplikaci atd., je potřeba se podívat na logy. Log SELinuxu se nachází v /var/log/audit/audit.log, ale nemusíte přečíst celé, abyste našli chyby. Můžete použít nástroj audit2why k hledání chyb. Spusťte následující příkaz:
$ audit2why < /var/log/audit/audit.logVýsledkem bude seznam chyb. Pokud v logu žádné chyby nebyly, neobjeví se žádné zprávy.
Nastavení politiky SELinux
Politika SELinux je soubor pravidel, která se řídí bezpečnostním mechanismem SELinux. Politika určuje sadu pravidel pro konkrétní prostředí. Nyní se podíváme, jak nastavovat politiky, abychom umožnili 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 politiky za běhu, aniž by bylo nutné vytvářet nové politiky. Umožňují provádět změny bez restartování nebo překompilování politik SELinux.
Příklad
Předpokládejme, že chceme poskytnout sdílený přístup k domovskému adresáři uživatele přes FTP pro čtení a zápis, a již jsme jej sdíleli, ale při pokusu o přístup nic nevidíme. Je to proto, že politika SELinux zakazuje FTP serveru číst a zapisovat do domovského adresáře uživatele. Musíme změnit politiku, aby FTP server mohl přistupovat k domovským adresářům. Podíváme se, jestli existují nějaké přepínače, spustíme
$ semanage boolean -lTento příkaz vrátí seznam dostupných přepínačů s jejich aktuálním stavem (zapnuto/on nebo vypnuto/off) a popisem. Můžete zpřesnit vyhledávání přidáním grep pro nalezení výsledků vztahujících se pouze k ftp:
$ semanage boolean -l | grep ftpa najdete následující
ftp_home_dir -> off Umožnit ftp číst a zapisovat soubory v domovském adresáři uživateleTento přepínač je vypnutý, proto jej zapneme pomocí setsebool ftp_home_dir on
Nyní náš ftp démon bude mít přístup k domovskému adresáři uživatele.
Poznámka: můžete také získat seznam dostupných přepínačů bez popisu spuštěním getsebool -a
2. Označení a kontext
To je nejběžnější způsob implementace politiky SELinux. Každý soubor, složka, proces a port jsou označeny kontextem SELinux:
- U souborů a složek se označení ukládají jako rozšířené atributy v souborovém systému a lze je zobrazit následujícím příkazem:
$ ls -Z /etc/httpd - U procesů a portů se označováním spravuje jádro, a tato označení lze zkontrolovat následujícím způsobem:
proces
$ ps –auxZ | grep httpdport
$ netstat -anpZ | grep httpdPříklad
Nyní se podívejme na příklad, abychom lépe pochopili značky a kontext. Představme si, že máme webový server, který místo katalogu /var/www/html/ использует /home/dan/html/. SELinux to považuje za porušení politiky, a nebudete moci prohlížet své webové stránky. Je to proto, že jsme nenastavili bezpečnostní kontext související s HTML soubory. Chcete-li zobrazit výchozí bezpečnostní kontext, 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/Zde jsme dostali httpd_sys_content_t jako kontext pro html soubory. Musíme nastavit tento bezpečnostní kontext pro náš aktuální katalog, který má nyní následující kontext:
-rw-r--r--. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/Alternativní příkaz pro kontrolu bezpečnostního kontextu souboru nebo adresáře:
$ semanage fcontext -l | grep '/var/www'Také budeme používat semanage k změně kontextu poté, co najdeme správný bezpečnostní kontext. Chcete-li změnit kontext /home/dan/html, použijte 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/htmlJakmile je kontext změněn pomocí semanage, příkaz restorecon načte výchozí kontext pro soubory a adresáře. Náš webový server nyní bude moci číst soubory z adresáře /home/dan/html, protože byl změněn bezpečnostní kontext pro tuto složku na httpd_sys_content_t.
3. Vytváření místních politik
Může nastat situace, kdy výše uvedené metody pro vás nejsou užitečné a obdržíte chyby (avc/denial) v audit.log. Když k tomu dojde, je třeba vytvořit místní politiku (Local policy). Všechny chyby můžete najít pomocí audit2why, jak bylo uvedeno výše.
K odstranění chyb je možné vytvořit místní politiku. Například, pokud obdržíme chybu související s httpd (apache) nebo smbd (samba), grep’neme chyby a vytvoříme pro ně politiku:
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_policyZde http_policy a smb_policy — to jsou názvy místních politik, které jsme vytvořili. Nyní je třeba tyto vytvořené místní politiky načíst do aktuální politiky SELinux. To lze provést následujícím způsobem:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.ppNaše místní politiky byly načteny, a již bychom neměli dostávat žádné avc nebo denial v audit.log.
To byla má snaha pomoci vám pochopit SELinux. Doufám, že po přečtení tohoto článku se budete cítit s SELinux pohodlněji.
Zdroj: habr.com
