Linux

如何讓 Zabbix Puppet 模組與 SELinux 一起工作

  • February 20, 2019

我正在編寫一個 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 語句正確設置路徑屬性,它會起作用。

引用自:https://serverfault.com/questions/952865