Linux
如何讓 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 一起工作?
MichaelHampton 幫我解決了這個問題,我使用此處的說明創建了 4 個 exec 語句來實現目標。我在 if 語句中將它括起來,以檢查 Zabbix 代理是否已經在執行,因為在 Zabbix 代理已經啟動時執行它會導致它出錯。可能有更好的方法來做到這一點,但這就是我所做的並且效果很好。如果有人在 exec 語句中遇到錯誤,請確保為每個 exec 語句正確設置路徑屬性,它會起作用。