Compartilhando dados Collectd com o Apache no CentOS (SELinux)

1

Meu VOS do CentOS 7 possui o SELinux ativado e é monitorado pelo Collectd. Ele usa o rrdtool para registrar os dados reportados. A Pommi lançou uma ótima solução que me permitiu revisar todos os dados em uma página da Web chamada CGP ( link ).

Os dados RRD são armazenados em /var/lib/collectd/my.host.name

drwxr-xr-x. root root system_u:object_r:collectd_var_lib_t:s0 my.host.name

Quando abro a página CGP, ele afirma Error: No Collectd hosts found in /var/lib/collectd/rrd mas quando desativo o SELinux meu host aparece e as coisas funcionam normalmente. O log de auditoria mostra:

O audit.log contém as seguintes entradas

type=AVC msg=audit(1410524820.750:15750): avc: denied { getattr } for pid=10468 comm="httpd" path="/var/lib/collectd/rrd" dev="dm-0" ino=72430599 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:collectd_var_lib_t:s0 tclass=dir

e

type=SYSCALL msg=audit(1410524820.750:15750): arch=c000003e syscall=4 success=no exit=-13 a0=7f093426da68 a1=7fff4fa46ae0 a2=7fff4fa46ae0 a3=1 items=0 ppid=10461 pid=10468 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

Então eu pensei que seria suficiente mudar o contexto da pasta / var / lib / collectd / rrd e o conteúdo para httpd_sys_content_t . Agora CGP trabalha e mostra o host e estatísticas. No entanto, quando eu reiniciar o collectd e verificar o status, ele diz:

Sep 12 14:31:31 my.host.name collectd[17910]: stat(/var/lib/collectd/rrd/my.host.name/memory/memory-cached.rrd) failed: Permission denied
Sep 12 14:31:31 my.host.name collectd[17910]: stat(/var/lib/collectd/rrd/my.host.name/memory/memory-free.rrd) failed: Permission denied
Sep 12 14:31:31 my.host.name collectd[17910]: Filter subsystem: Built-in target 'write': Dispatching value to all write plugins failed with status -1.
Sep 12 14:31:31 my.host.name collectd[17910]: stat(/var/lib/collectd/rrd/my.host.name/interface-eth0/if_packets.rrd) failed: Permission denied
Sep 12 14:31:31 my.host.name collectd[17910]: Filter subsystem: Built-in target 'write': Dispatching value to all write plugins failed with status -1.
Sep 12 14:31:31 my.host.name collectd[17910]: stat(/var/lib/collectd/rrd/my.host.name/interface-eth0/if_octets.rrd) failed: Permission denied
Sep 12 14:31:31 my.host.name collectd[17910]: Filter subsystem: Built-in target 'write': Dispatching value to all write plugins failed with status -1.
Sep 12 14:31:31 my.host.name collectd[17910]: Filter subsystem: Built-in target 'write': Dispatching value to all write plugins failed with status -1.
Sep 12 14:31:31 my.host.name collectd[17910]: stat(/var/lib/collectd/rrd/my.host.name/cpu-1/cpu-softirq.rrd) failed: Permission denied
Sep 12 14:31:31 my.host.name collectd[17910]: Filter subsystem: Built-in target 'write': Dispatching value to all write plugins failed with status -1.

Como posso definir o contexto de segurança para que tanto o collectd como o httpd possam acessar o conteúdo?

    
por Tom 12.09.2014 / 12:34

1 resposta

4

Você precisa configurar uma política do selinux conforme descrito em a documentação

Aqui está a essência:

[root@collectd ~]# audit2allow -a


#============= httpd_t ==============

allow httpd_t collectd_var_lib_t:dir read;
allow httpd_t collectd_var_lib_t:file { read getattr open };

(esta é a iteração final depois de executar os próximos comandos em torno de 3 vezes e clicar em CGP, pois cada iteração precisava de mais acesso)

[root@collectd ~]# audit2allow -a -M cgp
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i cgp.pp

Execute o comando, enxague e repita até resolver todos os problemas de permissão.

    
por 23.04.2015 / 17:21