kerberos认证仅支持mongodb enterprise edition,需显式指定--saslservicename与fqdn及realm对齐,配合正确keytab权限(600)、hostname校验及mongokerberos工具诊断。

Kerberos 域认证只能在 MongoDB Enterprise Edition 中启用,Community Edition 完全不支持 —— 这是硬性前提,不是配置问题,而是二进制缺失。
确认 mongod 启动时加载了正确的 SASL 服务名
必须通过 --saslServiceName 显式指定服务主体名称(SPN),不能依赖默认值。常见错误是直接写 mongodb 却没和 Kerberos realm 对齐,导致 GSSAPI 初始化失败。
- SPN 格式必须为
service_name/fully.qualified.hostname@REALM,例如mongod/node01.example.com@EXAMPLE.COM - 启动命令中需同时指定
--auth和--saslServiceName,缺一不可:mongod --auth --saslServiceName mongod --keyFile /etc/mongodb-keyfile ...
- 若用配置文件,对应项是
sasl.serviceName,不是saslServiceName(YAML 键名不同) - hostname 必须与 Kerberos KDC 中注册的 SPN 完全一致,建议用
hostname -f校验
验证 Kerberos 配置是否生效用 mongokerberos
mongokerberos 是唯一能分层诊断 Kerberos 链路的工具,它不改配置,只报告每一步卡在哪 —— 比手动抓包或查日志快得多。
- 服务器模式检查本地环境:
mongokerberos --mode server --saslServiceName mongod
- 客户端模式模拟连接:
mongokerberos --mode client --username user@EXAMPLE.COM --saslServiceName mongod
- 错误信息里带具体 GSSAPI 状态码(如
GSS_S_BAD_NAME表示 SPN 解析失败,GSS_S_CREDENTIALS_EXPIRED表示 keytab 过期) - 注意:该工具只随 MongoDB Enterprise Server 或
mongodb-database-tools-extra包安装,Community 版本没有
Linux 下 keytab 文件权限和位置容易被忽略
即使 SPN 正确、mongod 参数无误,如果 keytab 文件权限不对,进程根本读不到凭据,但日志里可能只报模糊的 Authentication failed。
- keytab 文件属主必须是运行
mongod的用户(如mongod用户),不能是root - 权限必须是
600(chmod 600 /path/to/mongod.keytab),GSSAPI 库会拒绝读取更宽松权限的文件 - 启动前用
klist -k /path/to/mongod.keytab确认其中包含匹配的 SPN 条目 - 不要把 keytab 放在
/tmp下 —— 某些系统策略会阻止服务进程访问
真正卡住的地方往往不是 saslServiceName 写错,而是 hostname、realm、keytab 权限、KDC 时间同步这四者中某一个没对齐。每次改完都用 mongokerberos --mode server 跑一遍,比翻日志快十倍。











