Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

在 Linux 上使用 Kerberos 身份验证配置 MongoDB

在此页面上

  • 概述
  • 先决条件
  • 步骤
  • 其他注意事项
  • 测试与验证

MongoDB Enterprise 支持使用 Kerberos 服务 进行身份验证。 Kerberos 是一种适用于大型客户端/服务器系统的行业标准身份验证协议。 MongoDB Enterprise 仅支持 MIT 实施 Kerberos。

要验证是否正在使用 MongoDB Enterprise,请将 --version 命令行选项传递给 mongodmongos

mongod --version

在该命令的输出中,请查找字符串 modules: subscriptionmodules: enterprise,以确认您使用的是 MongoDB Enterprise 二进制文件。

对于副本集和分片集群,请确保配置使用完全限定的域名 (FQDN),而不是 IP 地址或未限定的主机名。您必须使用 GSSAPI 的 FQDN 才能正确解析 Kerberos Realm 并允许连接。

设置和配置 Kerberos 部署超出了本文档的范围。请参阅 MIT Kerberos 文档 或操作系统文档,了解如何配置 Kerberos 部署。

为了将 MongoDB 与 Kerberos 结合使用,必须将 MongoDB 部署中每个mongodmongos 实例的 Kerberos 服务主体 添加到 Kerberos 数据库 。您可以通过在 KDC 上运行类似以下命令来添加服务主体:

kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM

在每个运行mongodmongos 的系统上,必须 创建 一个 keytab 文件 对于相应的服务主体。您可以在运行 或mongodmongos 的系统上运行类似于以下的命令来创建 keytab 文件:

kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM

以下过程概述了将 Kerberos 用户主体添加到 MongoDB、配置独立mongod实例以支持 Kerberos、使用mongosh连接并对用户主体进行身份验证的步骤。

1

初次添加 Kerberos 用户时,启动 mongod 不支持 Kerberos。

如果 MongoDB 中已经存在 Kerberos 用户,且该用户拥有创建用户所需的权限,那么就可以启动支持 Kerberos 的 mongod

根据您的部署包含其他设置。

注意

leafygreen-ui-qufvcileafygreen-ui-qufvci,默认绑定到本地主机。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署,则必须指定 --bind_ipnet.bindIp

2

mongosh连接到mongod实例。如果mongod启用了--auth ,请确保使用创建用户所需的特权进行连接。

3

$external 数据库中为 MongoDB 添加 Kerberos 主体(<username>@<KERBEROS REALM><username>/<instance>@<KERBEROS REALM>)。用大写字母指定 Kerberos Realm。$external 数据库允许 mongod 查询外部来源(例如 Kerberos)进行身份验证。如需指定用户的权限,请为用户分配角色

要对 $external 身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。

以下示例将有只读访问权限的 Kerberos 主体 application/reporting@EXAMPLE.NET 添加至 records 数据库:

use $external
db.createUser(
{
user: "application/reporting@EXAMPLE.NET",
roles: [ { role: "read", db: "records" } ]
}
)

根据需要添加额外主体。对于要使用 Kerberos 进行身份验证的每个用户,必须在 MongoDB 中创建相应的用户。有关创建和管理用户的更多信息,请参阅用户管理命令

4

如需启动支持 Kerberos 的 mongod,请将环境变量 KRB5_KTNAME 设置为 keytab 文件的路径,并将 mongod 参数 authenticationMechanisms 设置为 GSSAPI,格式如下:

env KRB5_KTNAME=<path to keytab file> \
mongod \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongod options>

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

例如,以下代码启动一个支持 Kerberos 的独立 mongod 实例:

env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --auth \
--setParameter authenticationMechanisms=GSSAPI \
--dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>

您的 mongodkeytab 文件的路径可能不同。keytab 文件必须只能由 mongod 进程的所有者访问。

对于官方.deb.rpm包,您可以在环境设置文件中设置KRB5_KTNAME 。有关详细信息,请参阅KRB 5 _KTNAME

5

作为 Kerberos 主体application/reporting@EXAMPLE.NET连接mongosh客户端。在连接之前,您必须使用 Kerberos 的kinit程序获取application/reporting@EXAMPLE.NET的档案。

您可以从命令行进行连接和身份验证。

mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET

如果您要连接到主机名与 Kerberos 名称匹配的系统,请确保为 --host 选项指定完全限定域名 (FQDN),而不是 IP 地址或非限定主机名。

如果您要连接的系统的主机名与 Kerberos 名称不匹配,请先将mongosh连接到mongod ,然后从mongosh使用db.auth()方法在$external数据库中进行身份验证。

