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
3)authconfig-tui # 将下图中红框中的选中,然后next,按照提示操作完成即可。
4)分别查看以下文件的内容,是否已经自动更改成如下所示,若没有,请手动更改,手动更改后,请勿再执行authconfig-tui命令,否则会将手动更改的内容覆盖掉!
vim /etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
automount: files sss ldap
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.soaccount 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.sopassword 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_authtokpassword 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用户信息。
原文地址:http://blog.51cto.com/11093860/2161809