SELinuxový pomocník audit2allow

Se SELinuxem nejsme kamarádi. Používám jej jen na pár linuxových strojích a tak si chci práci s ním maximálně ulehčit. Jako velkého pomocníka jsem objevil audit2allow.

Je jen málo horších věcí než procházet log SELinuxu, hledat co je kde zablokované a pak vymýšlet, jak to odblokovat. Naštěstí se našlo několik osvícených hlav, které vytvořily nástroj dělaný přesně na toto.

Typickým příkladem boje SELinux vs. uživatel je Google Chrome. Ten po nainstalování zpravidla (aspoň mě) nejede. V logu můžete najít něco takového:

type=SYSCALL msg=audit(1341328997.404:61): arch=40000003 syscall=120 success=yes exit=1615 a0=60000011 a1=0 a2=0 a3=0 items=0 ppid=1606 pid=1614 auid=500 uid=500 gid=500 euid=0 suid=0 fsuid=0 egid=500 sgid=500 fsgid=500 tty=(none) ses=2 comm="chrome-sandbox" exe="/opt/google/chrome/chrome-sandbox" subj=unconfined_u:unconfined_r:chrome_sandbox_t:s0-s0:c0.c1023 key=(null)
type=AVC msg=audit(1341328997.415:62): avc:  denied  { execute_no_trans } for  pid=1616 comm="chrome-sandbox" path="/opt/google/chrome/chrome" dev="dm-0" ino=279138 scontext=unconfined_u:unconfined_r:chrome_sandbox_t:s0-s0:c0.c1023 tcontext=system_u:object_r:textrel_shlib_t:s0 tclass=file
type=SYSCALL msg=audit(1341328997.415:62): arch=40000003 syscall=11 success=no exit=-13 a0=bfdd580f a1=bfdd3a28 a2=92b0148 a3=92b00c0 items=0 ppid=1 pid=1616 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=(none) ses=2 comm="chrome-sandbox" exe="/opt/google/chrome/chrome-sandbox" subj=unconfined_u:unconfined_r:chrome_sandbox_t:s0-s0:c0.c1023 key=(null)

Aha. Možná tomu rozumíte. Mě to dělá problémy, tak to proženu zmíněným audit2allow:

# audit2allow < /var/log/audit/auditd.log
 
#============= chrome_sandbox_t ==============
allow chrome_sandbox_t textrel_shlib_t:file execute_no_trans;

Ten našel a vyplivl problém. Výpis je dobré přeletět očima, jestli je tam opravdu jen to, co nás zlobí. Stateční se teď chopí příkazů chcon, restorecon apod. a jdou zkoušet. My ostatní si vygenerujeme modul:

# audit2allow -M mychrome < /var/log/audit/audit.log

Tímto jsme si připravili dva soubory (mychrome.(te|pp)). .te je textová "konfigurace" modulu, ve které si můžete číst. .pp je to stejné, už zkompilované.

module mychrome 1.0;
 
require {
	type textrel_shlib_t;
	type chrome_sandbox_t;
	class file execute_no_trans;
}
 
#============= chrome_sandbox_t ==============
allow chrome_sandbox_t textrel_shlib_t:file execute_no_trans;

K úplnému štěstí nám stačí modul nahrát. Použijte příkaz semodule:

# semodule -i mychrome.pp

A je hotovo. Pokud vám SELinux něco blokoval, měli byste to mít vyřešené. A jestli nemáte, dělali jste něco špatně.

Zdroje:
man audit2allow
Red Hat: Security-Enhanced Linux
Dan Walsh's Blog