在 Linux 上使用 Kerberos 身份验证配置 MongoDB
在本页面
Overview
MongoDB Enterprise 支持使用Kerberos service进行身份验证。 Kerberos 是用于大型 Client 端/服务器系统的行业标准身份验证协议。
Prerequisites
设置和配置 Kerberos 部署超出了本文档的范围。本教程假定您为 MongoDB 部署中的每个mongod和mongos实例配置了一个Kerberos 服务主体,并且为每个mongod和mongos实例具有了一个有效的keytab file。
对于副本集和分片群集,请确保您的配置使用完全合格的域名(FQDN),而不是 IP 地址或不合格的主机名。您必须使用 FQDN for GSSAPI 才能正确解析 Kerberos 领域并允许您进行连接。
要验证 MongoDB Enterprise 二进制文件,请将--version
命令行选项传递给mongod或mongos:
mongod --version
在此命令的输出中,查找字符串modules: subscription
或modules: enterprise
以确认您的系统具有 MongoDB Enterprise。
Procedure
以下过程概述了以下步骤:将 Kerberos 用户主体添加到 MongoDB,为 Kerberos 支持配置独立的mongod实例,并使用mongo Shell 连接并验证用户主体。
在没有 Kerberos 的情况下启动 mongod。
对于最初添加的 Kerberos 用户,请在不支持 Kerberos 的情况下启动mongod。
如果 Kerberos 用户已经在 MongoDB 中并且具有创建用户所需的特权,则可以使用 Kerberos 支持来启动mongod。
包括适合您的部署的其他设置。
Note
从 MongoDB 3.6 开始,默认情况下mongod和mongos绑定到 localhost。如果部署的成员在不同的主机上运行,或者希望远程 Client 端连接到部署,则必须指定--bind_ip
或net.bindIp。有关更多信息,请参见Localhost 绑定兼容性更改。
连接到 mongod。
通过mongo shell 连接到mongod实例。如果mongod已启用--auth,请确保与创建用户所需的特权连接。
将 Kerberos 主体添加到 MongoDB。
将 Kerberos 主体<username>@<KERBEROS REALM>
或<username>/<instance>@<KERBEROS REALM>
添加到$external
数据库中的 MongoDB。以全部大写形式指定 Kerberos 领域。 $external
数据库允许mongod查询外部源(例如 Kerberos)以进行身份验证。要指定用户的特权,请为用户分配roles。
在版本 3.6.3 中更改:要与$external
个身份验证用户(即 Kerberos,LDAP,x.509 用户)一起使用会话,用户名不能超过 10k 字节。
下面的示例添加对records
数据库具有只读访问权限的 Kerberos 主体application/reporting@EXAMPLE.NET
:
use $external
db.createUser(
{
user: "application/reporting@EXAMPLE.NET",
roles: [ { role: "read", db: "records" } ]
}
)
根据需要添加其他主体。对于要使用 Kerberos 进行身份验证的每个用户,必须在 MongoDB 中创建一个相应的用户。有关创建和 Management 用户的更多信息,请参阅用户 Management 命令。
使用 Kerberos 支持启动 mongod。
要以 Kerberos 支持启动mongod,请将环境变量KRB5_KTNAME
设置为密钥表文件的路径,并将mongod参数authenticationMechanisms设置为GSSAPI
的形式如下:
env KRB5_KTNAME=<path to keytab file> \
mongod \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongod options>
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip
。有关更多信息,请参见Localhost 绑定兼容性更改。
例如,以下代码启动具有 Kerberos 支持的独立mongod实例:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --auth \
--setParameter authenticationMechanisms=GSSAPI \
--dbpath /opt/mongodb/data --bind_ip localhost,<ip address>
您的mongod和keytab file的路径可能不同。 keytab file只能由mongod进程的所有者访问。
使用官方的.deb
或.rpm
软件包,您可以在环境设置文件中设置KRB5_KTNAME
。有关详情,请参见KRB5_KTNAME。
将 mongo shell 连接到 mongod 并进行身份验证。
将mongo shellClient 端连接为 Kerberos 主体application/reporting@EXAMPLE.NET
。在连接之前,您必须已经使用 Kerberos 的kinit
程序来获取application/reporting@EXAMPLE.NET
的凭据。
您可以从命令行连接并进行身份验证。
mongo --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET
如果要连接主机名与 Kerberos 名称匹配的系统,请确保为--host
选项指定完全合格的域名(FQDN),而不是 IP 地址或不合格的主机名。
如果要连接到主机名与 Kerberos 名称不匹配的系统,请使用--gssapiHostName指定它响应的 Kerberos FQDN。
或者,您可以先将mongo连接到mongod,然后从mongo shell 中使用db.auth()方法在$external
数据库中进行身份验证。
use $external
db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )
Additional Considerations
KRB5_KTNAME
如果您使用官方.deb
或.rpm
软件包之一安装了 MongoDB Enterprise,并使用随附的 init/upstart 脚本来控制mongod实例,则可以在默认环境设置文件中设置KR5_KTNAME
变量,而不必每次都设置变量。
对于.rpm
软件包,默认环境设置文件是/etc/sysconfig/mongod
。
对于.deb
个软件包,文件是/etc/default/mongodb
。
在类似于以下内容的行中设置KRB5_KTNAME
值:
export KRB5_KTNAME="<path to keytab>"
为 Kerberos 配置 mongos
要以 Kerberos 支持启动mongos,请将环境变量KRB5_KTNAME
设置为其keytab file的路径,并将mongos参数authenticationMechanisms到GSSAPI
的格式如下:
env KRB5_KTNAME=<path to keytab file> \
mongos \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongos options>
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定--bind_ip
。有关更多信息,请参见Localhost 绑定兼容性更改。
例如,以下代码启动具有 Kerberos 支持的mongos实例:
env KRB5_KTNAME=/opt/mongodb/mongos.keytab \
mongos \
--setParameter authenticationMechanisms=GSSAPI \
--configdb shard0.example.net, shard1.example.net,shard2.example.net \
--keyFile /opt/mongodb/mongos.keyfile \
--bind_ip localhost,<ip address>
您的mongos和keytab file的路径可能不同。 keytab file只能由mongos进程的所有者访问。
根据您的配置要求修改或包括其他mongos个选项。例如,您可以使用x.509 成员身份验证代替使用--keyFile进行分片群集成员的内部身份验证。
使用配置文件
要使用configuration file配置mongod或mongos以支持 Kerberos,请在配置文件中指定authenticationMechanisms设置。
如果使用YAML 配置文件格式:
setParameter:
authenticationMechanisms: GSSAPI
包括配置所需的其他选项。例如,如果您希望远程 Client 端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp设置。有关更多信息,请参见Localhost 绑定兼容性更改。
例如,如果/opt/mongodb/mongod.conf
包含独立mongod的以下配置设置:
security:
authorization: enabled
setParameter:
authenticationMechanisms: GSSAPI
storage:
dbPath: /opt/mongodb/data
net:
bindIp: localhost,<ip address>
要以 Kerberos 支持开头mongod,请使用以下格式:
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf
mongod,keytab file和配置文件的路径可能不同。 keytab file只能由mongod进程的所有者访问。
对 MongoDB 的 Kerberos 设置进行故障排除
如果使用 Kerberos 身份验证启动mongod或mongos时遇到问题,请参见Kerberos 身份验证疑难解答。
合并其他身份验证机制
Kerberos 身份验证(GSSAPI(Kerberos))可以与以下各项协同工作:
-
MongoDB 的质询/响应身份验证机制:
-
- MONGODB-CR(* MongoDB 3.6 中已弃用*)
-
MongoDB 的 LDAP 认证机制:
-
PLAIN(LDAP SASL)
-
MongoDB 的 x.509 身份验证机制:
指定以下机制:
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-1
仅在使用时添加其他机制。此参数设置不会影响 MongoDB 对集群成员的内部身份验证。