Назад | Перейти на главную страницу

Как заставить модуль 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?

Майкл Хэмптон помог мне разобраться, я воспользовался инструкциями из Вот создать 4 оператора exec, которые достигли бы цели. Я заключил его в оператор if, чтобы проверить, запущен ли уже агент Zabbix, поскольку его запуск, когда агент Zabbix уже запущен, вызывает ошибку. Может быть, есть лучший способ сделать это, но я так и сделал, и он хорошо работает. Если у кого-то возникают ошибки с операторами exec, обязательно правильно установите атрибут path для каждого оператора exec, и он будет работать.