1.工作过程

OpenLDAP服务分为客户端和服务端两个部分,服务端的配置过程这里不再赘述。当服务端配置结束后,在服务端的ldap数据库中,应存放着用户的信息,客户端通过安装nss-pam-ldapd(一个瘦身版本的 PAM 模块和一个瘦身版本的 NSS 模块集合),以及配置/etc/pam.d下的system-auth文件和password-auth两个文件来完成客户端的配置。下面给出具体配置过程以及一些坑的解答。

2.配置过程

1)yum install nss-pam-ldapd openldap-clients openldap -y

nss-pam-ldapd,是pam模块和nss模块的集合,主要作用是使存在于服务端ldap数据库中的用户,进行ssh登陆客户端时,可以通过pam方式进行验证,而这种情况下此用户是不存在于客户端的服务器上的。
openldap-clients,就是OpenLDAP的客户端软件包,此软件包安装后,不需要像服务端一样运行起来,他的作用主要是集成了类似ldapsearch,ldapadd之类的命令,可以用户验证服务端或者对服务端数据库中的用户信息进行查询,添加等。
openldap,主要包含了OpenLDAP所必须的库文件,当通过pam验证时,这些库文件是必须有的。


2)vim /etc/openldap/ldap.conf

OpenLDAP客户端配置,实现用户认证(原创)_第1张图片


3)authconfig-tui # 将下图中红框中的选中,然后next,按照提示操作完成即可。

OpenLDAP客户端配置,实现用户认证(原创)_第2张图片


4)分别查看以下文件的内容,是否已经自动更改成如下所示,若没有,请手动更改,手动更改后,请勿再执行authconfig-tui命令,否则会将手动更改的内容覆盖掉!
vim /etc/nsswitch.conf

passwd:     files sss ldap
shadow:     files sss ldap
group:        files sss ldap
hosts:         files dns
bootparams: nisplus [NOTFOUND=return] files
ethers:        files
netmasks:   files
networks:    files
protocols:    files
rpc:             files
services:     files sss
netgroup:   files sss ldap
publickey:  nisplus
automount:  files ldap
aliases:    files nisplus

vim /etc/pam.d/system-auth

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 100 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

vim /etc/pam.d/password-auth

auth        required      pam_env.so

auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 100 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok

password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

vim /etc/sysconfig/authconfig

 USELDAP=yes
 USELDAPAUTH=yes

vim /etc/ssh/sshd_config #确保没有其他禁止用户登陆的选项,将使用pam模块选项改成yes
UsePAM yes

systemctl restart nslcd
systemctl restart sshd


尝试从服务端查看ldap用户信息

ldapsearch -H ldap://你的ldap服务端ip -x -b "ou=你自己的,dc=你自己的,dc=你自己的" | grep dn


若能查看到,使用id命令,查看ldap用户在客户端本机是否能查看到,能的话,再尝试ssh使用ldap用户登录,登录成功,即完毕!

3.常见问题解答

1)
问:在网上的有些文档中,经常看到再重启nslcd之前,要先停掉sssd服务,很多人可能不知道sssd是什么服务,而且当去停止sssd服务的时候,发现根本就没有这个服务。
答:新版RedHat/CentOS默认改为使用SSSD来处理有关系统安全服务的名称查询请求,因为sssd服务本身已经具备缓存的功能,因此可以不使用nscd后台进程(重复缓存并无好处),因此如果你此时发现你并没有sssd服务,那么你就可以跳过停掉sssd服务这一步。
2)
问:ldapsearch和id命令都可以查看到用户,但是当用su切过去的时候,却说此用户不在sudoers文件中。
答:按照此文档,配置ldap中的用户到sudoers文件中, https://www.jb51.net/article/113902.htm
3)
问:远程ssh登陆时候,总是permission rufused
答:将/etc/pam.d/system-auth 和 password-auth中的uid >=1000改为100,如下
auth requisite pam_succeed_if.so uid >= 100 quiet_success
4)
问:执行ldapsearch的时候,总是报这个错误
ldap_bind: Can't contact LDAP server (-1)
答:首先从客户端ping服务端,看是否能通
其次,查看服务端的389端口是否开启
以及是否关闭了防火墙,若是开着防火墙,将389端口放行
5)
问:ldapsearch可以查看到用户,但是id查看不到,su和ssh也不行
答:systemctl stop nscd ; systemctl restart nslcd
注意这里的nslcd和nscd并不是一个服务,nslcd在上面已经介绍过,nscd服务是一个缓存服务,主要缓存passwd group hosts,所以它会记录三个库,分别对应源/etc/passwd, /etc/hosts 和 /etc/resolv.conf每个库保存两份缓存,一份是找到记录的,一份是没有找到记录的,因此由于缓存的存在,查看不到更新的ldap用户信息。