使用 SASL 和 LDAP 与 OpenLDAP 进行身份验证
在本页面
MongoDB Enterprise 提供对用户代理身份验证的支持。这样,Management 员可以将 MongoDB 集群配置为通过将身份验证请求代理到指定的轻型目录访问协议(LDAP)服务来对用户进行身份验证。
Considerations
Warning
Windows 的 MongoDB 企业版不支持通过saslauthd
进行绑定。
-
Linux MongoDB 服务器支持通过
saslauthd
守护程序绑定到 LDAP 服务器。 -
在 Client 端与服务器之间以及
saslauthd
与 LDAP 服务器之间使用安全的加密或信任连接。 LDAP 服务器使用SASL PLAIN
机制,以“纯文本”形式发送和接收数据。您应仅使用可信通道(例如 VPN),使用 TLS/SSL 加密的连接或可信有线网络。
Configure saslauthd
LDAP 对用户身份验证的支持要求正确配置saslauthd
守护进程以及 MongoDB 服务器。
指定机制。
在使用/etc/sysconfig/saslauthd
文件配置saslauthd
的系统(例如 Red Hat Enterprise Linux,Fedora,CentOS 和 Amazon Linux AMI)上,将机制MECH
设置为ldap
:
MECH=ldap
在使用/etc/default/saslauthd
文件配置saslauthd
的系统(例如 Ubuntu)上,将MECHANISMS
选项设置为ldap
:
MECHANISMS="ldap"
调整缓存行为。
在某些 Linux 发行版中,saslauthd
从缓存身份验证凭据* enabled *开始。在重新启动或直到缓存过期之前,saslauthd
不会与 LDAP 服务器联系以重新认证其身份验证缓存中的用户。这使saslauthd
能够成功验证其缓存中的用户,即使 LDAP 服务器已关闭或已缓存的用户的凭据被撤消也是如此。
要设置身份验证缓存的到期时间(以秒为单位),请参阅saslauthd
中的-t option。
使用 OpenLDAP 配置 LDAP 选项。
如果saslauthd.conf
文件不存在,请创建它。 saslauthd.conf
文件通常位于/etc
文件夹中。如果指定其他文件路径,请参见saslauthd
的-O option。
要连接到 OpenLDAP 服务器,请使用以下配置选项更新saslauthd.conf
文件:
ldap_servers: <ldap uri>
ldap_search_base: <search base>
ldap_filter: <filter>
ldap_servers
指定用于身份验证的 LDAP 服务器的 uri。通常,对于在本地计算机上安装的 OpenLDAP,可以指定值ldap://localhost:389
;如果在 TLS/SSL 上使用 LDAP,则可以指定值ldaps://localhost:636
。
ldap_search_base
指定与搜索相对的专有名称。搜索包括下面的基础或对象。
ldap_filter
指定搜索过滤器。
这些配置选项的值应对应于测试的特定值。例如,要过滤电子邮件,请改为指定ldap_filter: (mail=%n)
。
OpenLDAP Example
OpenLDAP 的示例saslauthd.conf
文件包含以下内容:
ldap_servers: ldaps://ad.example.net
ldap_search_base: ou=Users,dc=example,dc=com
ldap_filter: (uid=%u)
要使用此示例 OpenLDAP 配置,请创建具有uid
属性(登录名)的用户,并将其放置在域组件(dc
)example
和com
下的Users
组织单位(ou
)下。
有关saslauthd
配置的更多信息,请参见http://www.openldap.org/doc/admin24/guide.html#Configuringsaslauthd。
测试 saslauthd 配置。
使用testsaslauthd
实用工具测试saslauthd
配置。例如:
testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
-
0: OK "Success"
表示身份验证成功。 -
0: NO "authentication failed"
表示用户名,密码或配置错误。
相对于主机 os 上的saslauthd
目录的位置,修改文件路径。
Important
为security.sasl.saslauthdSocketPath或--setParameter saslauthdPath指定的saslauthd
Unix 域套接字文件的父目录必须授予以下任一项的读取和执行(r-x
)权限:
没有对saslauthd
目录及其内容的指定权限,mongod
或mongos
无法通过saslauthd
成功认证。
Configure MongoDB
将用户添加到 MongoDB 进行身份验证。
将用户添加到 MongoDB 中的$external
数据库。要指定用户的特权,请为用户分配roles。
在版本 3.6.3 中更改:要与$external
个身份验证用户(即 Kerberos,LDAP,x.509 用户)一起使用会话,用户名不能超过 10k 字节。
例如,以下代码添加了对records
数据库具有只读访问权限的用户。
db.getSiblingDB("$external").createUser(
{
user : <username>,
roles: [ { role: "read", db: "records" } ]
}
)
根据需要添加其他主体。有关创建和 Management 用户的更多信息,请参阅用户 Management 命令。
配置 MongoDB 服务器。
要将 MongoDB 服务器配置为使用saslauthd
实例进行代理身份验证,请在启动mongod时包括以下选项:
-
--auth命令行选项或security.authorization设置,
-
authenticationMechanisms参数设置为
PLAIN
,并且 -
saslauthdPath参数设置为
saslauthd
实例的 Unix 域套接字的路径。
Important
为security.sasl.saslauthdSocketPath或--setParameter saslauthdPath指定的saslauthd
Unix 域套接字文件的父目录必须授予以下任一项的读取和执行(r-x
)权限:
没有对saslauthd
目录及其内容的指定权限,mongod
或mongos
无法通过saslauthd
成功认证。
如果使用authorization选项强制执行身份验证,则将需要特权来创建用户。
使用特定的 saslauthd 套接字路径。
对于/<some>/<path>/saslauthd
的套接字路径,将saslauthdPath设置为/<some>/<path>/saslauthd/mux
,如以下命令行示例所示:
mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip
。有关更多信息,请参见Localhost 绑定兼容性更改。
或者,如果使用YAML 格式配置文件,则在文件中指定以下设置:
security:
authorization: enabled
setParameter:
saslauthdPath: /<some>/<path>/saslauthd/mux
authenticationMechanisms: PLAIN
或者,如果使用较旧的配置文件格式:
auth=true
setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux
setParameter=authenticationMechanisms=PLAIN
使用默认的 Unix 域套接字路径。
要使用默认的 Unix 域套接字路径,请将saslauthdPath设置为空字符串""
,如以下命令行示例所示:
mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip
。有关更多信息,请参见Localhost 绑定兼容性更改。
或者,如果使用YAML 格式配置文件,则在文件中指定以下设置:
security:
authorization: enabled
setParameter:
saslauthdPath: ""
authenticationMechanisms: PLAIN
或者,如果使用较旧的配置文件格式:
auth=true
setParameter=saslauthdPath=""
setParameter=authenticationMechanisms=PLAIN
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp设置。有关更多信息,请参见Localhost 绑定兼容性更改。
在 mongo shell 中验证用户身份。
要在与mongo
shell 连接时进行身份验证,请使用以下选项运行mongo,用<host>
和<user>
代替,并在出现提示时 Importing 密码:
mongo --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p
或者,在不提供凭据的情况下进行连接,然后在$external
数据库上调用db.auth()方法。
在mechanism
字段中指定值"PLAIN"
,在user
和pwd
字段中分别指定用户和密码,在digestPassword
字段中指定值false
。您必须**为digestPassword
指定false
,因为服务器必须收到未消化的密码才能转发到saslauthd
,如以下示例所示:
db.getSiblingDB("$external").auth(
{
mechanism: "PLAIN",
user: <username>,
pwd: <cleartext password>,
digestPassword: false
}
)
服务器以纯文本形式转发密码。通常,仅在受信任的通道(VPN,TLS/SSL,受信任的有线网络)上使用。请参阅注意事项。