Docs 菜单

Docs 主页开发应用程序MongoDB Manual

LDAP 代理身份验证

在此页面上

  • 考虑因素
  • 通过操作系统 LDAP 库进行 LDAP 身份验证
  • LDAP 身份验证 saslauthd
  • 通过 LDAP 身份验证连接到 MongoDB 服务器

MongoDB Enterprise支持将身份验证请求代理到轻量级目录访问协议 (LDAP) 服务。

MongoDB 支持与 LDAP 服务器的简单绑定和 SASL 绑定:

通过
说明
操作系统库

从版本 3.4 开始,MongoDB 支持通过操作系统库绑定到 LDAP 服务器。

这允许 Linux 和 Windows 上的 MongoDB 服务器使用 LDAP 服务器进行身份验证。

在早期版本中,Microsoft Windows 上的 MongoDB 无法连接到 LDAP 服务器。

saslauthd

Linux 上的 MongoDB 服务器支持通过 saslauthd 守护进程绑定到 LDAP 服务器。

不适用于 Windows 上的 MongoDB。

对 LDAP 的完整描述已超出本文档的范围。本页假定您已了解 LDAP。

本文档仅介绍 MongoDB LDAP 身份验证,而不会替代有关 LDAP 的其他资源。在配置 LDAP 身份验证之前,我们建议您全面了解 LDAP 及其相关主题。

MongoDB 可以提供专业服务,以便为 MongoDB 部署优化 LDAP 身份验证配置。

从 4.2.0 版开始,在连接到 LDAP 服务器进行身份验证/授权时,默认情况下,MongoDB:

  • 如果在以下平台上运行,则使用连接池化:

    • 在 Windows 平台上或

    • 在 Linux 上运行,其中 MongoDB Enterprise 二进制文件链接到libldap_r。

  • 如果在以下平台上运行,则不使用连接池化:

    • 在 Linux 上,其中 MongoDB Enterprise 二进制文件链接到libldap。

如需更改连接池行为,请更新 ldapUseConnectionPool 参数。

重要

security.sasl.saslauthdSocketPath--setParameter saslauthdPath 指定的 saslauthd Unix 域套接字文件的父目录必须授予以下任一项读取和执行 (r-x) 的权限:

  • 启动 mongodmongos 的用户,或者

  • 该用户所属的组。

如果没有指定 saslauthd 目录及其内容的权限,mongodmongos 无法通过 saslauthd 成功进行身份验证。

对于与 libldap 链接的 MongoDB 4.2 企业版二进制文件(例如在 RHEL 上运行时),对 libldap 的访问是同步进行的,会产生一些性能/延迟成本。

对于链接到 libldap_r MongoDB 4.2 Enterprise 二进制文件,与早期 MongoDB 版本相比,行为没有变化。

用户管理要求管理 LDAP 服务器和 MongoDB 服务器上的用户。对于通过 LDAP 进行身份验证的每个用户,MongoDB 要求 $external 数据库中的用户名与身份验证用户名完全匹配。如果对 LDAP 服务器上的用户进行更改,则可能需要对相应的 MongoDB $external 用户进行更改。

要对$external身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。

例子

用户作为 sam@dba.example.com 进行身份验证。MongoDB 服务器绑定到 LDAP 服务器并对用户进行身份验证,同时进行任何 username transformations。在成功进行身份验证后,MongoDB 服务器检查 $external 数据库中的用户 sam@dba.example.com,并为经过身份验证的用户授予与该用户关联的角色和权限。

要管理 MongoDB 服务器上的用户,您必须作为 LDAP 用户进行身份验证。该用户的相应 MongoDB $external 用户具有 $external 数据库的用户管理特权,例如 userAdmin 提供的特权。

重要

如果没有 $external 用户具有 $external 数据库的用户管理权限,则无法为 LDAP 身份验证执行用户管理。如果您在启用 LDAP 身份验证之前配置用户,但未创建相应的用户管理员,则可能会出现这种情况。

如果现有的用户没有位于 $external 数据库中,您必须满足每个用户的以下要求以确保持续进行访问:

  • 用户在 LDAP 服务器上有相应的用户对象

  • $external 数据库中存在具有同等角色和权限的用户

如果您想继续允许不在 $external 数据库上的用户访问,则必须配置 setParameter authenticationMechanisms,纳入适当的 SCRAM-SHA-1 和/或 SCRAM-SHA-256。用户在进行身份验证时必须指定 --authenticationMechanism SCRAM-SHA-1SCRAM-SHA-256

对于副本集,先在从节点仲裁节点上配置 LDAP 身份验证,然后再配置主节点。这也适用于分片副本集配置服务器副本集。每次配置一个副本集节点,以保持大多数节点的写入可用性。

分片集群中,必须在配置服务器上配置 LDAP 身份验证,并为集群级用户配置每个 mongos 身份验证。您可以选择在每个分片上为分片本地用户配置 LDAP 授权。

版本 3.4 中的新增功能

