Úvod
Security Enhanced Linux nebo SELinux je pokročilý mechanismus řízení přístupu zabudovaný do většiny moderních distribucí Linuxu. Původně jej vyvinula americká Národní bezpečnostní agentura, aby chránila počítačové systémy před škodlivým vniknutím a neoprávněnou manipulací. Postupem času byl SELinux uvolněn ve veřejné doméně a různé distribuce jej od té doby začlenily do svého kódu
Mnoho systémových administrátorů považuje SELinux za poněkud neprobádané území. Téma se může zdát skličující a místy dost matoucí. Správně nakonfigurovaný systém SELinux však může výrazně snížit bezpečnostní rizika a znalost tohoto systému vám může pomoci při odstraňování chybových zpráv souvisejících s přístupem. V tomto tutoriálu se seznámíme s koncepty SELinuxu – jeho balíčky, příkazy a konfigurační soubory
Instalace balíčků SELinux
V SELinuxu se používá řada balíčků. Některé jsou nainstalovány ve výchozím nastavení. Zde je seznam distribucí založených na Red Hatu:
- policycoreutils (poskytuje nástroje pro správu SELinuxu)
- policycoreutils-python (poskytuje nástroje pro správu SELinuxu)
- zásady selinux (poskytuje referenční politiku SELinux)
- selinux-policy-targeted (poskytuje cílenou politiku SELinux)
- libselinux-utils (poskytuje některé nástroje pro správu SELinuxu)
- setroubleshoot-server (poskytuje nástroje pro dešifrování zpráv protokolu auditu)
- nástroje (poskytuje nástroje pro monitorování protokolu auditu, politiku dotazování a správu kontextu souborů)
- setools-console (poskytuje nástroje pro monitorování protokolu auditu, politiku dotazování a správu kontextu souborů)
- mcstrans (nástroje pro převod různých úrovní do snadno srozumitelného formátu)
Některé z nich jsou již nainstalovány. Chcete-li zkontrolovat, jaké balíčky SELinux jsou nainstalovány ve vašem systému CentOS 7, můžete spustit několik příkazů, jako je ten níže (s různými vyhledávacími výrazy za grep
) jako uživatel root:
rpm -qa | grep selinux
Výstup by měl vypadat nějak takto:
libselinux-utils-2.2.2-6.el7.x86_64
libselinux-2.2.2-6.el7.x86_64
selinux-policy-targeted-3.12.1-153.el7.noarch
selinux-policy-3.12.1-153.el7.noarch
libselinux-python-2.2.2-6.el7.x86_64
Můžete pokračovat a nainstalovat všechny balíčky pomocí příkazu níže (yum pouze aktualizuje všechny, které již máte), nebo pouze ty, které ve vašem systému chybí:
yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
Nyní bychom měli mít systém, ve kterém jsou načteny všechny balíčky SELinux.
Režimy SELinux
Je čas začít si hrát se SELinuxem, takže začněme s režimy SELinux. SELinux může být kdykoli v kterémkoli ze tří možných režimů:
- Vynucování
- Povolné
- Zakázáno
V režimu vynucení bude SELinux vynucovat své zásady v systému Linux a ujistěte se, že jsou zakázány jakékoli pokusy o neoprávněný přístup ze strany uživatelů a procesů. Odepření přístupu se také zapisují do příslušných souborů protokolu. O zásadách SELinux a protokolech auditu si povíme později.
Permisivní režim je jako částečně povolený stav. SELinux neuplatňuje své zásady v permisivním režimu, takže žádný přístup není odepřen. Jakékoli porušení zásad je však stále zaznamenáno v protokolech auditu. Je to skvělý způsob, jak otestovat SELinux před jeho vynucením.
Deaktivovaný režim je samozřejmý – systém nebude fungovat se zvýšeným zabezpečením.
Kontrola režimů a stavu SELinux
Můžeme spustit getenforce
pro kontrolu aktuálního režimu SELinux.
getenforce
SELinux by měl být aktuálně vypnutý, takže výstup bude vypadat takto:
Disabled
Můžeme také spustit sestatus
příkaz:
sestatus
Když je SELinux zakázán, výstup zobrazí:
SELinux status: disabled
Konfigurační soubor SELinux
Hlavní konfigurační soubor pro SELinux je /etc/selinux/config. Pro zobrazení jeho obsahu můžeme spustit následující příkaz:
cat /etc/selinux/config
Výstup bude vypadat nějak takto:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
V tomto souboru jsou dvě směrnice. Direktiva SELINUX určuje režim SELinux a může mít tři možné hodnoty, jak jsme diskutovali dříve.
Povolení a zakázání SELinux
Povolení SELinuxu je poměrně jednoduché; ale na rozdíl od jeho deaktivace by mělo být provedeno ve dvou krocích. Předpokládáme, že SELinux je aktuálně vypnutý a že jste nainstalovali všechny balíčky SELinux z předchozí sekce.
Jako první krok musíme upravit /etc/selinux/config
soubor změnit direktivu SELINUX na permisivní režim.
vi /etc/sysconfig/selinux
...
SELINUX=permissive
...
Nastavení stavu na povolený první je nezbytný, protože každý soubor v systému musí mít svůj kontext označený, než bude možné vynutit SELinux. Pokud nejsou všechny soubory správně označeny, procesy běžící v omezených doménách mohou selhat, protože nemají přístup k souborům se správným kontextem. To může způsobit selhání procesu spouštění nebo spuštění s chybami. Představíme kontexty a domény dále v tutoriálu.
Nyní proveďte restart systému:
reboot
Proces restartu uvidí všechny soubory na serveru označené kontextem SELinux.
Ve druhé fázi musíme upravit konfigurační soubor, abychom změnili direktivu SELINUX z permisivní k vynucení v /etc/sysconfig/selinux
soubor:
...
SELINUX=enforcing
...
Poté znovu restartujte server.
reboot
Jakmile bude server opět online, můžeme spustit sestatus
pro kontrolu stavu SELinuxu. Nyní by měl zobrazit další podrobnosti o serveru:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28