如何让 Zabbix Puppet 模块与 SELinux 协同工作

如何让 Zabbix Puppet 模块与 SELinux 协同工作

我正在编写一个 Puppet 模块,用于将 Zabbix 安装到 Puppet 代理上。一切工作正常,但 SELinux 与 Zabbix 配合不佳。我在审计日志中收到来自 SELinux 的以下错误:

type=AVC msg=audit(% audit_id): avc:  denied  { connect } for  pid=2383 comm="zabbix_agentd" scontext=system_u:system_r:zabbix_agent_t:s0 tcontext=system_u:system_r:zabbix_agent_t:s0 tclass=unix_dgram_socket permissive=0

我把我的 Puppet 类改成这样本网站作为参考:

class { 'zabbix::agent':
    server => '<server_ip>',
        tlsaccept => 'psk',
        tlsconnect => 'psk',
        tlspskfile => $pskfilepath,
        tlspskidentity => $pskidentity,
        manage_selinux => true,
        selinux_require => [
            'type kernel_t',
            'type devlog_t',
            'type zabbix_agent_t',
            'class sock_file write',
            'class process setrlimit', 
            'class unix_dgram_socket {connect create sendto}',
    ],
    selinux_rules => { 'zabbix_agent_t' => [
            'allow zabbix_agent_t kernel_t:unix_dgram_socket sendto',
            'allow zabbix_agent_t self:process setrlimit',
            'allow zabbix_agent_t self:unix_dgram_socket { connect create }',
    ]
  }

现在,我得到的是这个:

type=AVC msg=audit($audit_id): avc: denied { write } for pid=4293 comm="zabbix_agentd" name="log" dev="devtmpfs" ino=8160 scontext=system_u:system_r:zabbix_agent_t:s0 tcontext=system_u:object_r:devlog_t:s0 tclass=sock_file permissive=0

它从 变为{ connect }{ write }有人能告诉我为什么 SELinux 不能与 Zabbix 很好地协同工作吗?

答案1

MichaelHampton 帮我解决了这个问题,我使用了这里创建 4 个 exec 语句来实现目标。我将其放在 if 语句中,以检查 Zabbix 代理是否已在运行,因为在 Zabbix 代理已启动时运行它会导致错误。可能有更好的方法,但这就是我所做的,而且效果很好。如果有人在使用 exec 语句时遇到错误,请确保为每个 exec 语句正确设置路径属性,这样它就会起作用。

相关内容