自管理LDAP代理身份验证
MongoDB Enterprise 支持代理身份验证请求到轻量级目录访问协议 (LDAP) 服务。
MongoDB支持简单和SASL绑定到LDAP服务器
通过 | 描述 |
---|---|
操作系统库 | MongoDB支持通过操作系统库绑定到LDAP服务器。 这允许Linux和Windows上的MongoDB服务器使用LDAP服务器进行身份验证。 在早期版本中,Microsoft Windows上的MongoDB无法连接到LDAP服务器。 |
saslauthd | Linux上的MongoDB服务器支持通过 在Windows上的MongoDB不可用。 |
注意事项
LDAP的完整描述超出了本文档的范围。本页假设您已了解LDAP。
本文档仅描述MongoDB LDAP身份验证,并不替代其他关于LDAP的资源。我们鼓励您在配置LDAP身份验证之前,彻底熟悉LDAP及其相关主题。
MongoDB可以为您的MongoDB部署提供专业服务,以优化LDAP身份验证的配置。
连接池
当连接到LDAP服务器进行身份验证/授权时,MongoDB默认
如果运行在Windows上或
在Linux上,MongoDB企业版二进制文件链接到libldap_r。
则使用连接池
如果运行在Linux上,MongoDB企业版二进制文件链接到libldap。
则不使用连接池
要更改连接池行为,更新ldapUseConnectionPool
参数。
saslauthd
和目录权限
重要
saslauthd
Unix域套接字文件的父目录,指定为security.sasl.saslauthdSocketPath
或--setParameter saslauthdPath
,必须授予读取和执行(r-x
)权限给
如果没有在saslauthd
目录及其内容上指定权限,mongod
或mongos
无法通过saslauthd
成功进行身份验证。
libldap
和 libldap_r
对于链接到 libldap
的 MongoDB 4.2 企业版二进制文件(例如在 RHEL 上运行时),对 libldap
的访问是同步的,这可能会带来一些性能/延迟成本。
对于链接到 libldap_r
的 MongoDB 4.2 企业版二进制文件,其行为与早期 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 服务器并验证用户,同时尊重任何 用户名转换
。身份验证成功后,MongoDB 服务器会检查 $external
数据库中是否存在用户 sam@dba.example.com
,并授予该用户与该用户关联的角色和权限。
要管理 MongoDB 服务器上的用户,您必须以具有相应 MongoDB 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 认证
在分片集群中,您必须在配置服务器和每个mongos
上配置 LDAP 认证,以便于集群级用户。您可以选择在每个分片上配置 LDAP 授权,以便于分片本地用户。
通过操作系统 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服务器前缀为 如果您的连接字符串指定了 如果您的连接字符串指定了 | 是 | |
用于指定 默认值为 | 除非使用 sasl 绑定到LDAP服务器,否则为否。 | |
用于指定 默认值为 | 除非将
| |
LDAP实体,通过其唯一名称(DN)或SASL名称识别,当MongoDB服务器连接到LDAP服务器时进行认证或绑定。 与 指定的用户必须拥有在LDAP服务器上执行查询的适当权限。 | 除非指定查询作为 userToDNMapping 转换的一部分,或者LDAP服务器的安全设置不允许匿名绑定,否则为否。 | |
在通过 queryUser 使用时,用于认证LDAP服务器的密码。 | 否,除非指定 queryUser 。 | |
Windows MongoDB 部署可以使用操作系统的凭证代替 queryUser 和 queryPassword 以进行身份验证或绑定,就像连接到 LDAP 服务器时一样。 | 否,除非替换 queryUser 和 queryPassword 。 | |
客户端可能使用与配置的
如果您指定了一个使用 LDAP 查询作为转换一部分的 | 否,除非客户端使用需要转换的用户名进行身份验证。 |
通过 saslauthd
进行 LDAP 认证
警告
Windows MongoDB Enterprise 不支持通过 saslauthd
绑定。
考虑因素
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域套接字路径。
包括您部署所需的任何其他命令行选项。有关 mongod
命令行选项的完整文档,请参阅mongod。
security.authorization
设置为enabled
,使用具有
authenticationMechanisms
参数设置为PLAIN
的setParameter
,以及使用具有
saslauthdPath
设置为saslauthd实例的Unix域套接字路径的setParameter
。指定空字符串""
以使用默认的Unix域套接字路径。
包括您部署所需的任何其他配置文件设置。有关配置文件的完整文档,请参阅YAML配置文件。
您需要创建或更新saslauthd.conf
文件,以包含适合您的LDAP服务器的参数。此文档不涵盖saslauthd.conf
的记录。
重要
saslauthd
Unix域套接字文件的父目录,指定为security.sasl.saslauthdSocketPath
或--setParameter saslauthdPath
,必须授予读取和执行(r-x
)权限给
如果没有在saslauthd
目录及其内容上指定权限,mongod
或mongos
无法通过saslauthd
成功进行身份验证。
以下教程提供了配置saslauthd.conf
以与两个流行的LDAP服务一起使用的基本信息
请参阅saslauthd
的文档以及您特定的LDAP服务以获取指导。
通过LDAP认证连接到MongoDB服务器
要通过LDAP认证连接到MongoDB服务器,请在$external
数据库中使用以下参数调用db.auth()
选项 | 描述 |
---|---|
用户名 | 要认证的用户名。 |
密码 | 用于认证的密码。 |
机制 | 设置为 PLAIN 。 |