mongodb 4.4+ 不支持原生 ldap 认证,必须通过 saslauthd 代理,仅支持 scram-sha-1/scram-sha-256;需显式配置 saslauthd 的 -o 参数、ldap 连接参数、unix socket 权限及 selinux 策略,并确保 mongod 启用 --auth 和 --setparameter saslauthdpath。

MongoDB Enterprise 4.4+ 不支持直接配置 LDAP 认证,必须通过 saslauthd 守护进程代理,且仅接受 SCRAM-SHA-1 或 SCRAM-SHA-256 机制 —— 这是绝大多数配置失败的起点。
确认 saslauthd 已启用 ldap 机制且配置路径显式指定
常见错误是以为改了 /etc/saslauthd.conf 就够了,但 saslauthd 默认根本不读这个文件。它只在启动时通过 -O 参数加载配置。
- CentOS/RHEL/Fedora:编辑
/etc/sysconfig/saslauthd,确保包含:MECH=ldap和FLAGS="-O /etc/saslauthd.conf" - Ubuntu/Debian:编辑
/etc/default/saslauthd,设置:MECHANISMS="ldap"、START=yes,并手动确认/etc/saslauthd.conf存在 - 启动后检查:
ps aux | grep saslauthd应看到-a saslauthd -m /var/run/saslauthd -O /etc/saslauthd.conf类似输出
验证 saslauthd.conf 的 LDAP 连接参数是否匹配实际目录结构
OpenLDAP 或 Active Directory 的字段名稍有偏差(比如用 sAMAccountName 而非 uid),saslauthd -v -n 1 测试就会静默失败,日志里不报具体哪条规则错。
-
ldap_servers: ldaps://ldap.example.com:636—— 必须用ldaps://,纯ldap://在 4.4+ 默认被拒绝 -
ldap_search_base: ou=users,dc=example,dc=com—— 必须是完整 DN,不能写成dc=example.com -
ldap_filter: (sAMAccountName=%u)—— 若 AD 实际用sAMAccountName,这里就不能写(uid=%u) - 调试建议:先用
ldapsearch -x -H ldaps:// -D "cn=admin,dc=example,dc=com" -W -b "ou=users,dc=example,dc=com" "(sAMAccountName=testuser)"手动验证过滤逻辑
确保 mongod 与 saslauthd 的 Unix socket 权限和 SELinux 策略正确
mongod 启动时报 Cannot connect to saslauthd server: Permission denied,90% 是权限或 SELinux 卡住,不是配置本身问题。
- 确认
saslauthd正在运行:systemctl status saslauthd -
mongod用户(通常是mongod)必须属于saslauthd组:usermod -a -G saslauthd mongod - socket 路径默认为
/var/run/saslauthd/mux,确保该路径存在且权限为srwxrwx---,属组saslauthd - SELinux 环境下,需允许 mongod 访问 socket:
setsebool -P mongod_can_network_connect on,必要时加audit2allow生成策略
mongod 启动参数和认证机制必须严格匹配
哪怕 saslauthd 全部跑通,mongod 启动时漏掉任一关键参数,也会降级为本地认证或直接报错。
- 必须启用访问控制:
--auth或配置中设security.authorization: enabled - 必须显式指定
saslauthdsocket 路径:--setParameter saslauthdPath=/var/run/saslauthd/mux - 连接客户端时,必须指定
authSource=$external和authMechanism=SCRAM-SHA-256(不能用PLAIN,MongoDB 4.4+ 不支持) - 连接字符串示例:
mongodb://testuser:pass@host/?authSource=$external&authMechanism=SCRAM-SHA-256
最容易被忽略的是:saslauthd 的缓存行为。默认启用身份验证缓存,即使 LDAP 服务器宕机,缓存中的用户仍能登录 —— 这在测试阶段会掩盖真实连通性问题;上线前务必用 -t 30(30秒缓存过期)临时启动来验证实时 LDAP 查询是否生效。











