能,但必须完成slapd.d动态配置初始化、启用tls加密、正确配置nss/pam链路(含pam_ldap.so顺序与pam_mkhomedir.so)、并确保证书有效及时间同步,否则将出现认证失败、家目录不创建或明文传输等生产级问题。

LDAP统一认证在Linux上能跑通,但不是装完包就自动生效——90%的失败都卡在nslcd没连上、pam_ldap.so调用顺序错、或slapd.d配置压根没初始化这三处。
slapd.d动态配置没初始化,ldapsearch直接报“No such object”
OpenLDAP 2.4+强制走cn=config(LDIF格式),跳过slaptest初始化,slapd启动后实际没加载任何数据库定义。
- 必须先停服务:
systemctl stop slapd - 备份旧配置:
mv /etc/openldap/slapd.d /etc/openldap/slapd.d.bak - 从
/usr/share/openldap-servers/slapd.conf.obsolete复制模板,改好suffix和rootdn,再执行:slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d - 权限必须是
ldap:ldap:chown -R ldap:ldap /etc/openldap/slapd.d,否则进程读不到配置
/etc/nsswitch.conf配了ldap,getent passwd却没输出
说明nslcd根本没把请求转出去,不是LDAP服务器问题,而是本地客户端链路断了。
-
uri写成http://或漏掉末尾/(正确是ldap://192.168.10.5/) -
base写成ou=users,dc=example,dc=com(错!只能是dc=example,dc=com) -
bindpw明文密码必须和slappasswd生成的管理员密文一致,不能直接填原始密码 - 查日志:
journalctl -u nslcd -n 50,重点看bind failed或Cannot contact LDAP server
PAM里加了pam_ldap.so,但sudo还是被拒绝
密码能校验通过,但账户状态、家目录、sudo权限全不生效——因为PAM的account和session段根本没配,只靠auth段撑不住完整登录流程。
-
auth段要加:auth [success=done default=ignore] pam_ldap.so use_first_pass(位置必须在pam_unix.so之前) -
account段必须加:account [default=bad success=ok user_unknown=ignore] pam_ldap.so(缺这行,PAM认为账户“状态未知”,直接拦掉sudo) -
session段要含:session optional pam_mkhomedir.so umask=0022 skel=/etc/skel(否则authconfig --enablemkhomedir完全无效) - sudo权限得单独给:
%ldapgroup ALL=(ALL) NOPASSWD: ALL写进/etc/sudoers,LDAP本身不自动透传sudo规则
TLS加密没配,密码明文飞过内网
默认nslcd走ldap://明文,一旦中间设备嗅探,所有用户密码裸奔。生产环境必须启用TLS,且证书必须有效、时间同步。
-
/etc/nslcd.conf里把uri改成ldaps://,并加两行:tls_cacertfile /etc/openldap/certs/ca.crt和tls_reqcert demand -
slapd端需配置olcTLSCertificateFile和olcTLSCertificateKeyFile,证书不能过期,系统时间误差超过5分钟会导致TLS握手失败 - 测试是否走加密:
tcpdump -i any port 636抓包,确认流量出现在636端口而非389
真正卡住人的从来不是“怎么配”,而是nslcd日志里一行bind failed没注意、account段漏了一行pam_ldap.so、或者slapd.d权限还是root:root——这些细节不逐条验证,整套链路就是断的。











