OpenLDAP客戶端配置,實現用戶認證(原創)
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.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.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用戶信息。
OpenLDAP客戶端配置,實現用戶認證(原創)