Pokračujeme druhým dílen na téma SELinux z rodiny RHEL, Fedora a CentOS.
Přehled základních příkazů SELinuxu
sestatus, getenforce, setenforce, seinfo, getsebool, setsebool
Příkaz sestatus
Příkaz vypíše základní informace o SELinuxu. Výpis vypadá nějak takto:
$ sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 Policy from config file: targeted $
Význam vypsaných parametrů ve výstupu je následující:
SELinux status, informuje v jakém stavu se SELinux nachází. Jsou možné stavy enabled a disabled. (povolen a zakázán)
SELinuxfs mount informuje o přípojném bodu adresáře SELinuxu.
Current mode ukazuje aktuální stav SELinuxu. Může nabývat hodnot enforcing a permissive (vynucující a povolující).
Mode from config file informuje o stavu SELinuxu, který se při bootu načítá z konfiguračního souboru. (Implicitně z /etc/selinux/config.)
Policy version ukazuje verzi pravidel SELinuxu.
Policy from config file určuje typ pravidel, která jsou aplikována. Možné stavy jsou targeted a strict a mls. Režim targeted chrání pouze síťové daemony, režim strict chrání celý operační systém. V RHEL6 již bude režim strict vypuštěn, splynul s režimem targeted.
Tyto informace můžete nalézt i přímo v konfiguračním souboru SELinuxu. Parametry SELinux status a Mode from config file jsou ovšem spatlány, že se tak musím vyjádřit, do proměnné SELINUX. Ta může mít nastavenou hodnotu enforcing, permissive a disabled. Nebo-li vynucující, povolující a zakázaný.
Poznámka:
Na tomto místě bych ještě rád upozornil na změny v ovládání a možnostech SELinuxu. Zcela jiné možnosti nabízí SELinux s Policy Version 18 (RHEL4), 21 (RHEL5) a 22 (RHEL6). (Vše v aktualizovaných verzích.) Jako příklad mohu uvést počet proměnných booleans. 26 v RHEL4 a 263 v RHEL5. Menší změny najdeme i v ovládacím software, zejména při práci s moduly. Při popisu budu vycházet z RHEL5. Na rozdíly se pokusím upozorňovat, i když nezaručuji, že každý příkaz budu testovat na všech verzích RHEL.
Příkazy getenforce a setenforce
Příkaz getenforce informuje o aktuálním módu SELinuxu. Hlásí, jestli je linux ve stavu enforcing (vynucující), permissive (povolující) nebo disabled (zakázaný).
Příkaz
# setenforce 1 #
přepíná SELinux do enforcing módu.
Příkaz
# setenforce 0 #
přepíná SELinux do permissive módu.
Poznámka:
Tyto příkazy jsou naprosto nedocenitelné v době, kdy hledáte příčinu nějakých problémů a potřebujete vědět, jestli je pachatelem SELinux. Pokud po přepnutí do permissive módu vše začne zázračně fungovat, je usvědčen. 😉
Příkaz seinfo
Vypisuje při spuštění bez parametrů základní informace o třídách, typech, uživatelích (z hlediska SELinuxu), booleans, atd.
S parametrem -b vypisuje například proměnné booleans, s parametrem -u uživatele apod. Všechny možnosti parametrů popisují manuálové stránky.
Příkazy getsebool a setsebool
Základní způsob použití příkazu getsebool je:
$ getsebool -a NetworkManager_disable_trans --> off aisexec_disable_trans --> off allow_console_login --> off allow_cvs_read_shadow --> off allow_daemons_dump_core --> on allow_daemons_use_tty --> on .... xm_disable_trans --> off ypbind_disable_trans --> off yppasswdd_disable_trans --> off ypserv_disable_trans --> off ypxfr_disable_trans --> off zebra_disable_trans --> off $
S parametrem -a vypíše všechny booleans s aktuálně nastavenými hodnotami. Druhé použití je getsebool jméno_booleans, kdy nás zajímá jen konkrétní hodnota určité booleans, například:
$ getsebool allow_daemons_use_tty allow_daemons_use_tty --> on¨ $
Pokud vás zajímají parametry http serveru klasický postup je:
$ getsebool -a |grep http allow_httpd_anon_write --> off allow_httpd_bugzilla_script_anon_write --> off allow_httpd_cvs_script_anon_write --> off allow_httpd_mod_auth_pam --> off ... httpd_suexec_disable_trans --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_nfs --> off $
Příkaz setsebool, jak jste již jistě uhodli, nastavuje hodnoty booleans. Syntaxe příkazu je:
# setsebool [-P] jméno_booleans <on|off|1|0>
Parametr -P nastavuje booleans perzistentě, tzn. že tato volba zůstane aktivní i po restartu systému, a dokonce i při změně jádra systému. Pokud je tento parametr vynechán, je booleans nastavena po restartu předchozí hodnota. Poslední parametr může nabývat hodnot „on“, (nebo také „1“) a „off“ (nebo také „0“)
Příklady:
# setsebool -P httpd_can_network_connect_db on #
Příkaz zapne boleans httpd_can_network_connect_db perzistentně. Totéž provede příkaz:
# setsebool -P httpd_can_network_connect_db 1 #
Tuto proměnnou jsem jako příklad nevybral zcela náhodou. Pokud provozujete webový server, který má mít přístup k databázi prostřednictvím sítě (typický přístup k databází MySQL pomocí loopbacku), tato booleans v implicitní hodnotě „off“ způsobí, že i když je vše nastaveno správně, webový server se s databází nespojí. Výše uvedený příkaz problém vyřeší. Pro úplnost připomínám, že je ještě třeba restartovat httpd daemona.
Ti všímavější možná zaznamenali, že na rozdíl od příkazu getsebool, před příkazem setsebool je promt uživatele root. Je to proto, že soubor booleans.local je zapisovatelný pouze superuživatelem. (Viz následující výpis) Ostatní příkazy, které mají informační charakter může používat i neprivilegovaný uživatel. Aby je ale mohl používat ve tvaru uvedeném v příkladech, musí mít nastaveny cestu do adresáře /usr/sbin.
# ll /etc/selinux/targeted/modules/active/booleans.local -rw-r--r-- 1 root root 193 čec 11 20:42 /etc/selinux/targeted/modules/active/booleans.local #
To je v tomto dílu vše. Příště se podíváme trochu podrobněji na příkaz semanage.
Literatura:
Uživatelský manuál pro SELinux RHEL 7
Již výše uvedený odkaz na uživatelský manuál pro SELinux RHEL 4 a 5
Poradna na ABCLinuxu – pár zajímavých vláken k SELinuxu
A samozřejmě – vyhledání tématu SELinux na www.root.cz