私の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の両方がコンテンツにアクセスできるようにセキュリティコンテキストを設定するにはどうすればよいですか?
ドキュメント で説明されているように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
コマンドを実行し、すすぎ、すべての権限の問題を解決するまで繰り返します。