Kerberos 身份验证疑难解答
在本页面
Kerberos 配置调试策略
如果您在使用Kerberos来针对mongod或mongos进行身份验证时遇到困难:
- 确保您正在运行 MongoDB Enterprise,而不是 MongoDB Community Edition。 Kerberos 身份验证是 MongoDB 企业版功能,不适用于 MongoDB 社区版二进制文件。
要验证 MongoDB Enterprise 二进制文件,请将--version
命令行选项传递给mongod或mongos:
mongod --version
在此命令的输出中,查找字符串modules: subscription
或modules: enterprise
以确认您的系统具有 MongoDB Enterprise。
在 Linux 上,您可以在系统提示符下使用hostname -f
命令来验证系统主机名的解析。
-
在 Linux 上,确保 SPN 的服务主体名称(SPN)的主要组成部分为
mongodb
。如果 SPN 的主要组成部分不是mongodb
,则必须使用--setParameter saslServiceName指定主要组成部分。 -
在 Linux 上,确保keytab file中的服务主体名称(SPN)的实例组件与mongod或mongos实例的规范系统主机名匹配。如果mongod或mongos实例的系统主机名不在密钥表文件中,则身份验证将失败,并显示
GSSAPI error acquiring credentials.
错误消息。
如果hostname -f
返回的mongod或mongos实例的主机名不是完全限定的,请在启动mongod或mongos时使用--setParameter saslHostName设置实例的完全限定的域名。
-
确保运行mongod或mongos实例的每个主机都有
A
和PTR
DNS 记录,以提供正向和反向 DNS 查找。A
记录应 Map 到mongod或mongos的 FQDN。 -
确保托管 MongoDB 实例和 Kerberos 基础结构的服务器上的时钟在最大时间偏差内:默认为 5 分钟。大于最大时间偏差的时间差会阻止成功进行身份验证。
Linux 上的 Kerberos 跟踪日志记录
MIT Kerberos 为跟踪记录输出提供了KRB5_TRACE
环境变量。如果 Linux 上的 MIT Kerberos 一直存在问题,则可以在启动mongod,mongos或mongo实例时将KRB5_TRACE
设置为产生详细日志记录。
例如,以下命令启动一个独立的mongod,其密钥表文件位于默认的/etc/krb5.keytab
路径,并将KRB5_TRACE
设置为写入/logs/mongodb-kerberos.log
:
env KRB5_KTNAME=/etc/krb5.keytab \
KRB5_TRACE=/logs/mongodb-kerberos.log \
mongod --dbpath /data/db --logpath /data/db/mongodb.log \
--auth --setParameter authenticationMechanisms=GSSAPI \
--bind_ip localhost,<ip address> --fork
常见错误消息
在某些情况下,如果 Kerberos 服务存在问题,MongoDB 将从 GSSAPI 接口返回错误消息。一些常见的错误消息是:
-
GSSAPI error in client while negotiating security context.
- 此错误在 Client 端上发生,反映凭据不足或尝试进行恶意身份验证。
如果收到此错误,请确保在连接到主机时使用正确的凭据和正确的完全限定域名。