2 LDAP

概述

外部 LDAP 认证 可用于检查用户名和密码。

Zabbix LDAP 认证至少可与 Microsoft Active Directory 和 OpenLDAP 一起使用。

如果仅配置了 LDAP 登录,则用户也必须存在于 Zabbix 中,不过其 Zabbix 密码将不会被使用。 如果认证成功,Zabbix 将把本地用户名与 LDAP 返回的用户名属性进行匹配。

用户预配

可以为 LDAP 用户配置 JIT(即时)用户预配。 在这种情况下,不要求用户已存在于 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 服务器列表中的第一个服务器进行身份验证。

配置

配置参数:

参数 描述
Enable LDAP authentication 勾选此复选框以启用 LDAP 认证。
Enable JIT provisioning 勾选此复选框以启用 JIT 自动配置。
Servers 点击 添加 以配置 LDAP 服务器(见下方 LDAP 服务器配置)。
Case-sensitive login 取消勾选此复选框以禁用用户名的大小写敏感 login(默认启用)。
禁用大小写敏感 login 后,例如,即使 Zabbix 用户名为 "Admin" 或 "ADMIN",也可以以 "admin" 登录。
请注意,如果禁用了大小写敏感 login,并且存在多个相似用户名的 Zabbix 用户(例如 Admin 和 admin),这些用户的 login 将始终被拒绝,并显示以下错误信息:"认证失败:提供的凭证不唯一。"
Provisioning period 设置自动配置周期,即用户在使用前端界面时进行自动配置的频率。

LDAP 服务器配置

LDAP 服务器配置参数:

Parameter Description
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 URI,格式为 ldap://hostname:port 或 ldaps://hostname:port。
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 provisioning 相关的选项。
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 媒体 属性(例如 email)映射到 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),并将 BindDNBind password 参数留空。 在身份验证时,占位符 %{user} 将被登录时输入的用户名替换。
使用直接用户绑定时,Zabbix 只能在交互式登录期间访问用户的凭据。 因此,不依赖交互式登录的 provisioning 任务(例如 Provision now 按钮或 user.provision API 方法)会忽略使用直接用户绑定进行身份验证的用户,因为 Zabbix 无法代表他们进行绑定。 如果你需要 provisioning 和 LDAP 搜索能够在前端中工作且无需最终用户登录,请使用匿名绑定或专用绑定用户(服务账户)。

以下字段是作为 Group configuration 方法的 "groupOfNames" 所特有的:

Parameter Description
Group base DN LDAP 服务器中组的基础路径。
Group name attribute 指定在所给组基础路径中获取组名的属性。
组名对于用户组映射是必需的。
Group member attribute 指定包含 LDAP 中组成员信息的属性(例如 member)。
Reference attribute 指定组过滤器的引用属性(参见 Group filter 字段)。
然后在组过滤器中使用 %{ref} 来获取此处指定属性的值。
Group filter 指定用于检索用户所属组的过滤器。
例如,(member=uid=%{ref},ou=Users,dc=example,dc=com) 会在组的 member 属性为 uid=User1,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

测试访问权限

测试按钮允许测试用户访问:

参数 说明
Login 要测试的LDAP用户名(已预填Zabbix前端的当前用户名)。该用户名必须存在于LDAP服务器中。
如果无法验证测试用户,Zabbix将不会启用LDAP认证。
User password 要测试的LDAP用户密码。