通过操作系统库进行的 LDAP 身份验证过程总结如下:

  1. 客户端在 MongoDB 中进行身份验证,并提供用户的凭证。

  2. 如果用户名在绑定到 LDAP 服务器之前需要映射到 LDAP DN,则 MongoDB 可以根据配置的 security.ldap.userToDNMapping 设置应用转换。

  3. MongoDB 使用所提供的用户名或转换后的用户名(如果应用了转换)绑定到 security.ldap.servers 中指定的 LDAP 服务器。

    MongoDB 默认使用简单绑定,但如果在 security.ldap.bind.methodsecurity.ldap.bind.saslMechanisms 中进行了配置,也可以使用 sasl 绑定。

    如果转换需要查询 LDAP 服务器,或者 LDAP 服务器禁止匿名绑定,MongoDB 先使用为 security.ldap.bind.queryUsersecurity.ldap.bind.queryPassword 指定的用户名和密码绑定到 LDAP 服务器,然后再尝试对提供的用户凭证进行身份验证。

  4. LDAP 服务器将绑定尝试结果返回到 MongoDB。在成功后,MongoDB 尝试对用户进行授权。

  5. MongoDB 服务器尝试将用户名映射到 $external 数据库中的用户,从而为用户分配与匹配用户关联的任何角色或特权。如果 MongoDB 找不到匹配用户,身份验证将失败。

  6. 客户端可以执行 MongoDB 为经过身份验证的用户授予角色或特权的操作。

要通过操作系统库使用 LDAP 进行身份验证,请将以下设置指定为 mongodmongos 配置文件的一部分:

选项
说明
必需
引号括起来的逗号分隔的 LDAP 服务器列表,格式为 host[:port]

用于指定 mongodmongos 用于身份验证或绑定到 LDAP 服务器的方法。指定 sasl 以使用在 security.ldap.bind.saslMechanisms 中定义的 SASL 协议之一。

默认值为 simple

,除非使用 sasl 绑定到 LDAP 服务器。

用于指定在验证或绑定 LDAP 服务器时可以使用的 SASL 机制 mongodmongos。MongoDB 和 LDAP 服务器必须就至少一种 SASL 机制达成一致。

默认值为 DIGEST-MD5

,除非将 method 设置为 sasl并且 您需要不同或额外的 SASL 机制。

LDAP 实体,由可分辨名称 (DN) 或 SASL 名称标识,MongoDB 服务器在连接到 LDAP 服务器时使用该实体进行身份验证或绑定。

queryPassword 一起使用。

指定的用户必须具有相应的特权,才能在 LDAP 服务器上执行查询。

,除非将查询指定为 userToDNMapping 转换的一部分,或者 LDAP 服务器的安全设置禁止匿名绑定。
,除非指定 queryUser
Windows MongoDB 部署可以使用操作系统档案代替 queryUserqueryPassword 进行身份验证或绑定,就像连接 LDAP 服务器时一样。
,除非替换 queryUserqueryPassword

客户端可以使用格式与配置的 bind method 的预期格式不兼容的用户名进行身份验证。例如,simple 绑定可能需要完整的 LDAP DN,而用于在 MongoDB 中进行身份验证的用户名可能是电子邮件地址。

userToDNMapping 允许 MongoDB 将传入的用户名转换为与 LDAP 模式兼容的格式。MongoDB 支持使用替换模板或 LDAP 查询模板进行转换。

如果您指定的 userToDNMapping 转换将 LDAP 查询作为转换一部分,您还必须为 LDAP 服务器指定具有相应权限级别的 queryUser

,除非客户端使用需要转换的用户名进行身份验证。

警告

MongoDB Enterprise for Windows 不支持通过 saslauthd 绑定。

  • Linux MongoDB 服务器支持通过 saslauthd 守护进程绑定到 LDAP 服务器。

  • 在客户端和服务器之间以及 saslauthd 和 LDAP 服务器之间使用安全加密或可信连接。LDAP 服务器使用 SASL PLAIN 机制,以明文形式发送和接收数据。您应该只使用可信通道,如 VPN、使用 TLS/SSL 加密的连接或可信有线网络。

要将 MongoDB 服务器配置为通过 saslauthd 绑定到 LDAP 服务器,请使用以下命令行选项以下配置文件设置启动 mongod

您需要使用适合 LDAP 服务器的参数创建或更新 saslauthd.conf 文件。记录 saslauthd.conf 超出本文档的范围。

重要

security.sasl.saslauthdSocketPath--setParameter saslauthdPath 指定的 saslauthd Unix 域套接字文件的父目录必须授予以下任一项读取和执行 (r-x) 的权限:

  • 启动 mongodmongos 的用户,或者

  • 该用户所属的组。

如果没有指定 saslauthd 目录及其内容的权限,mongodmongos 无法通过 saslauthd 成功进行身份验证。

以下教程初步介绍了如何配置 saslauthd.conf 以与两种流行的 LDAP 服务配合使用:

请参阅 saslauthd 以及特定 LDAP 服务的文档以获得指导。

要通过 LDAP 身份验证在 MongoDB 服务器中进行身份验证,请使用以下参数对 $external数据库执行 db.auth()

选项
说明
username
要进行身份验证的用户名。
password
用于进行身份验证的密码。
mechanism
设置为 PLAIN
← 使用 Kerberos 身份验证和 Active Directory 授权来配置 MongoDB