自管理LDAP代理身份验证
MongoDB Enterprise 支持通过轻型目录访问协议 (LDAP) 服务转发身份验证请求。
MongoDB 支持与 LDAP 服务器的简单绑定和 SASL 绑定:
通过 | 说明 |
---|---|
操作系统库 | MongoDB支持通过操作系统库绑定到LDAP服务器。 这允许 Linux 和 Windows 上的 MongoDB 服务器使用 LDAP 服务器进行身份验证。 在早期版本中,Microsoft Windows 上的 MongoDB 无法连接到 LDAP 服务器。 |
saslauthd | Linux 上的 MongoDB 服务器支持通过 不适用于 Windows 上的 MongoDB。 |
Considerations
对 LDAP 的完整描述已超出本文档的范围。本页假定您已了解 LDAP。
本文档仅介绍 MongoDB LDAP 身份验证,而不会替代有关 LDAP 的其他资源。在配置 LDAP 身份验证之前,我们建议您全面了解 LDAP 及其相关主题。
MongoDB 可以提供专业服务,为您的 MongoDB 部署提供最佳 LDAP 身份验证配置。
连接池
连接到 LDAP 服务器进行身份验证/授权时,MongoDB 默认:
如果在以下平台上运行,则使用连接池化:
在 Windows 平台上或
在 Linux 上运行,其中 MongoDB Enterprise 二进制文件链接到libldap_r。
如果在以下平台上运行,则不使用连接池化:
在 Linux 上,其中 MongoDB Enterprise 二进制文件链接到libldap。
要更改连接池化行为,请更新 ldapUseConnectionPool
参数。
saslauthd
和目录权限
重要
为 security.sasl.saslauthdSocketPath
或 --setParameter saslauthdPath
指定的 saslauthd
Unix 域套接字文件的父目录必须授予以下任一项读取和执行 (r-x
) 的权限:
如果没有指定 saslauthd
目录及其内容的权限,mongod
或 mongos
无法通过 saslauthd
成功进行身份验证。
libldap
和 libldap_r
对于与 libldap
链接的 MongoDB 4.2 企业版二进制文件(例如在 RHEL 上运行时),对 libldap
的访问是同步进行的,会产生一些性能/延迟成本。
对于链接到 libldap_r
MongoDB 4.2 Enterprise 二进制文件,与早期 MongoDB 版本相比,行为没有变化。
管理 MongoDB 服务器上的 LDAP 用户
用户管理要求管理 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 身份验证之前配置用户,但未创建相应的用户管理员,则可能会出现这种情况。
管理现有的非 LDAP 用户
如果现有的用户没有位于 $external
数据库中,您必须满足每个用户的以下要求以确保持续进行访问:
用户在 LDAP 服务器上有相应的用户对象
$external
数据库中存在具有同等角色和权限的用户
如果您想继续允许不在 $external
数据库上的用户访问,则必须配置 setParameter
authenticationMechanisms
,纳入适当的 SCRAM-SHA-1
和/或 SCRAM-SHA-256
。用户在进行身份验证时必须指定 --authenticationMechanism SCRAM-SHA-1
或 SCRAM-SHA-256
。
在副本集上部署 LDAP 身份验证
对于副本集,先在从节点和仲裁节点上配置 LDAP 身份验证,然后再配置主节点。这也适用于分片副本集或配置服务器副本集。每次配置一个副本集节点,以保持大多数节点的写入可用性。
在分片集群上部署 LDAP 身份验证
在分片集群中,必须在配置服务器上配置 LDAP 身份验证,并为集群级用户配置每个 mongos
身份验证。您可以选择在每个分片上为分片本地用户配置 LDAP 授权。
通过操作系统 LDAP 库进行 LDAP 身份验证
通过操作系统库进行的 LDAP 身份验证过程总结如下:
客户端在 MongoDB 中进行身份验证,并提供用户的凭证。
如果用户名在绑定到 LDAP 服务器之前需要映射到 LDAP DN,则 MongoDB 可以根据配置的
security.ldap.userToDNMapping
设置应用转换。MongoDB 使用所提供的用户名或转换后的用户名(如果应用了转换)绑定到
security.ldap.servers
中指定的 LDAP 服务器。MongoDB 默认使用简单绑定,但如果在
security.ldap.bind.method
和security.ldap.bind.saslMechanisms
中进行了配置,也可以使用sasl
绑定。如果转换需要查询 LDAP 服务器,或者 LDAP 服务器禁止匿名绑定,MongoDB 先使用为
security.ldap.bind.queryUser
和security.ldap.bind.queryPassword
指定的用户名和密码绑定到 LDAP 服务器,然后再尝试对提供的用户凭证进行身份验证。LDAP 服务器将绑定尝试结果返回到 MongoDB。在成功后,MongoDB 尝试对用户进行授权。
MongoDB 服务器尝试将用户名映射到
$external
数据库中的用户,从而为用户分配与匹配用户关联的任何角色或特权。如果 MongoDB 找不到匹配用户,身份验证将失败。客户端可以执行 MongoDB 为经过身份验证的用户授予角色或特权的操作。
要通过操作系统库使用 LDAP 进行身份验证,请将以下设置指定为 mongod
或 mongos
配置文件的一部分:
选项 | 说明 | 必需 |
---|---|---|
引号括起来的逗号分隔的 LDAP 服务器列表,格式为 您可以为 LDAP 服务器添加前缀 如果连接字符串指定 如果您的连接字符串指定了 | 是 | |
用于指定 默认值为 | 否,除非使用 sasl 绑定到 LDAP 服务器。 | |
否,除非将 method 设置为 sasl 并且 您需要不同或额外的 SASL 机制。 | ||
LDAP 实体,由可分辨名称 (DN) 或 SASL 名称标识,MongoDB 服务器在连接到 LDAP 服务器时使用该实体进行身份验证或绑定。 与 指定的用户必须具有相应的特权,才能在 LDAP 服务器上执行查询。 | 否,除非将查询指定为 userToDNMapping 转换的一部分,或者 LDAP 服务器的安全设置禁止匿名绑定。 | |
否,除非指定 queryUser 。 | ||
Windows MongoDB 部署可以使用操作系统档案代替 queryUser 和 queryPassword 进行身份验证或绑定,就像连接 LDAP 服务器时一样。 | 否,除非替换 queryUser 和 queryPassword 。 | |
客户端可以使用格式与配置的
如果您指定的 | 否,除非客户端使用需要转换的用户名进行身份验证。 |
LDAP 身份验证 saslauthd
警告
MongoDB Enterprise for Windows 不支持通过 saslauthd
绑定。
Considerations
Linux MongoDB 服务器支持通过
saslauthd
守护进程绑定到 LDAP 服务器。在客户端和服务器之间以及
saslauthd
和 LDAP 服务器之间使用安全加密或可信连接。LDAP 服务器使用SASL PLAIN
机制,以明文形式发送和接收数据。您应该只使用可信通道,如 VPN、使用 TLS/SSL 加密的连接或可信有线网络。
配置
要将 MongoDB 服务器配置为通过 saslauthd
绑定到 LDAP 服务器,请使用以下命令行选项或以下配置文件设置启动 mongod
:
--auth
启用访问控制,--setParameter
,其中authenticationMechanisms
设置为PLAIN
,然后--setParameter
,其中saslauthdPath
参数设置为saslauthd
实例的 Unix 域套接字的路径。指定空字符串""
以使用默认的 Unix 域套接字路径。
将
security.authorization
设立为enabled
,setParameter
将authenticationMechanisms
参数设立为PLAIN
,以及setParameter
将saslauthdPath
设立为 saslauthd实例的 Unix 域套接字的路径。 指定空string""
以使用默认的 Unix 域套接字路径。
包括部署所需的任何其他配置文件设置。 有关配置文件的完整文档,请参阅YAML 配置文件。
您需要使用适合 LDAP 服务器的参数创建或更新 saslauthd.conf
文件。记录 saslauthd.conf
超出本文档的范围。
重要
为 security.sasl.saslauthdSocketPath
或 --setParameter saslauthdPath
指定的 saslauthd
Unix 域套接字文件的父目录必须授予以下任一项读取和执行 (r-x
) 的权限:
如果没有指定 saslauthd
目录及其内容的权限,mongod
或 mongos
无法通过 saslauthd
成功进行身份验证。
以下教程初步介绍了如何配置 saslauthd.conf
以与两种流行的 LDAP 服务配合使用:
请参阅 saslauthd
以及特定 LDAP 服务的文档以获得指导。
通过 LDAP 身份验证连接到 MongoDB 服务器
要通过 LDAP 身份验证在 MongoDB 服务器中进行身份验证,请使用以下参数对 $external
数据库执行 db.auth()
:
选项 | 说明 |
---|---|
username | 要进行身份验证的用户名。 |
password | 用于进行身份验证的密码。 |
mechanism | 设置为 PLAIN 。 |