我有一些需要 sudo 的 Zabbix 检查。这些是 /etc/sudoers.d/zabbix 的内容
zabbix ALL=(ALL) NOPASSWD: /bin/yum history
zabbix ALL=(ALL) NOPASSWD: /bin/needs-restarting
zabbix ALL=(ALL) NOPASSWD: /sbin/check31
zabbix ALL=(ALL) NOPASSWD: /usr/sbin/crm_mon --as-xml
当我从我的 Zabbix 代理强制检查时,我收到以下权限被拒绝错误(pacemaker.status 使用/usr/sbin/crm_mon --as-xml
):
bash-5.0$ zabbix_get -s my-server -k pacemaker.status
sudo: PAM account management error: System error
sudo: unable to send audit message: Permission denied
我通过临时将 SELinux 设置为宽容模式,验证了 SELinux 确实阻止了我的呼叫。
然后,我尝试通过以下步骤允许这些呼叫。
首先,我轮换了审计日志,因为它充满了来自以前问题的不相关信息:
service auditd rotate
然后我从策略中删除了所有 dontaudit:
semodule -DB
zabbix_get
在 Zabbix 代理上,我通过执行如上所述的调用触发了错误。
根据日志,我创建了一个 SELinux 模块并使用以下命令安装它semodule
:
cat /var/log/audit/audit.log | audit2allow -M zabbix-agent
semodule -i zabbix-agent.pp
但是,当我执行时,我在发送审计消息时仍然收到相同的权限被拒绝错误zabbix_get
。我做了一些研究,关闭 dontaudits 应该可以解决问题,并强制 SELinux 记录其他消息以解决此问题,但我这样做了,这对我的情况不起作用。
这是已构建的zabbix-agent.te
文件audit2allow
:
module zabbix-agent 1.0;
require {
type zabbix_agent_t;
type chkpwd_exec_t;
class unix_dgram_socket create;
class file execute_no_trans;
class netlink_audit_socket create;
}
#============= zabbix_agent_t ==============
allow zabbix_agent_t chkpwd_exec_t:file execute_no_trans;
allow zabbix_agent_t self:netlink_audit_socket create;
allow zabbix_agent_t self:unix_dgram_socket create;
答案1
你试过了吗:
setsebool -P zabbix_can_network=1
如果您已经允许上述操作,那么您可以尝试以下操作:
yum install policycoreutils-python
semanage permissive -a zabbix_agent_t
祝你好运
答案2
我遇到了类似的问题(在启用 selinux 的机器上运行 RAID 控制器检查)。
对我来说缺少的环节是:
数据库模块
启用一些非审计策略。然后重新捕获策略。
参考文献为:https://forums.centos.org/viewtopic.php?t=62829 捕获时,首先将 selinux 设置为宽容非常重要。我和你的情况非常类似(在设置为宽容并捕获和应用策略之后):
日志轮换,删除旧日志:
service auditd rotate
semodule -DB(不禁用审计规则)
- 从 zabbix 运行命令(配置 - 主机 - 执行一次)
运行以下命令获取策略文件
grep -i avc /var/log/audit/audit.log | audit2allow -M policyx
跑步
semodule-i policyx.pp
再次在 Zabbix 中运行命令以检查其是否有效
跑步
序列模块-B
再次启用无审计规则。
我的 sudoers 规则如下:
zabbix ALL=(root) NOPASSWD: /opt/MegaRAID/storcli/storcli64
我尝试了 zabbix 用户(具有 nologin shell)是否可以运行如下命令:
su -s /bin/bash -c 'sudo /opt/MegaRAID/storcli/storcli64 /c0 /eall /sall show' zabbix
我建议对您的命令尝试相同的操作,以确保以 zabbix 用户身份正确执行。
我还在 sudoers 和 shadow 文件上使用了 restorecon,但不确定是否有帮助。我还在运行的脚本上设置了 zabbix_agent_t 上下文,但这可能没有效果。
最后但同样重要的一点是,这是我应用的策略文件,它对我有用,也许您可以编译并应用它,看看它是否有效:
cat mypolz1.te
module mypolz1 1.0;
require {
type zabbix_exec_t;
type zabbix_agent_t;
type system_dbusd_t;
class capability { net_admin sys_admin };
class dbus send_msg;
class unix_dgram_socket write;
class file { execute execute_no_trans };
class netlink_audit_socket { read write };
}
#============= zabbix_agent_t ==============
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:capability net_admin;
allow zabbix_agent_t self:capability sys_admin;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:netlink_audit_socket { read write };
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t self:unix_dgram_socket write;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t system_dbusd_t:dbus send_msg;
#!!!! This avc is allowed in the current policy
allow zabbix_agent_t zabbix_exec_t:file { execute execute_no_trans };
正如您所看到的,我设置了一些策略,也许是系统管理员做了这个伎俩(在我运行命令但没有输出之前)。
我认为迭代是关键,因为每一步之后你都会遇到不同的问题,而应用策略可以缓解这些问题。祝你好运!