mongodb enterprise 启用 kerberos 需满足:仅企业版支持,通过 mongod --version 检查 modules;spn 必须为 mongodb/fqdn@realm 且与 keytab 匹配;dns 双向解析与时间同步(≤5 分钟)必须达标;keytab 权限为 400;建议用 mongokerberos 工具验证环境。

确认 MongoDB Enterprise 是否启用 Kerberos
Kerberos 认证仅在 MongoDB Enterprise 中可用,MongoDB Community Edition 完全不支持。运行 mongod --version,检查输出中是否包含 modules: enterprise 或 modules: subscription。若无,则认证必然失败,且不会报明确错误——连接会静默降级或卡在 GSSAPI 初始化阶段。
验证 SPN 与 keytab 主体是否匹配
服务主体名称(SPN)必须严格符合 mongodb/fully.qualified.hostname@REALM 格式,且该主体必须存在于 keytab 文件中:
-
hostname -f输出必须是可解析的 FQDN(如mongo01.prod.example.com),不能是localhost或短名 - 用
klist -k /path/to/mongod.keytab查看 keytab 内容,确认存在且仅存在一条匹配的 SPN 行(注意大小写和 realm 大写) - 若 SPN 中主组件不是
mongodb(例如误配为mongod或mongo),需启动时显式指定:--setParameter saslServiceName=mongodb
检查 DNS 与时间同步是否达标
Kerberos 对基础设施依赖极强,两个条件任一不满足都会导致预认证失败,错误常表现为 GSSAPI error acquiring credentials 或 KDC_ERR_CLOCK_SKEW:
- A 记录与 PTR 记录必须双向可查:
nslookup $(hostname -f)和nslookup <ip></ip>都应返回一致的 FQDN - 客户端、mongod/mongos、KDC 三者时间偏差必须 ≤ 5 分钟:在 mongod 主机上运行
w32tm /query /status(Windows)或ntpq -p(Linux),确认 offset 在阈值内 - keytab 文件权限必须为
400,且由 mongod 进程属主可读(非 root 启动时尤其易错)
用 mongokerberos 快速定位配置断点
mongokerberos 是唯一能绕过 mongod 直接测试 Kerberos 凭据链的官方工具,它不依赖 MongoDB 服务本身,只验证环境是否就绪:
- 必须在运行 mongod 的同一主机、同一用户下执行,否则无法复现权限/环境变量问题
- 命令示例:
mongokerberos --host mongo01.prod.example.com --realm EXAMPLE.COM --keytab /etc/mongod.keytab - 若报
No valid credentials provided,优先排查 keytab 路径、权限、SPN 拼写;若报Cannot resolve KDC for realm,说明krb5.conf中 realm 配置或 DNS 解析失败
真正棘手的 Kerberos 问题往往卡在「所有配置都对,但某处少一个点或大小写错了一位」——mongokerberos 的输出比 mongod 日志更早暴露这类细节,别跳过这一步。











