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

OpenLDAP 能直接用作企业级统一身份认证后端,但装完 openldap-servers 就启动服务,90% 会失败——核心卡点不在 LDAP 本身,而在动态配置初始化、TLS 加密缺失、NSS/PAM 链路断裂这三层。
slapd.d 动态配置没初始化,ldapsearch 直接报 “No such object”
OpenLDAP 2.4+ 强制使用 cn=config(LDIF 格式)替代旧版 slapd.conf。跳过初始化,slapd 启动后实际没加载任何数据库定义,ldapsearch -x 必然返回 No such object 或 Referral。
- 必须先停服务:
systemctl stop slapd - 备份原配置:
mv /etc/openldap/slapd.d /etc/openldap/slapd.d.bak - 从模板生成初始配置:
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf,然后编辑该文件,确保suffix和rootdn匹配(如dc=example,dc=com和cn=Manager,dc=example,dc=com) - 执行初始化:
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d(注意-F后是目录,不是文件) - 修正权限:
chown -R ldap:ldap /etc/openldap/slapd.d,否则slapd进程无法读取配置
/etc/nsswitch.conf 配了 ldap,getent passwd 却没输出
说明 NSS 层根本没通——不是服务器问题,而是本地客户端链路断在 nslcd。系统“看不见”用户,后续认证无从谈起。
-
/etc/nsswitch.conf中passwd:和group:行必须包含ldap,推荐顺序为files ldap(本地优先,避免覆盖root) - 确认
nslcd正在运行:systemctl status nslcd;若报bind failed,重点检查/etc/nslcd.conf:-
uri必须是ldap://your-ldap-server/(不是http://或带端口的错误写法) -
base必须是dc=example,dc=com这种格式,不能含ou=或路径 -
bindpw是明文密码,需与slappasswd -s your_admin_password输出的加密字符串对应管理员账户的原始密码
-
- 验证是否“看见”:
getent passwd testuser有输出即通;无输出则用ldapsearch -x -H ldap://your-ldap-server -b "dc=example,dc=com" "(uid=testuser)"手动测试连通性与搜索权限
PAM 配错导致“能登录但 sudo 失败”或“密码正确却拒绝登录”
PAM 不只校验密码,还决定账户启用状态、家目录创建、shell 分配和 sudo 权限边界。默认配置完全不兼容 LDAP 场景,漏掉任意一段都会出问题。
-
auth段必须加:auth [success=ok default=ignore] pam_ldap.so use_first_pass,且位置要在pam_unix.so之前,否则永远走本地校验 -
account段是登录成败关键:account [default=bad success=ok user_unknown=ignore] pam_ldap.so缺失会导致“密码正确但拒绝登录”,因为 PAM 无法确认账户是否启用 - 自动创建家目录依赖
session段:session optional pam_mkhomedir.so umask=0022 skel=/etc/skel;仅运行authconfig --enablemkhomedir而不配这行,等于没开开关 - sudo 权限不会自动继承:要么在
/etc/sudoers显式加%ldapgroup ALL=(ALL) NOPASSWD: ALL(前提是 LDAP 中该组已存在),要么在服务端用sudoRole对象类配合 SSSD 实现动态策略
TLS 加密未启用,认证流量明文传输
生产环境禁用明文 LDAP(ldap://)——不仅违反安全基线,多数现代 PAM/NSS 客户端(如 nslcd)还会默认拒绝未加密连接。
- 先生成证书:用 OpenSSL 创建 CA、服务器证书及密钥,存至
/etc/openldap/certs/,确保权限为600且属主为ldap - 在
slapd.d中启用 TLS:ldapmodify -Y EXTERNAL -H ldapi:/// -f tls-enable.ldif,其中tls-enable.ldif至少包含olcTLSCertificateFile、olcTLSCertificateKeyFile和olcTLSCACertificateFile - 修改
/etc/nslcd.conf:把uri改为ldaps://your-ldap-server/或保留ldap://但加ssl start_tls,并指定tls_cacertfile - 时间必须同步:
chronyd或ntpd必须运行,证书有效期校验对系统时间极其敏感,偏差超 5 分钟即可导致 TLS 握手失败
真正难的不是某一步操作,而是所有层必须严丝合缝:slapd.d 初始化失败,后面全白搭;nslcd 的 base 少一个 dc=,getent 就静默失败;PAM 的 account 段漏一行,用户就卡在登录界面。每层都得单独验证,不能假设上一层“应该没问题”。











