SELinux na RHEL a CentOS prakticky II.

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

Napsat komentář

Vaše emailová adresa nebude zveřejněna.