文档菜单
文档首页
/
MongoDB 手册
/ / /

自管理LDAP代理身份验证

本页内容

  • 注意事项
  • 通过操作系统LDAP库进行LDAP身份验证
  • 通过saslauthd
  • 通过LDAP身份验证连接到MongoDB服务器

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

MongoDB支持简单和SASL绑定到LDAP服务器

通过
描述
操作系统库

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身份验证的配置。

当连接到LDAP服务器进行身份验证/授权时,MongoDB默认

  • 如果运行在Windows上或

    • 在Linux上,MongoDB企业版二进制文件链接到libldap_r。

    • 则使用连接池

  • 如果运行在Linux上,MongoDB企业版二进制文件链接到libldap。

    • 则不使用连接池

要更改连接池行为,更新ldapUseConnectionPool 参数。

重要

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

  • 启动mongodmongos的用户,或者

  • 该用户所属的组。

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

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

对于链接到 libldap_r 的 MongoDB 4.2 企业版二进制文件,其行为与早期 MongoDB 版本没有变化。

当使用不带 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认证之前配置了用户,但未创建相应的用户管理员。

如果存在不在 $external 数据库中的现有用户,您必须满足以下要求,以确保每个用户的持续访问

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

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

如果您想继续允许不在 $external 数据库中的用户访问,您必须配置 setParameter authenticationMechanisms 以包含适当的 SCRAM-SHA-1 和/或 SCRAM-SHA-256。用户必须在认证时指定 --authenticationMechanism SCRAM-SHA-1SCRAM-SHA-256

对于 副本集,首先在 次要仲裁员 成员上配置LDAP认证,然后再配置 。这也适用于 分片副本集配置服务器副本集。一次配置一个副本集成员,以保持多数成员的写可用性。

分片集群中,您必须在配置服务器和每个mongos上配置 LDAP 认证,以便于集群级用户。您可以选择在每个分片上配置 LDAP 授权,以便于分片本地用户。

以下是对通过操作系统 LDAP 库进行 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配置文件中指定以下设置

选项
描述
必需

host[:port]格式列出逗号分隔的引用包围的LDAP服务器。

您可以在LDAP服务器前缀为srv:srv_raw:

如果您的连接字符串指定了"srv:<DNS_NAME>"mongod将验证"_ldap._tcp.gc._msdcs.<DNS_NAME>"是否存在以支持Active Directory中的SRV。如果找不到,mongod将验证"_ldap._tcp.<DNS_NAME>"是否存在以支持SRV。如果找不到SRV记录,mongod会警告您使用"srv_raw:<DNS_NAME>"

如果您的连接字符串指定了"srv_raw:<DNS_NAME>"mongod将对"<DNS NAME>"执行SRV记录查找。

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

默认值为simple

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

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

默认值为DIGEST-MD5

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

LDAP实体,通过其唯一名称(DN)或SASL名称识别,当MongoDB服务器连接到LDAP服务器时进行认证或绑定。

queryPassword一起使用。

指定的用户必须拥有在LDAP服务器上执行查询的适当权限。

除非指定查询作为userToDNMapping转换的一部分,或者LDAP服务器的安全设置不允许匿名绑定,否则为否。
在通过queryUser使用时,用于认证LDAP服务器的密码。
,除非指定 queryUser
Windows MongoDB 部署可以使用操作系统的凭证代替 queryUserqueryPassword 以进行身份验证或绑定,就像连接到 LDAP 服务器时一样。
,除非替换 queryUserqueryPassword

客户端可能使用与配置的 bind 方法 期望的格式不兼容的格式进行身份验证。例如,simple 绑定可能需要一个完整的 LDAP DN,而用于连接到 MongoDB 的用户名可能是一个电子邮件地址。

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

如果您指定了一个使用 LDAP 查询作为转换一部分的 userToDNMapping 转换,您还必须指定一个具有适当的 LDAP 服务器权限的 queryUser

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

警告

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

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

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

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

  • --auth启用访问控制,

  • --setParameterauthenticationMechanisms设置为PLAIN,并且

  • --setParametersaslauthdPath参数设置为saslauthd实例的Unix域套接字路径。指定空字符串""以使用默认的Unix域套接字路径。

包括您部署所需的任何其他命令行选项。有关 mongod 命令行选项的完整文档,请参阅mongod

  • security.authorization设置为enabled,

  • 使用具有authenticationMechanisms参数设置为PLAINsetParameter,以及

  • 使用具有saslauthdPath设置为saslauthd实例的Unix域套接字路径的setParameter。指定空字符串""以使用默认的Unix域套接字路径。

包括您部署所需的任何其他配置文件设置。有关配置文件的完整文档,请参阅YAML配置文件

您需要创建或更新saslauthd.conf文件,以包含适合您的LDAP服务器的参数。此文档不涵盖saslauthd.conf的记录。

重要

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

  • 启动mongodmongos的用户,或者

  • 该用户所属的组。

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

以下教程提供了配置saslauthd.conf以与两个流行的LDAP服务一起使用的基本信息

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

要通过LDAP认证连接到MongoDB服务器,请在$external数据库中使用以下参数调用db.auth()

选项
描述
用户名
要认证的用户名。
密码
用于认证的密码。
机制
设置为PLAIN

返回

配置带有Kerberos认证和Active Directory授权的MongoDB