SELinux阻止来自zabbix_agentd的sudo

我有一个Zabbix的自定义用户参数,它调用一个硬件RAID CLI工具(arcconf / megacli)并检查是否有任何arrays降级。 由于这些工具是纯粹的,所以我configuration了sudoers来允许zabbix用户无需密码的访问:

Defaults:zabbix !requiretty Cmnd_Alias ZABBIX_MEGACLI_CMDS = /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -Lall -aALL zabbix ALL = (ALL) NOPASSWD: ZABBIX_MEGACLI_CMDS 

在CentOS 5上,zabbix_agentd运行不受限制,一切正常。 在CentOS 6上,该代理现在在独立的zabbix_agent_t域中运行。 这造成了问题。 最初,sudo二进制文件本身无法执行,但是我添加了这个策略:

 sudo_exec(zabbix_agent_t) 

现在它以不同的方式死亡了:

 type=AVC msg=audit(1407137597.193:157): avc: denied { create } for pid=3145 comm="sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=unix_dgram_socket type=SYSCALL msg=audit(1407137597.193:157): arch=c000003e syscall=41 success=no exit=-13 a0=1 a1=80002 a2=0 a3=1 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="sudo" exe="/usr/bin/sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null) type=AVC msg=audit(1407137597.193:158): avc: denied { create } for pid=3145 comm="sudo" scontext=unconfined_u:system_r:zabbix_agent_t:s0 tcontext=unconfined_u:system_r:zabbix_agent_t:s0 tclass=netlink_audit_socket type=SYSCALL msg=audit(1407137597.193:158): arch=c000003e syscall=41 success=no exit=-13 a0=10 a1=3 a2=9 a3=7fffce049a20 items=0 ppid=3121 pid=3145 auid=0 uid=496 gid=495 euid=0 suid=0 fsuid=0 egid=495 sgid=495 fsgid=495 tty=(none) ses=3 comm="sudo" exe="/usr/bin/sudo" subj=unconfined_u:system_r:zabbix_agent_t:s0 key=(null) 

这是做事的正确方法吗? 我可以添加什么其他策略zabbix_agent_t可以运行sudo? 如果sudo的作品将仍然被限制在zabbix_agent_t域或我应该添加例如TYPE=unconfined_t sudoers线? 我应该采用https://bugzilla.redhat.com/show_bug.cgi?id=917157和s / nrpe_t / zabbix_agent_t /?

编辑:

不知道这是不是最好的主意,但…

 sudo_exec(zabbix_agent_t) domtrans_pattern(zabbix_agent_t, sudo_exec_t, unconfined_t) 

似乎工作。 我想最糟糕的情况就是sudo和sudoers文件的安全性。

处理这个问题的方法是收集关于程序需要什么访问的所有信息,然后明确地只允许在自定义策略模块中进行访问。

这很容易做到。

首先,您将域设置为允许 ,以便SELinux暂时不执行其规则。 它仍然会logging拒绝,稍后您将使用这些日志。

 semanage permissive -a zabbix_agent_t 

接下来,让程序运行,让它做任何需要做的事情。 审计日志将填满将被拒绝的内容,这些日志还会显示需要授予的权限。 然后用ausearch查看这些日志 。

 ausearch -r -m avc -ts today 

我们将生成一个包含必要权限的本地策略模块 。 (您需要在这里使用带有ausearch-r选项,以便输出可以由其他脚本处理。)

如果您看到明显不相关的条目,请将输出redirect到一个文件,然后进行编辑以将其删除。 然后使用这里的文件。

 ausearch -r -m avc -ts today | audit2allow -M zabbix_megacli 

最后,我们安装新的本地策略模块并重新启用SELinux实施。

 semodule -i zabbix_megacli.pp semanage permissive -d zabbix_agent_t