Průvodce pro začátečníky k SELinuxu

Průvodce pro začátečníky k SELinuxu

Překlad článku byl připraven pro studenty kurzu Bezpečnost Linuxu

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:

  1. Enforcing — zakazuje přístup na základě pravidel politiky.
  2. Permissive — zaznamenává činnosti, které by byly v režimu enforcing zakázány.
  3. 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

$ getenforce

Pro změnu režimu na permissive spusťte následující příkaz

$ setenforce 0

nebo pro změnu režimu z permissive na na enforcing, proveďte

$ setenforce 1

Pokud potřebujete SELinux zcela vypnout, můžete to udělat pouze prostřednictvím konfiguračního souboru

$ vi /etc/selinux/config

Chcete-li vypnout, změňte parametr SELINUX následujícím způsobem:

SELINUX=disabled

Nastavení 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=permissive

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

$ touch /.autorelabel

a restartujeme počítač

$ init 6

Pozná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 1

Nyní 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.log

Vý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 -l

Tento 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 ftp

a najdete následující

ftp_home_dir        -> off       Umožnit ftp číst a zapisovat soubory v domovském adresáři uživatele

Tento 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 httpd

port

$ netstat -anpZ | grep httpd

Pří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/html

Jakmile 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_policy

Zde 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.pp

Naš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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster