一、創建LDAP認證用戶及權限
1.控制台修改密碼的存儲格式(因為從NIS遷移來的賬號密碼是cyrpt,ldap默認SSHA格式)
2.控制台創建一個用戶,並給該用戶指定ACI權限,用於linux客戶端連接ldap server(默認使用匿名用戶)
3.給client-root用戶添加權限
設置ACI名稱及選擇需要綁定的用戶
取消默認權限並按權限名稱排序
點擊ok保存即可,再點擊OK退出
修改匿名用戶的權限,確保是從新打開權限設置(退出再打開,否則報語法錯誤)
二、遷移NIS數據
1.配置NIS客戶端
[root@ldap-server1 ~]# nisdomainname ldap-server1.example.com
[root@ldap-server1 ~]# vim /etc/yp.conf
domain ldap-server1.example.com server ldap-server1.example.com
[root@ldap-server1 ~]# systemctl restart rpcbind
[root@ldap-server1 ~]# systemctl restart ypbind
[root@ldap-server1 ~]# yptest #確保可以成功,NIS服務可以參考 https://www.cnblogs.com/panwenbin-logs/p/16055480.html
2.生成導入的ldif文件
[root@ldap-server1 ~]# ypcat group > /tmp/group-file # /usr/share/dirsrv/schema/10rfc2307.ldif包含了系統想用的NIS map
[root@ldap-server1 ~]# ypcat passwd > /tmp/passwd-file
[root@ldap-server1 ~]# for i in `cut -d : -f 1,2 /tmp/passwd-file`;do echo ${i}:$[$(date +%s)/866400]:0:99999:7:::;done > /tmp/shadow-file #修改錯shodow文件的格式
[root@ldap-server1 ~]# for i in `awk -F ':' '{print $2}' /tmp/passwd-file`;do sed -i 's/$6$.\{95\}/x/g' /tmp/passwd-file;done #即將密碼內容替換為x,即passwod文件的格式
[root@ldap-server1 ~]# vim /etc/yp.conf #刪除nis配置
[root@ldap-server1 ~]# systemctl stop ypbind
[root@ldap-server1 ~]# yum install -y migrationtools #安裝遷移腳本
[root@ldap-server1 ~]# cd /usr/share/migrationtools/
[root@ldap-server1 migrationtools]# vim migrate_common.ph #修改遷移腳本
修改61行: Group為 Groups(openladp無需修改,RHDS 389-ds需要修改)
修改71、74行:設置LDAP DN及郵件域名
修改90行:1表示使用inetOrgPerson輔助類
[root@ldap-server1 migrationtools]# ./migrate_base.pl > /tmp/base.ldif
[root@ldap-server1 migrationtools]# vim /tmp/base.ldif
#刪除以下三個條目
dn: dc=server1,dc=example,dc=com
dn: ou=People,dc=server1,dc=example,dc=com
dn: ou=Groups,dc=server1,dc=example,dc=com
[root@ldap-server1 migrationtools]# vim migrate_passwd.pl
188 open(SHADOW, "/tmp/shadow-file") || return; #將/etc/shadow修改為/tmp/shadow-file
[root@ldap-server1 migrationtools]# ./migrate_passwd.pl /tmp/passwd-file > /tmp/passwd.ldif
[root@ldap-server1 migrationtools]# ./migrate_group.pl /tmp/group-file > /tmp/group.ldif
[root@ldap-server1 migrationtools]# vim ~/.ldaprc #配置LDAP客戶端
BINDDN cn:Directory Manager
[root@ldap-server1 migrationtools]# cat /etc/openldap/ldap.conf
BASE dc=server1,dc=example,dc=com
URI ldap://server1.example.com
[root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/base.ldif #導入數據
[root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/passwd.ldif -c
[root@ldap-server1 migrationtools]# ldapadd -x -W -f /tmp/group.ldif -c
[root@ldap-server1 migrationtools]# scp /etc/openldap/certs/cacert.pem 192.168.1.134:/etc/openldap/certs/cacert.pem #拷貝數據到客戶端
驗證導入結果
三、配置客戶端機器
[root@localhost ~]# vim /etc/hosts #確保和服務端網絡連通
192.168.1.132 ldap-server1.example.com
[root@localhost ~]# yum install -y nss_ldap openldap openldap-servers openldap-clients nss-pam-ldapd sssd #安裝必要的包
[root@localhost ~]# yum install -y authconfig-gtk
1.配置客戶端使用LDAP驗證,主要有以下幾種方式
A.命令行圖形界面
B.圖形界面配置
C:命令行
authconfig --enableldap --enableldapauth --ldapserver="ldap-server1.example.com" --ldapbasedn="dc=ldap-server1,dc=example,dc=com" --enableldaptls -–enablemkhomedir --update
以上操作會自動生成 /etc/sysconfig/authconfig 及 /etc/nslcd.conf 文件並根據配置內容替換相關配置
2.配置nslcd服務
[root@localhost ~]# vim /etc/nslcd.conf #想使 nss 可以查詢ldap,那么首先就需要啟用一個叫 nslcd 的服務
[root@localhost ~]# grep "^[a-z]" /etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://ldap-server1.example.com/ #LDAP服務器地址
base dc=ldap-server1,dc=example,dc=com #LDAP suffix DN
binddn uid=client-root,dc=ldap-server1,dc=example,dc=com #鏈接的用戶,之前創建的client-root
bindpw secret #client-root的密碼
ssl start_tls #啟用TLS
tls_cacertfile /etc/openldap/certs/cacert.pem #CA證書配置
[root@localhost ~]# vim /etc/nsswitch.conf
passwd: files ldap #將nss修改為ldap
shadow: files ldap
group: files ldap
[root@localhost ~]# sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth #將系統和ssh的驗證修改為ldap
[root@localhost ~]# sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth
[root@localhost ~]# cat ~/.ldaprc #配置LDAP客戶端,
BINDDN cn=Directory Manager
[root@localhost ~]# cat /etc/openldap/ldap.conf
URI ldap://ldap-server1.example.com/
BASE dc=ldap-server1,dc=example,dc=com
TLS_CACERT /etc/openldap/certs/cacert.pem
[root@localhost ~]# ldapsearch -x -ZZ
[root@localhost ~]# vim /etc/sysconfig/authconfig
[root@localhost ~]# grep -i yes /etc/sysconfig/authconfig #authconfig 文件由 authconfig 包自動創建。 配置該文件的目的是用來跟蹤 LDAP 身份認證機制是否正確啟用
CACHECREDENTIALS=yes
USEFPRINTD=yes
USELDAP=yes
USELDAPAUTH=yes
USELOCAUTHORIZE=yes
USEMKHOMEDIR=yes
USEPWQUALITY=yes
USESHADOW=yes
USESSSD=yes
[root@localhost pam.d]# getent passwd
[root@localhost ~]# grep "^[a-z]" /etc/sssd/sssd.conf
autofs_provider = ldap # 配置 autofs 的提供程序為 ldap
cache_credentials = True # 開啟緩存
ldap_search_base = dc=ldap-server1,dc=example,dc=com # ldap 查詢的base dn
id_provider = ldap # id 的提供程序為 ldap
auth_provider = ldap # 配置 auth 認證的提供程序為 ldap
chpass_provider = ldap # 更改密碼 操作時的對用應用
ldap_uri = ldap://ldap-server1.example.com/ # ldap 的 URL 路徑
ldap_id_use_start_tls = True # 開啟 ldap 的 tls 加密
ldap_tls_cacert = /etc/openldap/certs/cacert.pem # ldap 服務 tls 加密信任證書(CA根證書)
ldap_tls_reqcert = never #如果不想強制啟用TLS,可以設置此參數,類似ldapsearch -Z 和-ZZ的區別
services = nss, pam, autofs # 提供的服務
domains = default # 設置啟用的域
homedir_substring = /home
[root@localhost ~]# systemctl restart sssd #啟動服務
[root@localhost ~]# systemctl restart nslcd
3.測試
切換到ldap用戶時提示沒有用戶目錄,可以通過以下配置解決
[root@localhost ~]# vim /etc/pam.d/sshd
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 #添加該行
其他問題:
org.freedesktop.DBus.Error.ServiceUnknown: The name com.redhat.oddjob_mkhomedir was not provided by any .service files
檢查一下systemctl status oddjobd 是否啟動。
最好再檢查一下dbus.socket 和 dbus.service 這兩個服務 是否正常
四、客戶端自動掛載配置
以上配置會出現一個這樣的問題,如果用戶在不同的客戶機上都創建自己的家目錄,無法做到在不同的客戶機下共享家目錄,所以我們將使用NFS服務為每個用戶都創建自己自己的共享目錄,用戶從不同的客戶機上登錄時,都掛載使用NFS服務器上的共享目錄,這樣就能保證用戶家目錄下的文件一致了
1、LDAP服務器上NFS共享配置
NFS服務也可以單獨搭建在另外一台服務器。由於我使用的是虛擬機,所以這里我把NFS服務也部屬在LDAP服務器上。
[root@ldap-server1 ~]# cd /home/ [root@ldap-server1 home]# mkdir guests [root@ldap-server1 home]# cp -ar nis-user* guests/ #由於默認在/home下,掛載到其他機器會覆蓋其他機器用戶的家目錄,需要換個路徑 [root@ldap-server1 ~]# yum install nfs-utils -y # 安裝軟件包 [root@ldap-server1 ~]# vim /etc/exports /home/guests 192.168.1.0/24(rw) [root@ldap-server1 ~]# exportfs -rv #使配置生效 exporting 192.168.1.0/24:/home [root@ldap-server1 ~]# exportfs -v /home 192.168.1.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) [root@ldap-server1 ~]# systemctl enable rpcbind [root@ldap-server1 ~]# systemctl restart rpcbind [root@ldap-server1 ~]# systemctl enable nfs [root@ldap-server1 ~]# systemctl restart nfs
如果有防火牆,配置防火牆策略
firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd firewall-cmd --reload
2.修改LDAP上用戶的家目錄,以nis-user1為例
到此,服務器端就配置完成了
2、客戶端配置
查看服務端共享
[root@nis-client ~]# showmount -e 192.168.1.132 #--查看服務端共享,正常顯示如下,否則防火牆策略沒配置對或服務未正常啟動 Export list for 192.168.1.132: /home/guests 192.168.1.0/24 [root@nis-client ~]# yum install autofs nfs-utils -y [root@nis-client ~]# vim /etc/auto.master /home/guests /etc/auto.guests #加入這一行 說明: /home/guests --指定需要把遠程服務器上的目錄掛載到本地客戶端的哪個目錄下。 /etc/auto.guests ---指定掛載時用到的子配置文件名,這是一個映射文件,名字可以隨便取,路徑也可以隨便。 啟動autofs.service的時候,會自動創建/home/guests目錄。並且autofs服務會一直監控這個目錄,只要有用戶訪問這個目錄時,它就會觸發 /etc/auto.guests 配置文件。然后根據這個配置文件的內容為用戶掛載指定目錄。 [root@nis-client ~]# vim /etc/auto.guests * -rw,nfs4 192.168.1.132:/home/guests/& 說明: * 表示客戶端用戶訪問 /home/guests 目錄下的任意內容。比如,我執行命令:ls /home/guests/abcderfg,那么*號就表示abcdefg & 表示服務器端”192.168.1.132:/home/guests/“目錄下的abcderfg。即*和&是一致的 [root@nis-client ~]# systemctl restart autofs
3.驗證
[root@nis-client home]# ll /home/guests/ 總用量 0 [root@nis-client guests]# su - nis-user1 # 切換到LDAP用戶,切換的時候會自動掛載NFS服務器上的用戶目錄 上一次登錄:四 3月 31 15:18:11 CST 2022pts/2 上 [nis-user1@nis-client ~]$ pwd /home/guests/nis-user1 [nis-user1@nis-client ~]$ ls /home/guests/nis-user2 #ls 訪問nis-user2時會自動創建nis-user2目錄 ls: 無法打開目錄/home/guests/nis-user2: 權限不夠 [nis-user1@nis-client ~]$ ll /home/guests/ 總用量 0 drwx------ 5 nis-user1 nis-user1 107 3月 31 18:20 nis-user1 drwx------ 3 nis-user2 nis-user2 78 3月 25 18:33 nis-user2
五、拓展(openLDAP導入系統用戶)
[root@ldap01 ~]# yum install migrationtools -y #安裝數據遷移工具 [root@ldap01 ~]# for i in {1..5};do adduser ldap${i}; echo 123456|passwd --stdin ldap${i} &> /dev/null;done #創建測試用戶 [root@ldap01 ~]# id ldap1 [root@ldap01 ~]# vim /usr/share/migrationtools/migrate_common.ph #替換為自己的域名及suffix # Default DNS domain $DEFAULT_MAIL_DOMAIN = "pwb.com"; # Default base $DEFAULT_BASE = "dc=ldap01,dc=pwb,dc=com"; [root@ldap01 ~]# /usr/share/migrationtools/migrate_base.pl > base.ldif #創建OpenLDAP根域條目 [root@ldap01 ~]# vim base.ldif #刪除以下三個條目 dn: dc=dc=ldap01,dc=pwb,dc=com dn: ou=People,dc=ldap01,dc=pwb,dc=com dn: ou=Groups,dc=ldap01,dc=pwb,dc=com [root@ldap01 ~]# grep ldap[0-9] /etc/passwd > user_list.txt [root@ldap01 ~]# grep ldap[0-9] /etc/group > group_list.txt [root@ldap01 ~]# /usr/share/migrationtools/migrate_passwd.pl user_list.txt user.ldif [root@ldap01 ~]# /usr/share/migrationtools/migrate_group.pl group_list.txt group.ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f base.ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f user.ldif [root@ldap01 ~]# ldapadd -x -W -D "cn=admin,dc=ldap01,dc=pwb,dc=com" -f group.ldif [root@ldap01 ~]# ldapsearch -x #查看數據是否存在
控制台查看數據
參考鏈接:
https://www.yuque.com/panwenbin-yzfnx/ukrlas/hbvibl/edit https://www.cnblogs.com/somata/p/LinuxLDAPUserAuthentication.html https://www.cnblogs.com/networking/p/14193559.html https://www.cnblogs.com/rusking/p/8109873.html https://blog.csdn.net/weixin_34109408/article/details/92310844 https://www.linuxidc.com/Linux/2016-08/134228.htm