use $external
db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )

如果您使用某个官方 .deb.rpm 软件包安装了 MongoDB Enterprise,并且使用随附的 init/upstart 脚本来控制 mongod 实例,则可以在默认环境设置文件中设置 KRB5_KTNAME 变量,而不是每次都设置该变量。

最新版本的 Red Hat 和基于 Debian 的系统使用 systemd。旧版本使用 init 进行系统初始化。按照相应说明为系统配置 KRB5_KTNAME 变量。

systemd 将配置存储在单元文件中。更新单元文件以设置 KRB5_KTNAME 变量。

1
sudo systemctl cat mongod

systemctl 命令返回文件位置并显示其内容。

2

如需设置 KRB5_KTNAME 变量,请编辑下面一行,以反映 keytab 文件的位置:

Environment="KRB5_KTNAME=<path-to-your-mongod.keytab-file>"
3

将编辑后的行添加到单元文件中。编辑后的单元文件将类似于:

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
Documentation=https://docs.mongodb.org/manual
[Service]
User=mongodb
Group=mongodb
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
Environment="KRB5_KTNAME=/etc/mongod.keytab"
PIDFile=/var/run/mongodb/mongod.pid
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
[Install]
WantedBy=multi-user.target
4
sudo systemctl daemon-reload
5
sudo systemctl restart mongod

对于 .rpm 安装,默认环境设置文件为 /etc/sysconfig/mongod

对于 .deb 安装,文件为 /etc/default/mongodb

添加一行类似以下内容,设置 KRB5_KTNAME 值:

KRB5_KTNAME="<path to keytab>"

要启动支持 Kerberos 的 mongos,请将环境变量 KRB5_KTNAME 设置为其 keytab 文件的路径,并将 mongos 参数 authenticationMechanisms 设置为 GSSAPI,格式如下:

env KRB5_KTNAME=<path to keytab file> \
mongos \
--setParameter authenticationMechanisms=GSSAPI \
<additional mongos options>

根据配置要求包括其他选项。例如,如果希望远程客户端连接到您的部署,或是您的部署成员运行在不同主机上,请指定 --bind_ip

例如,以下操作启动了支持 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,<hostname(s)|ip address(es)>

您的 mongoskeytab 文件的路径可能不同。keytab 文件必须只能由 mongos 进程的所有者访问。

根据配置需要修改或添加任何其他 mongos 选项。例如,您可以使用 x.509 节点身份验证,而不是使用 --keyFile 对分片集群节点进行内部身份验证。

如需使用配置文件配置支持 Kerberos 的 mongodmongos,请在配置文件中指定 authenticationMechanisms 设置。

如果使用 YAML 配置文件格式

setParameter:
authenticationMechanisms: GSSAPI

根据配置要求包括其他选项。例如,如果您希望远程客户端连接到部署,或者部署节点运行在不同的主机上,请指定 net.bindIp 设置。

例如,如果 /opt/mongodb/mongod.conf 包含以下独立运行的 mongod 的配置设置:

security:
authorization: enabled
setParameter:
authenticationMechanisms: GSSAPI
storage:
dbPath: /opt/mongodb/data
net:
bindIp: localhost,<hostname(s)|ip address(es)>

如需启动支持 Kerberos 的 mongod,请使用以下表格:

env KRB5_KTNAME=/opt/mongodb/mongod.keytab \
/opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf

mongodkeytab 文件和配置文件的路径可能不同。keytab 文件必须只能由 mongod 进程的所有者访问。

如果您在使用 Kerberos 身份验证启动 mongodmongos 时遇到问题,请参阅 Kerberos 身份验证疑难解答

Kerberos 身份验证 (GSSAPI (Kerberos)) 可以与以下功能配合使用:

  • MongoDB 的 SCRAM 身份验证机制:

  • MongoDB 的 LDAP 身份验证机制:

  • MongoDB 的 x.509 身份验证机制:

指定机制如下:

--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256

只有在使用时才添加其他机制。该参数设置不会影响 MongoDB 对集群节点的内部身份验证。

完成配置步骤后,可以使用 mongokerberos 工具验证配置。

mongokerberos提供了一种便捷的方法来验证平台的 Kerberos 配置是否与 MongoDB 一起使用,并测试 MongoDB 客户端的 Kerberos 身份验证是否按预期运行。有关更多信息,请参阅mongokerberos文档。

mongokerberos 仅在 MongoDB Enterprise 中可用。

← Kerberos 身份验证