mongoldap
在本页面
3.4 版中的新功能:MongoDB Enterprise
Synopsis
MongoDB 提供mongoldap来针对正在运行的 LDAP 服务器或一组服务器测试 MongoDB 的 LDAP configuration options。
要验证配置文件中的 LDAP 选项,请将mongoldap --config选项设置为配置文件的路径。
要测试 LDAP 配置选项,必须指定--user和--password
。 mongoldap模拟对使用提供的配置选项和凭据运行的 MongoDB 服务器的身份验证。
mongoldap返回的报告包括 LDAP 认证或授权过程中任何步骤的成功或失败。错误消息包括有关遇到的特定错误的信息以及解决该错误的潜在建议。
在配置与LDAP authorization相关的选项时,mongoldap执行使用提供的配置选项和用户名构造的 LDAP 查询,并在admin
数据库上返回授权用户的角色列表。
在为用户访问控制配置LDAP 授权角色时,可以使用此信息。例如,使用mongoldap确保您的配置允许特权用户获得执行其预期任务所需的角色。同样,使用mongoldap来确保您的配置禁止非特权用户获得访问 MongoDB 服务器或执行未授权操作的角色。
配置与LDAP authentication相关的选项时,请使用mongoldap以确保身份验证操作按预期进行。
从系统命令行运行mongoldap,而不是mongo shell。
本文档提供了mongoldap的所有命令行选项的完整概述。
Usage
Note
LDAP 或 Active Directory 的完整描述超出了本文档的范围。
考虑以下 samples 配置文件,该文件旨在支持通过 Active Directory 进行 LDAP 身份验证和授权:
security:
authorization: "enabled"
ldap:
servers: "activedirectory.example.net"
bind:
queryUser: "mongodbadmin@dba.example.com"
queryPassword: "secret123"
userToDNMapping:
'[
{
match : "(.+)",
ldapQuery: "DC=example,DC=com??sub?(userPrincipalName={0})"
}
]'
authz:
queryTemplate: "DC=example,DC=com??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"
setParameter:
authenticationMechanisms: "PLAIN"
您可以使用mongoldap来验证配置文件,该文件将返回该过程的报告。您必须为mongoldap指定用户名和密码。
mongoldap --config <path-to-config> --user "bob@dba.example.com" --password "secret123"
如果提供的凭据有效,并且配置文件中的 LDAP 选项有效,则输出可能如下:
Checking that an LDAP server has been specified...
[OK] LDAP server found
Connecting to LDAP server...
[OK] Connected to LDAP server
Parsing MongoDB to LDAP DN mappings..
[OK] MongoDB to LDAP DN mappings appear to be valid
Attempting to authenticate against the LDAP server...
[OK] Successful authentication performed
Checking if LDAP authorization has been enabled by configuration...
[OK] LDAP authorization enabled
Parsing LDAP query template..
[OK] LDAP query configuration template appears valid
Executing query against LDAP server...
[OK] Successfully acquired the following roles:
...
Options
-
mongoldap
-
--config
<filename>
,
-f
<filename>
- 指定运行时配置选项的配置文件。这些选项等效于命令行配置选项。有关更多信息,请参见配置文件选项。
mongoldap 使用与LDAP 代理验证或LDAP Authorization相关的任何配置选项来测试 LDAP 身份验证或授权。
需要指定--user。可以接受--password测试 LDAP 身份验证。
确保配置文件使用 ASCII 编码。 mongoldap 实例不支持使用非 ASCII 编码的配置文件,包括 UTF-8.
-
--user
<string>
- 尝试 LDAP 认证或授权时使用的 mongoldap 的用户名。
-
--password
<string>
- 尝试进行 LDAP 认证时使用的 mongoldap
--user
的密码。 LDAP 授权不需要。
- 尝试进行 LDAP 认证时使用的 mongoldap
-
--ldapServers
<host1>:<port>,<host2>:<port>,...,<hostN>:<port>
- 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
Mongoldap 对其进行身份验证的 LDAP 服务器或确定授权用户对给定数据库执行的操作。如果指定的 LDAP 服务器具有任何复制实例,则可以在逗号分隔的列表中指定每个复制服务器的主机和端口。
如果您的 LDAP 基础结构将 LDAP 目录划分为多个 LDAP 服务器,则将* one * LDAP 服务器或其任何复制实例指定为--ldapServers。 MongoDB 支持RFC 4511 4.1.10中定义的以下 LDAP 引用。不要使用--ldapServers列出基础结构中的每个 LDAP 服务器。
可以使用setParameter在运行中的 mongoldap 上配置此设置。
如果未设置,则 mongoldap 不能使用LDAP 认证或授权。
--ldapQueryUser
<string>
- 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
在连接到 LDAP 服务器或在 LDAP 服务器上执行查询时,**与之绑定的身份。
仅在满足以下任一条件时才需要:
-
Using LDAP authorization.
-
使用 LDAP 查询username transformation。
-
LDAP 服务器禁止匿名绑定
您必须将--ldapQueryUser与--ldapQueryPassword结合使用。
如果未设置, mongoldap 将不会尝试绑定到 LDAP 服务器。
可以使用setParameter在运行中的 mongoldap 上配置此设置。
Note
Windows MongoDB 部署可以使用--ldapBindWithOSDefaults而不是--ldapQueryUser和--ldapQueryPassword。您不能同时指定--ldapQueryUser和--ldapBindWithOSDefaults。
--ldapQueryPassword
<string>
- 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
使用--ldapQueryUser时用于绑定到 LDAP 服务器的密码。您必须将--ldapQueryPassword与--ldapQueryUser结合使用。
如果未设置, mongoldap 将不会尝试绑定到 LDAP 服务器。
可以使用setParameter在运行中的 mongoldap 上配置此设置。
Note
Windows MongoDB 部署可以使用--ldapBindWithOSDefaults而不是--ldapQueryPassword和--ldapQueryPassword。您不能同时指定--ldapQueryPassword和--ldapBindWithOSDefaults。
--ldapBindWithOSDefaults
<bool>
- 默认:false
3.4 版中的新增功能:MongoDB Enterprise 中仅适用于 Windows 平台。
当连接到 LDAP 服务器时,允许 mongoldap 使用 Windows 登录凭据进行身份验证或绑定。
仅在以下情况下需要:
-
Using LDAP authorization.
-
使用 LDAP 查询username transformation。
-
LDAP 服务器禁止匿名绑定
使用--ldapBindWithOSDefaults替换--ldapQueryUser和--ldapQueryPassword。
--ldapBindMethod
<string>
- 默认:简单
3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
mongoldap 方法用于向 LDAP 服务器进行身份验证。与--ldapQueryUser和--ldapQueryPassword一起使用以连接到 LDAP 服务器。
--ldapBindMethod支持以下值:
-
simple
- mongoldap 使用简单身份验证。 -
sasl
- mongoldap 使用 SASL 协议进行身份验证
如果指定sasl
,则可以使用--ldapBindSaslMechanisms配置可用的 SASL 机制。 mongoldap 默认使用DIGEST-MD5
机制。
--ldapBindSaslMechanisms
=<string>
- 默认:DIGEST-MD5
3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
对 LDAP 服务器进行身份验证时,可以使用逗号分隔的 SASL 机制 mongoldap 列表。 mongoldap 和 LDAP 服务器必须在至少一种机制上达成共识。 ongoldap 在运行时动态加载主机上安装的所有 SASL 机制库。
在 mongoldap 主机和远程 LDAP 服务器主机上,为选定的 SASL 机制安装并配置适当的库。您的 os 可能默认包括某些 SASL 库。遵循与每个 SASL 机制相关的文档,以获取有关安装和配置的指导。
如果将GSSAPI
SASL 机制用于Kerberos Authentication,请对 mongoldap 主机验证以下内容:
-
Linux
-
KRB5_CLIENT_KTNAME
环境变量解析为主机的 Client 端Linux Keytab 文件的名称。有关 Kerberos 环境变量的更多信息,请遵循Kerberos documentation。
-
-
Client 端密钥表包含一个User Principal,供 mongoldap 用于连接到 LDAP 服务器并执行 LDAP 查询时使用。
-
Windows
- 如果连接到 Active Directory 服务器,则 Windows Kerberos 配置会在用户登录到系统时自动生成Ticket-Granting-Ticket。将--ldapBindWithOSDefaults设置为
true
,以允许 ongoldap 在连接到 Active Directory 服务器并执行查询时使用生成的凭据。
- 如果连接到 Active Directory 服务器,则 Windows Kerberos 配置会在用户登录到系统时自动生成Ticket-Granting-Ticket。将--ldapBindWithOSDefaults设置为
-
将--ldapBindMethod设置为sasl
以使用此选项。
Note
有关 SASL 机制的完整列表,请参见IANA listing。遵循 LDAP 或 Active Directory 服务的文档,以识别与该服务兼容的 SASL 机制。
MongoDB 不是 SASL 机制库的来源,MongoDB 文档也不是用于安装或配置任何给定 SASL 机制的 Authority 来源。有关文档和支持,请遵循 SASL 机制库的供应商或所有者。
有关 SASL 的更多信息,请参考以下资源:
-
对于 Linux,请参阅Cyrus SASL 文档。
-
对于 Windows,请参阅Windows SASL 文档。
--ldapTransportSecurity
<string>
- 默认:tls
3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
默认情况下, mongoldap 会创建与 LDAP 服务器的 TLS/SSL 安全连接。
对于 Linux 部署,必须在/etc/openldap/ldap.conf
文件中配置适当的 TLS 选项。os 的程序包 Management 器通过libldap
依赖关系在 MongoDB Enterprise 安装中创建此文件。有关更完整的说明,请参见ldap.conf OpenLDAP 文档中的TLS Options
文档。
对于 Windows 部署,必须将 LDAP 服务器 CA 证书添加到 Windows 证书 Management 工具中。该工具的确切名称和功能可能会因 os 版本而异。请参阅您的 Windows 版本的文档,以获取有关证书 Management 的更多信息。
将--ldapTransportSecurity设置为none
以禁用 mongoldap 和 LDAP 服务器之间的 TLS/SSL。
Warning
将--ldapTransportSecurity设置为none
会在 mongoldap 和 LDAP 服务器之间传输明文信息和凭据。
--ldapTimeoutMS
<long>
- 默认:10000
3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
mongoldap 的 await 时间(以毫秒为单位)应 awaitLDAP 服务器响应请求。
如果失败的根源是连接超时,则增大--ldapTimeoutMS的值可以防止 MongoDB 服务器与 LDAP 服务器之间的连接失败。减小--ldapTimeoutMS的值可减少 MongoDBawaitLDAP 服务器响应的时间。
可以使用setParameter在运行中的 mongoldap 上配置此设置。
--ldapUserToDNMapping
<string>
- 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
将提供给 mongoldap 的用户名 Map 到 LDAP 专有名称(DN)。在以下情况下,您可能需要使用--ldapUserToDNMapping将用户名转换为 LDAP DN:
-
通过简单的 LDAP 绑定执行 LDAP 身份验证,其中用户使用不是完整 LDAP DN 的用户名向 MongoDB 进行身份验证。
-
使用需要 DN 的LDAP 授权查询模板。
-
使用不同的身份验证机制(例如 x.509,kerberos)将要向 Mongo DB 进行身份验证的 Client 端的用户名转换为完整的 LDAP DN 以进行授权。
--ldapUserToDNMapping期望用引号括起来的 JSON 字符串表示文档的有序数组。每个文档都包含一个正则表达式match
和用于转换传入用户名的substitution
或ldapQuery
模板。
数组中的每个文档具有以下形式:
{
match: "<regex>"
substitution: "<LDAP DN>" | ldapQuery: "<LDAP Query>"
}
Field | Description | Example |
---|---|---|
match |
ECMAScript 格式的正则表达式(regex)以与提供的用户名匹配。每个括号括起来的部分代表substitution 或ldapQuery 使用的正则表达式捕获组。 |
"(.+)ENGINEERING" "(.+)DBA" |
substitution |
LDAP 专有名称(DN)格式模板,它将match 正则表达式匹配的身份验证名称转换为 LDAP DN。每个大括号括起来的数值都由通过match 正则表达式从身份验证用户名中提取的相应的正则表达式捕获组代替。 |
|
替换的结果必须是RFC4514转义的字符串。 "cn={0},ou=engineering, dc=example,dc=com" |
||
ldapQuery |
一个 LDAP 查询格式模板,它将与match 正则表达式匹配的身份验证名称插入到遵循 RFC4515 和 RFC4516 编码的 LDAP 查询 URI 中。每个大括号括起来的数值都由通过match 表达式从身份验证用户名中提取的相应的正则表达式捕获组代替。 mongoldap 对 LDAP 服务器执行查询,以检索经过身份验证的用户的 LDAP DN。 mongoldap 只需一个返回结果即可成功完成转换,或者 mongoldap 跳过此转换。 "ou=engineering,dc=example, dc=com??one?(user={0})" |
对于数组中的每个文档,必须使用substitution
或ldapQuery
。您不能在同一文档中同时指定两者。
执行身份验证或授权时, mongoldap 会以给定 Sequences 遍历数组中的每个文档,并根据match
过滤器检查身份验证用户名。如果找到匹配项,则 mongoldap 将应用转换并使用输出对用户进行身份验证。 mongoldap 不会检查数组中的其余文档。
如果给定文档与提供的身份验证名称不匹配,或者文档描述的转换失败, mongoldap 将 continue 浏览文档列表以查找其他匹配项。如果在任何文档中都找不到匹配项,则 mongoldap 会返回错误。
Example
下面显示了两个转换文档。第一个文档与以_结尾的任何字符串匹配,将后缀之前的任何内容放入正则表达式捕获组。第二个文档与以@DBA
结尾的任何字符串匹配,将后缀之前的任何内容放入正则表达式捕获组。
Important
您必须将数组作为字符串传递给--ldapUserToDNMapping。
"[
{
match: "(.+)@ENGINEERING.EXAMPLE.COM",
substitution: "cn={0},ou=engineering,dc=example,dc=com"
},
{
match: "(.+)@DBA.EXAMPLE.COM",
ldapQuery: "ou=dba,dc=example,dc=com??one?(user={0})"
}
]"
用户名alice@ENGINEERING.EXAMPLE.COM
的用户与第一个文档匹配。正则表达式捕获组{0}
对应于字符串alice
。结果输出为 DN "cn=alice,ou=engineering,dc=example,dc=com"
。
用户名bob@DBA.EXAMPLE.COM
的用户与第二个文档匹配。正则表达式捕获组{0}
对应于字符串bob
。结果输出是 LDAP 查询"ou=dba,dc=example,dc=com??one?(user=bob)"
。 mongoldap 对 LDAP 服务器执行此查询,返回结果"cn=bob,ou=dba,dc=example,dc=com"
。
如果未设置--ldapUserToDNMapping,则在尝试对 LDAP 服务器进行身份验证或授权时, mongoldap 不会对用户名进行任何转换。
可以使用setParameter数据库命令在运行中的 mongoldap 上配置此设置。
--ldapAuthzQueryTemplate
<string>
- 3.4 版的新增功能:仅在 MongoDB Enterprise 中可用。
遵循 mongoldap 执行的格式符合RFC4515和RFC4516的格式的相对 LDAP 查询 URL,以获取经过身份验证的用户所属的 LDAP 组。该查询相对于--ldapServers中指定的一个或多个主机。
使用 URL 中的{USER}
占位符替换经过身份验证的用户名,如果指定了username mapping,则使用转换后的用户名。
构造查询 URL 时,请确保 LDAP 参数的 Sequences 遵守 RFC4516:
[ dn [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]
如果您的查询包含一个属性,则 mongoldap 假定查询检索到该实体所属的 DN。
如果您的查询不包含属性,则 mongoldap 假定查询检索用户所属的所有实体。
对于查询返回的每个 LDAP DN, mongoldap 都会为授权用户分配admin
数据库上的相应角色。如果admin
数据库上的角色与 DN 完全匹配,则 mongoldap 会向用户授予角色和分配给该角色的特权。有关创建角色的更多信息,请参见db.createRole()方法。
Example
此 LDAP 查询返回 LDAP 用户对象的memberOf
属性中列出的所有组。
"{USER}?memberOf?base"
您的 LDAP 配置可能不包含memberOf
属性作为用户架构的一部分,可能具有用于报告组成员身份的其他属性,或者可能无法通过属性跟踪组成员身份。根据您自己的唯一 LDAP 配置配置查询。
如果未设置,则 mongoldap 无法授权使用 LDAP 的用户。
可以使用setParameter数据库命令在运行中的 mongoldap 上配置此设置。