MongoDB Enterprise支持对mongod
和的MongoDB客户端的Kerberos身份验证mongos
。Kerberos是用于大型客户端/服务器系统的行业标准身份验证协议。Kerberos允许MongoDB和应用程序利用现有的身份验证基础结构和流程。
在基于Kerberos的系统中,通过身份验证的通信的每个参与者都被称为“主体”,并且每个主体必须具有唯一的名称。
校长属于称为领域的行政单位。对于每个领域,Kerberos密钥分发中心(KDC)维护该领域的主体和与主体相关联的“秘密密钥”的数据库。
对于客户端服务器认证,客户端从KDC请求“票证”以访问特定资产。KDC使用客户端的机密和服务器的机密来构造票证,该票证允许客户端和服务器相互进行身份验证,同时将机密隐藏起来。
对于用于Kerberos支持的MongoDB的配置,有两种主要的名称是有意义的:用户主体和服务主体。
要使用Kerberos进行身份验证,必须将Kerberos用户主体添加到MongoDB到$external
数据库。用户主体名称的格式为:
对于要使用Kerberos进行身份验证的每个用户,必须在$external
数据库的MongoDB中创建一个相应的用户。
在版本3.6.3中更改:要与$external
身份验证用户(即Kerberos,LDAP,x.509用户)一起使用会话,用户名不能大于10k字节。
对于将用户添加到MongoDB的以及认证为用户的示例,请参阅 配置MongoDB的Kerberos身份验证在Linux 和 配置MongoDB的Kerberos身份验证的Windows上。
也可以看看
管理用户和角色,获取有关在MongoDB中创建和管理用户的一般信息。
每个MongoDB的mongod
和mongos
实例(或
mongod.exe
或mongos.exe
在Windows上)必须有关联的服务主体。服务主体名称的格式为:
对于MongoDB,<service>
默认值为mongodb
。例如,如果
m1.example.com
是MongoDB服务器,并example.com
维护EXAMPLE.COM
Kerberos领域,m1
则应具有服务主体名称mongodb/m1.example.com@EXAMPLE.COM
。
要为指定其他值<service>
,请serviceName
在mongod
或
mongos
(mongod.exe
或mongos.exe
)启动期间使用
。
mongo
Shell或其他客户端也可以使用来指定其他服务主体名称serviceName
。
服务主体名称必须使用其服务主体名称的完全限定域名(FQDN)部分可通过网络访问。
默认情况下,Kerberos尝试使用/etc/krb5.conf
文件来标识主机,
然后再使用DNS解析主机。
在Windows上,如果将MongoDB作为服务运行,请参阅 将服务主体名称分配给MongoDB Windows服务。
Linux系统可以将服务主体的 Kerberos身份验证密钥存储
在keytab
文件中。在Linux上运行的每个Kerberized mongod
和mongos
实例都必须有权访问包含其服务主体密钥的keytab文件。
为了确保keytab文件的安全,请使用文件权限,该权限将访问权限限制为仅运行mongod
or mongos
进程的用户。
在Linux上,MongoDB客户端可以使用Kerberos的kinit
程序来初始化凭据缓存,以对服务器验证用户主体。
不像在Linux系统上,mongod
以及mongos
在Windows上运行的情况下,并不需要访问密钥表文件。相反,mongod
和mongos
实例从特定于操作系统的凭据存储中读取其服务器凭据。
但是,您可以从Windows Active Directory中导出密钥表文件以在Linux系统上使用。有关更多信息,请参见Ktpass。
要为Kerberos支持和验证配置的MongoDB,请参阅 配置MongoDB的Kerberos身份验证在Linux 和 配置MongoDB的Kerberos身份验证的Windows上。
尽管MongoDB支持将Kerberos身份验证与其他身份验证机制一起使用,但仅在必要时添加其他机制。请参阅第
配置MongoDB中与Kerberos身份验证在Linux
和
配置MongoDB的Kerberos身份验证的Windows上
的详细信息。Incorporate Additional Authentication Mechanisms