2 LDAP
概述
外部 LDAP 身份验证 可用于检查用户名和密码。
Zabbix LDAP 身份验证至少可与 Microsoft Active Directory 和 OpenLDAP 配合使用。
如果仅配置了 LDAP 登录,则用户也必须存在于 Zabbix 中,不过其 Zabbix 密码不会被使用。 如果身份验证成功,Zabbix 将把本地用户名与 LDAP 返回的用户名属性进行匹配。
用户预配
可以为 LDAP 用户配置 JIT(just-in-time,实时)用户预配。 在这种情况下,不要求用户必须已存在于 Zabbix 中。 用户账户可在用户首次登录 Zabbix 时创建。
当 LDAP 用户输入其 LDAP 登录名和密码时,Zabbix 会检查该用户是否存在于默认 LDAP 服务器中。 如果该用户存在且尚未在 Zabbix 中拥有账户,则会在 Zabbix 中创建一个新用户,随后该用户即可登录。
通过 JIT 预配创建的用户,会与创建时设置为默认的 LDAP 服务器(目录)相关联。 之后更改默认 LDAP 服务器,不会更改或更新已完成预配用户所关联的 LDAP 服务器。
如果启用了 JIT 预配,则必须在 Authentication 选项卡中为已取消预配的用户指定一个用户组。
JIT 预配还允许根据 LDAP 中的变更更新已预配的用户账户。 例如,如果某个用户从一个 LDAP 组移动到另一个 LDAP 组,则该用户在 Zabbix 中也会从一个组移动到另一个组;如果某个用户从 LDAP 组中被移除,则该用户在 Zabbix 中也会从相应组中移除,并且如果不属于任何其他组,则会被添加到已取消预配用户的用户组中。 已预配的用户账户会根据配置的预配周期进行更新,或在用户登录 Zabbix 时更新。
请注意,后台预配由 Zabbix 前端 在用户与其交互时执行,或者当用户至少在浏览器中打开了一个前端 页面时执行。 没有专门用于预配用户的后台进程。
LDAP 支持三种绑定到目录以进行身份验证和搜索的方式:
- 匿名绑定 — 不提供 Bind DN / Bind password,并且 LDAP 服务器允许匿名查询。
- 专用绑定用户(服务账户)— 在 Bind DN / Bind password 中设置一个特定的 LDAP 账户,Zabbix 使用该账户进行搜索和预配。
这是推荐且最灵活的选项,因为 Zabbix 无需最终用户凭据即可执行搜索和后台预配。 - 直接用户绑定 — Zabbix 使用用户登录时输入的凭据执行绑定(未配置 Bind DN / Bind password);这是通过在 Base DN 中包含诸如
uid=%{user}之类的占位符来配置的。
在此模式下,Zabbix 仅在用户交互式登录期间可以访问用户的密码。
因此,那些需要在用户登录会话之外向 LDAP 进行身份验证的预配操作(例如,使用 Provision now 按钮,或在用户未主动登录时运行后台预配)将无法进行身份验证,因此也无法工作。
对于直接用户绑定,预配和更新仅在用户登录时发生。
多个服务器
如有需要,可以定义多个 LDAP 服务器。 例如,可以使用不同的服务器对不同的用户组进行身份验证。 配置好 LDAP 服务器后,在用户组配置中即可为相应的用户组选择所需的 LDAP 服务器。
如果某个用户属于多个用户组且涉及多个 LDAP 服务器,则将使用 LDAP 服务器列表中按名称升序排序后的第一个服务器进行身份验证。
配置

