==================================LDAP接管LINUX登录认证===================================
LDAP 接管linxu 登录身份验证,需要配置两个服务:
Name Service Switch (NSS service) Nss服务是linux的基本本地用户名服务,用于解析基本用户名uid
例如,在运行命令 ls -l 时,如果某个文件 inode 给出文件的所有者是 “user 501”,那么nss命名服务就需要将 “uid 501” 解析成用户名,并在 ls 命令输出结果中输出。
以前nss是通过查找 /etc/passwd 文件中的所有用户帐号实现的。
现在由于用户现在也存储在 LDAP 目录中,因此系统需要配置成同时对 passwd 文件和 LDAP 目录中的帐号都进行解析。
这种功能是通过 /usr/lib/libnss_ldap.so 库提供的。
身份验证服务(PAM) PAM是linux基本登录服务
以前只查/etc/passwd
现在也要查LDAP数据库
nss_ldap-226-6是做什么的?
nss包括两个 LDAP 访问客户机:nss_ldap 和 pam_ldap
nss_ldap
是一组 C 库扩展, /usr/lib/libnss_ldap.so
使LDAP 目录服务器可以用作一个user和group的信息的主源
pam_ldap
是一个 Linux-PAM 模块
使LDAP支持linux pam身份验证功能
配置linux login 由ldap接管
在客户端(即控制台下,不能在SSH下,因为要起界面)执行authconfig
按上图选择ldap 选项
点next
输入server地址(如果ldap server就装在本地,就输入127.0.0.1即可)
输入BaseDN,如dc=otas,dc=cn
点ok
系统提示:
Stoping nscd : [FAILED]
Starting nscd : [ OK ]
[root@vm log]# ps -ef
UID PID PPID C STIME TTY TIME CMD
ldap 3501 1 0 10:46 ? 00:00:00 /usr/sbin/slapd -u ldap -h ldap:///
root 3510 2723 0 10:57 tty1 00:00:00 -bash
nscd 3571 1 0 10:58 ? 00:00:00 /usr/sbin/nscd
测试
-bash-3.00$ pwd
/
-bash-3.00$ su -
Password:
[root@vm ~]#
开启一个ssh 登陆(用户名test,此用户名在passwd里没有,只存在于ldap库中)
Authconfig会开启nscd service
nscd - name service cache daemon
Nscd provides cacheing for accesses of the passwd, group, and hosts databases through standard libc interfaces,
ldapsearch -x出错,不显示任何条目————ldap.conf没配BaseDN
现象:
[root@vm ~]# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <> with scope sub
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
在debug调试模式下看到下面的信息
slapd starting
conn=0 fd=10 ACCEPT from IP=127.0.0.1:32769 (IP=0.0.0.0:389)
conn=0 op=0 BIND dn="" method=128
conn=0 op=0 RESULT tag=97 err=0 text=
conn=0 op=1 SRCH base="dc=example,dc=com" scope=2 deref=0 filter="(objectClass=*)"
conn=0 op=1 SEARCH RESULT tag=101 err=32 nentries=0 text=
conn=0 op=2 UNBIND
conn=0 fd=10 closed
slapd shutdown: waiting for 0 threads to terminate
slapd stopped.
赶紧去检查ldap.conf,发觉配置返回初始化的缺省配置了
[root@vm openldap]# cat ldap.conf
#SIZELIMIT 12
#TIMELIMIT 15
#DEREF never
HOST 127.0.0.1
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
解决:重新配ldap.conf,重起ldap server
结论:发现执行authconfig,不选ldap(即选择md5 shadown passwd),再点next后,authconfig会自动把/etc/openldap/ldap.conf复原为缺省,而造成客户端进不去了
(客户端要求dn和server的dn要匹配)