在 CentOS(SELinux)上与 Apache 共享 Collectd 数据

在 CentOS(SELinux)上与 Apache 共享 Collectd 数据

我的 CentOS 7 VPS 已启用 SELinux,并由 Collectd 监控。它使用 rrdtool 记录报告的数据。Pommi 发布了一个很好的解决方案,让我能够在名为 CGP 的网页上查看所有数据(http://pommi.nethuis.nl/collectd-graph-panel-v0-4/)。

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

您需要按照以下说明设置 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

运行命令,冲洗并重复,直到解决所有权限问题。

相关内容