需安装libnss-ldapd、libpam-ldapd及nslcd,配置/etc/nslcd.conf连接ldap服务器,修改/etc/nsswitch.conf启用ldap查询,编辑pam common-*文件集成pam_ldap.so,并启动nslcd服务完成统一认证。

如果您在银河麒麟操作系统中希望实现所有本地登录、SSH、图形界面及系统服务统一通过LDAP进行身份验证,则需完成系统级PAM与NSS模块的集成配置。以下是实现该目标的具体操作步骤:
一、安装并启用LDAP客户端支持组件
银河麒麟基于Debian/Ubuntu内核,需安装libnss-ldapd、libpam-ldapd及nslcd服务,以替代传统nss_ldap和pam_ldap,确保兼容性与安全性。
1、更新软件源并安装必要包:
sudo apt update
sudo apt install libnss-ldapd libpam-ldapd nslcd
2、安装过程中会弹出交互式配置界面,请选择“不自动配置”(No automatic configuration),以便后续手动精确控制参数。
3、确认nslcd服务已安装且处于未启动状态:
sudo systemctl is-active nslcd
二、配置nslcd服务连接LDAP服务器
nslcd是LDAP客户端守护进程,负责将系统查询(如getent passwd)转发至远程LDAP目录。其配置文件/etc/nslcd.conf需严格匹配LDAP服务端结构。
1、备份原始配置文件:
sudo cp /etc/nslcd.conf /etc/nslcd.conf.bak
2、清空并重写/etc/nslcd.conf,填入以下内容(请按实际环境替换域名、IP与DN):
uid nslcd
gid nslcd
uri ldap://10.10.16.113:389
base dc=openldap,dc=jw,dc=cn
binddn cn=Manager,dc=openldap,dc=jw,dc=cn
bindpw vlQiP78WycEFIEeA==
ssl off
tls_ciphers TLSv1.2
3、设置配置文件权限为仅root可读写:
sudo chmod 600 /etc/nslcd.conf
4、特别注意:bindpw字段必须为明文密码,不可使用加密值;若LDAP服务启用TLS/SSL,请同步配置tls_cert、tls_key及tls_cacert路径。
三、配置NSS名称服务开关
/etc/nsswitch.conf定义系统如何解析用户、组、主机等信息。需将ldap添加至passwd、group、shadow三类条目末尾,确保LDAP用户能被识别且不干扰本地账户。
1、编辑/etc/nsswitch.conf:
sudo nano /etc/nsswitch.conf
2、定位并修改以下三行(保持原有顺序,仅追加[NOTFOUND=return] ldap):
passwd: files [NOTFOUND=return] ldap
group: files [NOTFOUND=return] ldap
shadow: files [NOTFOUND=return] ldap
3、严禁删除或移动files项,否则本地root及其他系统账户将无法登录。
四、配置PAM认证堆栈
PAM决定用户登录时的身份校验流程。需为common-auth、common-account、common-password、common-session四类文件注入ldap模块,启用统一认证逻辑。
1、检查PAM配置目录结构:
ls /etc/pam.d/common-*
2、向/etc/pam.d/common-auth追加一行(置于其他auth行之后):
auth [success=ok user_unknown=ignore default=bad] pam_ldap.so use_first_pass
3、向/etc/pam.d/common-account追加一行:
account [success=ok user_unknown=ignore default=bad] pam_ldap.so
4、向/etc/pam.d/common-password追加一行(仅用于密码修改,不影响登录):
password requisite pam_ldap.so use_authtok
5、向/etc/pam.d/common-session追加一行(确保LDAP用户获得home目录挂载及环境初始化):
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
6、所有新增行必须以tab缩进对齐,且pam_ldap.so后不可遗漏use_first_pass或use_authtok参数。
五、启动并验证LDAP系统级服务
完成上述配置后,需重启nslcd服务并触发PAM/NSS重载,再通过多维度命令验证LDAP用户是否被系统全局识别。
1、启动nslcd服务并设为开机自启:
sudo systemctl start nslcd
sudo systemctl enable nslcd
2、立即测试LDAP用户查询:
getent passwd testuser
getent group ROLE_MODELER_KYLIN
3、验证SSH登录能力(需确保/etc/ssh/sshd_config含UsePAM yes):
ssh -l testuser 127.0.0.1
4、若getent无输出,请立即检查nslcd日志:sudo journalctl -u nslcd -n 50 -f。











