自管理LDAP代理身份验证
MongoDB Enterprise 支持通过轻型目录访问协议 (LDAP) 服务转发身份验证请求。
MongoDB 支持与 LDAP 服务器的简单绑定和 SASL 绑定:
通过 | 说明 |
---|---|
操作系统库 | MongoDB支持通过操作系统库绑定到LDAP服务器。 这允许 Linux 和 Windows 上的 MongoDB 服务器使用 LDAP 服务器进行身份验证。 在早期版本中,Microsoft Windows 上的 MongoDB 无法连接到 LDAP 服务器。 |
| 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授权的情况下使用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 服务器添加前缀 如果连接字符串指定 如果您的连接字符串指定了 | 是 | |
用于指定 默认值为 | 否,除非使用 | |
否,除非将 | ||
LDAP 实体,由可分辨名称 (DN) 或 SASL 名称标识,MongoDB 服务器在连接到 LDAP 服务器时使用该实体进行身份验证或绑定。 与 指定的用户必须具有相应的特权,才能在 LDAP 服务器上执行查询。 | 否,除非将查询指定为 | |
否,除非指定 | ||
Windows MongoDB 部署可以使用操作系统档案代替 | 否,除非替换 | |
客户端可以使用格式与配置的
如果您指定的 | 否,除非客户端使用需要转换的用户名进行身份验证。 |
通过 saslauthd
进行 LDAP 身份验证
警告
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()
:
选项 | 说明 |
---|---|
| 要进行身份验证的用户名。 |
| 用于进行身份验证的密码。 |
| 设置为 |