Skip to end of metadata
Go to start of metadata

A SELinux érdekes állatfaj, a használatával biztonságosabb lehet a szerverünk, de néha bele tudunk futni fura hibákba, amelyeknek nem feltétlen értjük a forrását. Ilyen hiba lehet az, ha egy saját magunk által írt Munin plugin nem tud lefutni, s az alábbi hibát írja a logba:

/var/log/munin/munin-node.log
2012/06/22-13:20:05 [13773] Error output from jstat_confluence:
2012/06/22-13:20:05 [13773]     Can't exec "/etc/munin/plugins/jstat_confluence": Permission denied at /usr/share/perl5/vendor_perl/Munin/Node/Service.pm line 215, <STDIN> line 37.
2012/06/22-13:20:05 [13773]     # ERROR: Failed to exec.
2012/06/22-13:20:05 [13773] Service 'jstat_confluence' exited with status 42/0.
2012/06/22-13:20:05 [13773] Error output from jstat_confluence:
2012/06/22-13:20:05 [13773]     Can't exec "/etc/munin/plugins/jstat_confluence": Permission denied at /usr/share/perl5/vendor_perl/Munin/Node/Service.pm line 215, <STDIN> line 38.
2012/06/22-13:20:05 [13773]     # ERROR: Failed to exec.
2012/06/22-13:20:05 [13773] Service 'jstat_confluence' exited with status 42/0.

Ránézésre semmi ok nincs arra, hogy ne tudná lefuttatni az adott szkriptet, kézzel indítva remekül lefut, az adott felhasználó nevében is lefut, mindenféle variációban lefut, de a Munin nem futtatja le. Ilyenkor erősen gyanakodjunk arra, hogy a SELinux nem engedi az adott hívást... (smile)

Persze nem egyszerű erre rájönni, mert a SELinux alapból nem írja az audit.log állományba azt, hogy valamit megtagadott, ehhez át kell kapcsolnunk a -D paraméter használatával egyfajta hibakereső módba:

# semodule -DB

Majd erősen figyeljük a munin-releváns eseményeket az aud it.log állományban:

# tail -f /var/log/audit/audit.log | grep munin
type=AVC msg=audit(1340364509.760:42854): avc:  denied  { execute } for  pid=14980 comm="munin-node" name="jstat" dev=xvda1 ino=135170 scontext=unconfined_u:system_r:munin_t:s0 tcontext=unconfined_u:object_r:munin_etc_t:s0 tclass=file
type=SYSCALL msg=audit(1340364509.760:42854): arch=c000003e syscall=59 success=no exit=-13 a0=160b4a0 a1=160b400 a2=15f1c10 a3=7fff0de26710 items=0 ppid=14979 pid=14980 auid=0 uid=99 gid=498 euid=99 suid=0 fsuid=99 egid=498 sgid=0 fsgid=498 tty=(none) ses=4247 comm="munin-node" exe="/usr/bin/perl" subj=unconfined_u:system_r:munin_t:s0 key=(null)

Meg is van a bűnös, már csak létre kell hoznunk a fenti tartalom alapján egy egyedi policy fájlt:

# cat /tmp/munin_jstat_policy | audit2allow -M munin_jstat_policy
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i munin_jstat_policy.pp
# semodule -i munin_jstat_policy.pp
# semodule -l | grep munin_jstat
munin_jstat_policy      1.0

Lezárásképp állítsuk vissza az audit.log naplózását az eredeti állapotra:

# semodule -B

Majd ellenőrizzük le az eredményt, s ha továbbra is hibás működést találunk, akkor ismételjük meg (az előző policy sértés mögé hozzáírva az újabbakat), amíg kapunk elutasító audit.log kimenetet az adott hivással kapcsolatban.

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))