web-dev-qa-db-ja.com

収集したデータをCentOS上のApacheと共有する(SELinux)

私のCentOS7 VPSではSELinuxが有効になっており、Collectdによって監視されています。 rrdtoolを使用して、報告されたデータをログに記録します。 Pommiは、CGP( http://pommi.nethuis.nl/collectd-graph-panel-v0-4/ )というWebページですべてのデータを確認できる優れたソリューションをリリースしました。

RRDデータは/var/lib/collectd/my.Host.nameに保存されます

_drwxr-xr-x. root root system_u:object_r:collectd_var_lib_t:s0 my.Host.name_

CGPページを開くと、_Error: No Collectd hosts found in /var/lib/collectd/rrd_と表示されますが、SELinuxを無効にすると、ホストが表示され、正常に動作します。監査ログには次の情報が表示されます。

Audit.logには、次のエントリが含まれています

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

そして

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)

そのため、/ var/lib/collectd/rrdフォルダーとコンテンツのコンテキストを_httpd_sys_content_t_に変更するだけで十分だと思いました。これでCGPが機能し、ホストと統計が表示されます。ただし、collectdを再起動してステータスを確認すると、次のように表示されます。

_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.
_

Collectdとhttpdの両方がコンテンツにアクセスできるようにセキュリティコンテキストを設定するにはどうすればよいですか?

1
Tom

ドキュメント で説明されているようにselinuxポリシーを設定する必要があります

要点は次のとおりです。

[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 };

(これは、次のコマンドを約3回実行し、CGPでクリックした後の最後の反復です。これは、各反復でより多くのアクセスが必要だったためです)

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

semodule -i cgp.pp

コマンドを実行し、すすぎ、すべての権限の問題を解決するまで繰り返します。

4
Andrei Nistor