centos – 来自zabbix_agentd的SELinux阻止sudo

我有一个Zabbix的自定义用户参数,它调用硬件RAID CLI工具(arcconf / megacli)并检查是否有任何数组降级.由于这些工具只是root用户,因此我配置了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文件的安全性.

处理此问题的方法是收集有关程序所需访问权限的所有信息,然后在自定义策略模块中明确仅允许该访问权限.

这很容易做到.

首先,你set the domain permissive,以便SELinux暂时不强制执行其规则.它仍会记录拒绝,稍后您将使用这些日志.

semanage permissive -a zabbix_agent_t

接下来,让程序运行并让它做任何需要做的事情. audit log将填满已被拒绝的内容,这些日志还会显示需要授予的权限.然后view these logs with ausearch.

ausearch -r -m avc -ts today

我们将generate a local policy module包含必要的权限. (您需要在此处使用-r选项和ausearch,以便其他脚本可以处理输出.)

如果您看到明显不相关的条目,请将输出重定向文件,然后对其进行编辑以将其删除.然后在这里使用该文件.

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

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

semodule -i zabbix_megacli.pp
semanage permissive -d zabbix_agent_t

相关文章

Centos下搭建性能监控Spotlight
CentOS 6.3下Strongswan搭建IPSec VPN
在CentOS6.5上安装Skype与QQ
阿里云基于centos6.5主机VPN配置
CentOS 6.3下配置multipah
CentOS安装、配置APR和tomcat-native