配置参数:
| 参数 | 描述 |
|---|---|
| 启用 LDAP 身份验证 | 勾选此复选框以启用 LDAP 身份验证。 |
| 启用 JIT 自动配置 | 勾选此复选框以启用 JIT 自动配置。 |
| 服务器 | 单击 添加 以配置 LDAP 服务器(请参见下方的 LDAP 服务器配置)。 |
| 区分大小写的登录 | 取消勾选此复选框可禁用用户名登录时的大小写敏感性(默认启用)。 禁用大小写敏感登录后,例如,即使 Zabbix 用户为 "Admin" 或 "ADMIN",也可以使用 "admin" 登录。 请注意,如果禁用了大小写敏感登录,并且存在多个用户名相似的 Zabbix 用户(例如 Admin 和 admin),则这些用户的登录将始终被拒绝,并显示以下错误消息:"身份验证失败:提供的凭据不唯一。" |
| 自动配置周期 | 设置自动配置周期,即已登录用户在使用前端期间将以多长时间间隔执行一次自动配置。 |
LDAP 服务器配置

LDAP 服务器配置参数:
| 参数 | 说明 |
|---|---|
| Name | Zabbix 配置中的 LDAP 服务器名称。 |
| Host | LDAP 服务器的主机名、IP 或 URI。示例:ldap.example.com、127.0.0.1、ldap://ldap.example.com 对于安全的 LDAP 服务器,请使用 ldaps 协议和主机名。示例:ldaps://ldap.example.com 对于 OpenLDAP 2.x.x 及更高版本,可以使用格式为 ldap://hostname:port 或 ldaps://hostname:port 的完整 LDAP URI。 |
| Port | LDAP 服务器端口。默认值为 389。 对于安全的 LDAP 连接,端口号通常为 636。 使用完整 LDAP URI 时不使用此参数。 |
| Base DN | LDAP 服务器中用户账户的基础路径: ou=Users,ou=system(用于 OpenLDAP), DC=company,DC=com(用于 Microsoft Active Directory) uid=%{user},dc=example,dc=com(用于直接用户绑定,见下方说明) |
| Search attribute | 用于搜索的 LDAP 账户属性: uid(用于 OpenLDAP), sAMAccountName(用于 Microsoft Active Directory) |
| Bind DN | 用于在 LDAP 服务器上执行绑定和搜索的 LDAP 账户,例如: uid=ldap_search,ou=system(用于 OpenLDAP), CN=ldap_search,OU=user_group,DC=company,DC=com(用于 Microsoft Active Directory) 也支持匿名绑定。请注意,匿名绑定可能会将域配置暴露给未授权用户(有关用户、计算机、服务器、组、服务等的信息)。出于安全原因,请在 LDAP 主机上禁用匿名绑定,并改用已认证访问。 |
| Bind password | 用于在 LDAP 服务器上执行绑定和搜索的账户的 LDAP 密码。 |
| Description | LDAP 服务器的描述。 |
| Configure JIT provisioning | 勾选此复选框以显示与 JIT 自动开通相关的选项。 |
| Group configuration | 选择组配置方法: memberOf - 通过搜索用户及其组成员属性 groupOfNames - 通过 member 属性搜索组 请注意,memberOf 更推荐,因为速度更快;如果您的 LDAP 服务器不支持 memberOf 或需要组过滤,请使用 groupOfNames。 |
| Group name attribute | 指定从 memberOf 属性中的所有对象获取组名的属性(参见 User group membership attribute 字段)组名是用户组映射所必需的。 |
| User group membership attribute | 指定包含用户所属组信息的属性(例如 memberOf)。例如,memberOf 属性可能包含如下信息: memberOf=cn=zabbix-admin,ou=Groups,dc=example,dc=com此字段仅适用于 memberOf 方法。 |
| User name attribute | 指定包含用户名字的属性。 |
| User last name attribute | 指定包含用户姓氏的属性。 |
| User group mapping | 将 LDAP 用户组模式映射到 Zabbix 用户组和用户角色。 这是确定自动开通的用户在 Zabbix 中将获得哪个用户组/角色所必需的。 点击 Add 添加映射。 LDAP group pattern 字段支持通配符。组名必须与现有组匹配。 如果某个 LDAP 用户匹配多个 Zabbix 用户组,则该用户将成为所有这些组的成员。 如果某个用户匹配多个 Zabbix 用户角色,则该用户将获得其中权限级别最高的角色。 |
| Media type mapping | 将用户的 LDAP media 属性(例如电子邮件)映射到 Zabbix 用户媒介以发送通知(属性值将用作媒介的 Send to 字段)。 |
| Advanced configuration | 点击 Advanced configuration 标签以显示高级配置选项(见下文)。 |
| StartTLS | 勾选此复选框以在连接到 LDAP 服务器时使用 StartTLS 操作。如果服务器不支持 StartTLS,连接将失败。 StartTLS 不能与使用 ldaps 协议的服务器一起使用。 |
| Search filter | 定义在 LDAP 中认证用户时使用的自定义字符串。支持以下占位符:%{attr} - 搜索属性名称(uid、sAMAccountName)%{user} - 要认证的用户名值例如,要在不区分大小写的 LDAP 或 Microsoft Active Directory 环境中执行区分大小写的搜索,可以将字符串定义如下: (%{attr}:caseExactMatch:=%{user})。如果未自定义过滤器,LDAP 将使用默认值: (%{attr}=%{user})。 |
要为直接用户绑定配置 LDAP 服务器,请在 Base DN 参数后附加属性 uid=%{user}(例如,uid=%{user},dc=example,dc=com),并将 BindDN 和 Bind password 参数留空。
认证时,占位符 %{user} 将被替换为登录时输入的用户名。
使用直接用户绑定时,Zabbix 仅在交互式登录期间才能访问用户凭据。
因此,在没有交互式登录的情况下执行的自动开通任务(例如 Provision now 按钮或 user.provision API 方法)将忽略使用直接用户绑定进行认证的用户,因为 Zabbix 无法代表他们执行绑定。
如果您需要自动开通和 LDAP 搜索能够从前端运行而无需最终用户登录,请使用匿名绑定或专用绑定用户(服务账户)。
以下字段特定于将“groupOfNames”用作 Group configuration 方法时:

