1 访问控制

概述

本节包含以安全方式设置访问控制的最佳实践。

最小权限原则

用户账户在任何时候都应以尽可能少的权限运行。 这意味着 Zabbix 前端中的用户账户、数据库用户,或用于 Zabbix 服务器/proxy/agent 进程的用户,只应拥有执行预期功能所必需的权限。

为 'zabbix' 用户授予额外权限将允许其访问配置文件并执行可能危及基础设施安全的操作。

在配置用户账户权限时,应考虑 Zabbix 前端用户类型。 请注意,尽管 Admin 用户类型的权限少于 Super Admin 用户类型,但它仍然可以管理配置并执行自定义脚本。

即使对于非特权用户,也可以获取某些信息。 例如,虽然 AlertsScripts 仅对 Super Admin 用户可用,但也可以通过 Zabbix API 获取脚本。 在这种情况下,限制脚本权限并从脚本中排除敏感信息(例如访问凭据),有助于避免暴露全局脚本中可用的敏感信息。

为 Zabbix agent 配置安全用户

默认情况下,Zabbix 服务器、proxy 和 agent(或 agent 2)进程共用一个 zabbix 用户。
为防止 Zabbix agent/agent 2(运行在与服务器/proxy 相同的机器上)访问服务器/proxy 配置中的敏感信息(例如数据库凭据),应使用不同的用户运行 agent:

对于 Zabbix agent:

  1. 创建一个安全的组和用户(例如 zabbix-agent)。
  2. 在 agent 配置文件中将此用户设置到 User 参数。
  3. 重启 agent,使其降权到新用户。

对于 Zabbix agent 2,必须在 service 级别应用该配置,因为 agent 2 配置文件不支持 User 参数。
示例请参见 ZBX-26442

撤销对 SSL 配置的写入权限(Windows)

如果你在 Windows 上编译了 Zabbix agent,并且 OpenSSL 位于一个未受保护的目录中(例如 C:\zabbixc:\openssl-64bitC:\OpenSSL-Win64-111-staticC:\dev\openssl),请确保撤销非管理员用户对此目录的写入权限。
否则,agent 会从一个可被非特权用户修改的路径加载 SSL 设置,从而可能导致安全漏洞。

加固 Zabbix 组件的安全性

可以关闭某些功能来加固 Zabbix 组件的安全性:

  • 可通过在服务器配置中设置 EnableGlobalScripts=0 来禁用 Zabbix 服务器上的全局脚本执行。
  • Zabbix proxy 上的全局脚本执行默认已禁用(可通过在proxy 配置中设置 EnableRemoteCommands=1 来启用)。
  • Zabbix agent 上的全局脚本执行默认已禁用(可通过在agent 配置中为每个允许的命令添加 AllowKey=system.run[<command>,*] 参数来启用)。
  • 可通过在前端配置文件zabbix.conf.php)中设置 $ALLOW_HTTP_AUTH=false 来禁用用户 HTTP 身份验证。请注意,重新安装前端(运行 setup.php)会移除此参数。

Zabbix agent 在 Windows 上访问 UNC 路径

Windows 上的 Zabbix agent 会在诸如 vfs.file.*vfs.dir.*modbus.getperf_counter* 等监控项中跟随 UNC 路径(如 \\server\share\file.txt 这样的 SMB 共享)。在某些场景下,这可能带来安全风险。

当 Windows 被要求访问 UNC 路径时,它会尝试在该服务器上进行身份验证。这意味着,针对 Zabbix agent 的恶意请求可能会将 NTLM 哈希暴露给请求方的服务器。用户可以根据需要使用 AllowKeyDenyKey 配置参数来缓解这一问题。