能,但必须分层打通nss、pam和服务链路,缺一不可;nss层确保系统“看见”用户(nslcd运行+nsswitch.conf含ldap),pam层准确验证账户状态(auth/account段正确加载pam_ldap.so),session层自动创建家目录(pam_mkhomedir.so)并配合sudoers授权权限。

能,但必须分层打通 NSS、PAM 和服务链路,缺一不可。只改几行配置就指望用户能登录,90% 会失败——问题通常不出在 LDAP 本身,而卡在系统如何“看见”“信任”并“善待”远程用户。
为什么 getent passwd 没输出?NSS 层根本没通
这说明系统连 LDAP 用户都查不到,后续认证无从谈起。不是服务器挂了,而是本地查询代理 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://,也不能带端口如:389) -
base必须是dc=example,dc=com这种格式,不能含ou=People或路径 -
bindpw是明文密码,需与slappasswd -s your_admin_password输出的原始密码一致(不是加密串)
-
- 验证是否“看见”:
getent passwd testuser有输出即通;无输出则用ldapsearch -x -H ldap://your-ldap-server -b "dc=example,dc=com" "(uid=testuser)"手动测连通性与搜索权限
为什么密码正确却拒绝登录?PAM 的 account 段缺失
PAM 不只校验密码,还决定账户启用状态。漏掉 account 段,PAM 就认为“账户状态未知”,直接拦掉登录和 sudo。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
/etc/pam.d/system-auth(RHEL/CentOS)或/etc/pam.d/common-account(Debian/Ubuntu)中必须有:-
auth [success=done default=ignore] pam_ldap.so use_first_pass—— 位置必须在pam_unix.so之前,否则永远走本地校验 -
account [default=bad success=ok user_unknown=ignore] pam_ldap.so—— 缺这行,“密码对但登不上”是必然结果
-
- 部分发行版用
authselect管理 PAM 配置,不能直接改文件,得执行:authselect select sssd --force或手动应用 profile - 确认没有被注释,且没有重复加载导致逻辑冲突
为什么登录成功但没家目录、sudo 失效?session 和 sudoers 没联动
LDAP 用户登录 ≠ 可用。家目录不创建、sudo 权限不生效,本质是 PAM session 段没调用 pam_mkhomedir.so,或 /etc/sudoers 没显式授权。
-
session段必须含:session optional pam_mkhomedir.so umask=0022 skel=/etc/skel;仅运行authconfig --enablemkhomedir而不配这行,等于没开开关 -
sudo权限不会继承:要么在/etc/sudoers加%ldapgroup ALL=(ALL) NOPASSWD: ALL(前提是 LDAP 中该组真实存在),要么用sudoRole对象类配合 SSSD 实现动态策略 -
pam_mkhomedir.so的skel路径必须存在且可读,/etc/skel下的隐藏文件(如.bashrc)才会复制过去
为什么内网环境也要配 TLS?明文密码裸奔风险真实存在
默认 nslcd 走 ldap://(端口 389),一旦中间设备(交换机、防火墙、甚至同网段虚拟机)嗅探,所有用户密码明文飞过网络。
- 首选方案:启用 LDAPS(端口 636),修改
/etc/nslcd.conf中uri为ldaps://your-ldap-server/ - 证书必须有效:CA 证书要放进
/etc/openldap/certs/,并在/etc/nslcd.conf中指定tls_cacertfile /etc/openldap/certs/ca.crt - 时间必须同步:
chronyd或ntpd要跑稳,证书有效期校验依赖系统时间;差几分钟就可能握手失败 - StartTLS 也可用,但配置更复杂,且要求 LDAP 服务端开启
olcSecurity并支持start_tls,不如 LDAPS 直观可靠
最常被忽略的是时间同步和证书有效期——它们不报错,但会让 TLS 握手静默失败,最终退回到明文通信,而你完全察觉不到。