| 参数 | 说明 |
|---|---|
| Group base DN | LDAP 服务器中组的基础路径。 |
| Group name attribute | 指定在指定的组基础路径中获取组名的属性。 组名是用户组映射所必需的。 |
| Group member attribute | 指定包含 LDAP 中组成员信息的属性(例如 member)。 |
| Reference attribute | 指定组过滤器的引用属性(参见 Group filter 字段)。 然后在组过滤器中使用 %{ref} 获取此处指定属性的值。 |
| Group filter | 指定用于检索用户所属组的过滤器。 例如,如果组的 member 属性为 uid=User1,ou=Users,dc=example,dc=com,则 (member=uid=%{ref},ou=Users,dc=example,dc=com) 将匹配“User1”,并返回“User1”所属的组。 |
如果证书存在问题,为了使安全 LDAP 连接(ldaps)正常工作,您可能需要在 /etc/openldap/ldap.conf 配置文件中添加一行 TLS_REQCERT allow。
这可能会降低与 LDAP 目录连接的安全性。
建议创建一个单独的 LDAP 账户(Bind DN),以最小权限在 LDAP 服务器上执行绑定和搜索,而不是使用真实用户账户(用于登录 Zabbix 前端)。
这种方法更安全,并且当用户在 LDAP 服务器中更改自己的密码时,无需修改 Bind password。
在上表中,该账户名称为 ldap_search。
测试访问
点击 测试 按钮可以测试用户访问:
| 参数 | 描述 |
|---|---|
| 登录名 | 要测试的LDAP用户名(从Zabbix前端当前用户名预填)。该用户名必须存在于LDAP服务器中。 如果无法对测试用户进行身份验证,Zabbix将不会启用LDAP身份验证。 |
| 用户密码 | 要测试的LDAP用户密码。 |