LDAP部署及實踐
1、安裝ldap
yum -y install openldap openldap-servers openldap-clients compat-openldapmigrationtoolsopenldap-servers-sql
migrationtools 實現OpenLDAP 使用者及使用者組的新增,migrationtools 開源工具通過查詢/etc/passwd、/etc/shadow、/etc/groups 生成LDIF 檔案,並通過ldapadd 命令更新資料庫資料,完成使用者新增
2、檢視版本
[root@192 ~]# slapd -V @(#) $OpenLDAP: slapd2.4.44 (Jan 29 2019 17:42:45) $ mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd [root@192 ~]#
從OpenLDAP2.4.23版本開始所有配置資料都儲存在/etc/openldap/slapd.d/中,不再使用slapd.conf作為配置檔案。
3、設定openldap的管理員密碼:
[root@192 ~]# slappasswd -s 123 {SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl [root@192 ~]#
上述加密後的欄位儲存下,等會我們在配置檔案中會使用到。
4、修改olcDatabase={2}hdb.ldif檔案
[root@192 ~]# cd /etc/openldap/slapd.d/cn=config [root@192 cn=config]# ll total 24 drwxr-x---. 2 ldap ldap 4096 May 1 19:49 cn=schema -rw-------. 1 ldap ldap 378 May 1 19:33 cn=schema.ldif -rw------- 1 ldap ldap 624 May 1 19:48 olcDatabase={0}config.ldif -rw-------. 1 ldap ldap 443 May 1 19:33 olcDatabase={-1}frontend.ldif -rw-------. 1 ldap ldap 562 May 1 19:33 olcDatabase={1}monitor.ldif -rw-------. 1 ldap ldap 609 May 1 19:33 olcDatabase={2}hdb.ldif [root@192 cn=config]# vi olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 2b91b3bd
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 5f5347b6-1feb-103a-867d-35e9e57544e1
creatorsName: cn=config
createTimestamp: 20200501113350Z
entryCSN: 20200501113350.128694Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20200501113350Z
修改域資訊
olcSuffix: dc=asiainfo,dc=com
olcRootDN: cn=root,dc=asiainfo,dc=com
olcRootPW: {SSHA}FbSX+pFZE9V9+zxG/FyZWX8XtzRBDwJl
注意:冒號後面一定加空格,其中cn=root中的root表示OpenLDAP管理員的使用者名稱,而olcRootPW表示OpenLDAP管理員的密碼,即上面生成的密碼。
LDAP是一種通訊協議,如同HTTP是一種協議一樣的!
LDAP連線伺服器的連線字串格式為:ldap://servername/DN
其中DN有三個屬性,分別是CN,OU,DC
CN, OU, DC 都是 LDAP 連線伺服器的端字串中的區別名稱(DN, distinguished name)
CN:Common Name 為使用者名稱或伺服器名,最長可以到80個字元,可以為中文;
DC:Domain Component domain component一般為公司名,例如:dc=163,dc=com
DN:Distinguished Namedistinguished name為一條LDAP記錄項的名字,有唯一性,例如:dc:"cn=admin,ou=developer,dc=163,dc=com"
DN可以表示為ldap的某個目錄,也可以表示成目錄中的某個物件,這個物件可以是使用者等。
上邊來了一堆的名詞解釋,看的雲裡霧裡,還不是很明白,怎麼跟自己的組織架構對應起來呢?看看下邊的圖是不是清晰明瞭
5、修改完可以測試配置資訊是否正確
[root@192 cn=config]# slaptest -u 5eac4b21 ldif_read_file: checksum error on "/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif" config file testing succeeded [root@192 cn=config]#
6、啟動ldap
systemctl start slapd
7、配置ldap資料庫
OpenLDAP預設以Berkeley DB作為後端資料庫,BerkeleyDB資料庫主要以雜湊的資料型別進行資料儲存,如以鍵值對的方式進行儲存。
BerkeleyDB是一類特殊的面向查詢進行優化、面向讀取進行優化的資料庫,主要用於搜尋、瀏覽、更新查詢操作,一般對於一次寫入資料、多次查詢和搜尋有很好的效果。BerkeleyDB不支援事務型資料庫(MySQL、MariDB、Oracle等)所支援的高併發的吞吐量以及複雜的事務操作。
現在來開始配置OpenLDAP資料庫,使用如下命令:
[root@192 cn=config]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG [root@192 cn=config]# chown ldap:ldap -R /var/lib/ldap [root@192 cn=config]# chmod 700 -R /var/lib/ldap [root@192 cn=config]#
注意:/var/lib/ldap/就是BerkeleyDB資料庫預設儲存的路徑。
8、匯入基本Schema
[root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=cosine,cn=schema,cn=config" [root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=nis,cn=schema,cn=config" [root@192 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=inetorgperson,cn=schema,cn=config" [root@192 ~]#
9、修改migrate_common.ph檔案
migrate_common.ph檔案主要是用於生成ldif檔案使用,修改migrate_common.ph檔案,
修改下面三個值
$DEFAULT_MAIL_DOMAIN = “asiainfo.com”; #與上面配置的對應 $DEFAULT_BASE = “dc=asiainfo,dc=com”; #與上面配置的對應 $EXTENDED_SCHEMA = 1; #開啟擴充套件模式
到此OpenLDAP的配置就已經全部完畢,下面我們來開始新增使用者到OpenLDAP中。
10、預設情況下OpenLDAP是沒有普通使用者的,但是有一個管理員使用者。管理使用者就是前面我們剛剛配置的root。
現在我們把系統中的使用者,新增到OpenLDAP中。為了進行區分,我們現在新加兩個使用者ldapuser1和ldapuser2,和兩個使用者組ldapgroup1和ldapgroup2,如下:
groupadd ldapgroup1 groupadd ldapgroup2 useradd -g ldapgroup1 ldapuser1 useradd -g ldapgroup2 ldapuser2 echo ldapuser1:123 | chpasswd echo ldapuser2:123 | chpasswd
把剛剛新增的使用者和使用者組提取出來,這包括該使用者的密碼和其他相關屬性
grep ":10[0-9][0-9]" /etc/passwd > /root/users grep ":10[0-9][0-9]" /etc/group > /root/groups
根據上述生成的使用者和使用者組屬性,使用migrate_passwd.pl檔案生成要新增使用者和使用者組的ldif,如下:
[root@192 ~]# /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif [root@192 ~]# /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif
注意:後續如果要新加使用者到OpenLDAP中的話,我們可以直接修改users.ldif檔案即可。
匯入使用者及使用者組到OpenLDAP資料庫
配置openldap基礎的資料庫,如下:
vi base.ldif
dn: dc=asiainfo,dc=com o: asiainfo com dc: asiainfo objectClass: top objectClass: dcObject objectclass: organization dn: cn=root,dc=asiainfo,dc=com cn: root objectClass: organizationalRole description: Directory Manager dn: ou=People,dc=asiainfo,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=asiainfo,dc=com ou: Group objectClass: top objectClass: organizationalUnit
匯入基礎資料庫
[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif
adding new entry "dc=asiainfo,dc=com"
adding new entry "cn=root,dc=asiainfo,dc=com"
adding new entry "ou=People,dc=asiainfo,dc=com"
adding new entry "ou=Group,dc=asiainfo,dc=com"
[root@192 ~]#
此密碼是之前建立的root管理員密碼,如果密碼錯誤,會報錯:
[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/base.ldif ldapadd: attributeDescription "dn": (possible missing newline after line 11, entry "dc=asiainfo,dc=com"?) ldapadd: attributeDescription "dn": (possible missing newline after line 12, entry "dc=asiainfo,dc=com"?) ldapadd: attributeDescription "dn": (possible missing newline after line 13, entry "dc=asiainfo,dc=com"?) adding new entry "dc=asiainfo,dc=com" ldap_add: Type or value exists (20) additional info: objectClass: value #0 provided more than once [root@192 ~]#
這是因為密碼錯誤 或者dn前沒有空一行,或者每行結尾有多餘空格
將之前建立的倆個使用者匯入到資料庫
[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/users.ldif
adding new entry "uid=ldapuser1,ou=People,dc=asiainfo,dc=com"
adding new entry "uid=ldapuser2,ou=People,dc=asiainfo,dc=com"
[root@192 ~]#
匯入使用者組到資料庫
[root@192 ~]# ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/groups.ldif
adding new entry "cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com"
adding new entry "cn=ldapgroup2,ou=Group,dc=asiainfo,dc=com"
[root@192 ~]#
驗證:
檢視BerkeleyDB資料庫檔案,使用如下命令:
[root@192 ~]# ll /var/lib/ldap/ total 492 -rwx------ 1 ldap ldap 2048 May 2 17:47 alock -rw------- 1 ldap ldap 8192 May 2 18:28 cn.bdb -rwx------ 1 ldap ldap 262144 May 2 18:32 __db.001 -rwx------ 1 ldap ldap 32768 May 2 18:32 __db.002 -rwx------ 1 ldap ldap 93592 May 2 18:32 __db.003 -rwx------ 1 ldap ldap 845 May 2 17:47 DB_CONFIG -rwx------ 1 ldap ldap 8192 May 2 17:47 dn2id.bdb -rwx------ 1 ldap ldap 32768 May 2 17:47 id2entry.bdb -rwx------ 1 ldap ldap 10485760 May 2 18:32 log.0000000001 -rw------- 1 ldap ldap 8192 May 2 18:32 mail.bdb -rw------- 1 ldap ldap 8192 May 2 18:28 objectClass.bdb -rw------- 1 ldap ldap 8192 May 2 18:28 ou.bdb -rw------- 1 ldap ldap 8192 May 2 18:32 sn.bdb [root@192 ~]#
此時BerkeleyDB資料庫檔案中多了cn.bdb、sn.bdb、ou.bdb等資料庫檔案
查詢OpenLDAP的相關資訊
使用者和使用者組全部匯入完畢後,我們就可以查詢OpenLDAP的相關資訊。
查詢OpenLDAP全部資訊,使用如下命令:
[root@192 ~]# ldapsearch -x -b "dc=asiainfo,dc=com" -H ldap://127.0.0.1 # extended LDIF # # LDAPv3 # base <dc=asiainfo,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # asiainfo.com dn: dc=asiainfo,dc=com o: asiainfo com dc: asiainfo objectClass: top objectClass: dcObject objectClass: organization # root, asiainfo.com dn: cn=root,dc=asiainfo,dc=com cn: root objectClass: organizationalRole description: Directory Manager
查詢新增的OpenLDAP使用者資訊,使用如下命令:
[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "uid=ldapuser1" dn: uid=ldapuser1,ou=People,dc=asiainfo,dc=com uid: ldapuser1 cn: ldapuser1 sn: ldapuser1 mail: [email protected] objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: e2NyeXB0fSQ2JENGRmZsL05kNDI4RUhYeSRoTFhsbHhRR1pOeTNVQXVNSDlzR2h mdC8ua3JjSjg3eU96Njg1SjBvWEEvT1EybWxDaERFZFo0QUdieC9HSXk2c3FnM1E3eVlxMnVoNzNj ckJISy82Lw== shadowLastChange: 18384 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1000 gidNumber: 1000 homeDirectory: /home/ldapuser1 [root@192 ~]#
查詢新增的OpenLDAP使用者組資訊,使用如下命令:
[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1" dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com objectClass: posixGroup objectClass: top cn: ldapgroup1 userPassword:: e2NyeXB0fXg= gidNumber: 1000 [root@192 ~]#
把OpenLDAP使用者加入到使用者組
儘管我們已經把使用者和使用者組資訊,匯入到OpenLDAP資料庫中了。但實際上目前OpenLDAP使用者和使用者組之間是沒有任何關聯的。
如果我們要把OpenLDAP資料庫中的使用者和使用者組關聯起來的話,我們還需要做另外單獨的配置。
現在我們要把ldapuser1使用者加入到ldapgroup1使用者組,需要新建新增使用者到使用者組的ldif檔案,如下:
cat > add_user_to_groups.ldif << EOF dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com changetype: modify add: memberuid memberuid: ldapuser1 EOF
然後執行
ldapadd -x -w "123" -D "cn=root,dc=asiainfo,dc=com" -f /root/add_user_to_groups.ldif
查詢新增的OpenLDAP使用者組資訊,如下:
[root@192 ~]# ldapsearch -LLL -x -D "cn=root,dc=asiainfo,dc=com" -w "123" -b "dc=asiainfo,dc=com" "cn=ldapgroup1" dn: cn=ldapgroup1,ou=Group,dc=asiainfo,dc=com objectClass: posixGroup objectClass: top cn: ldapgroup1 userPassword:: e2NyeXB0fXg= gidNumber: 1000 memberUid: ldapuser1 [root@192 ~]#
可以很明顯的看出ldapuser1使用者已經加入到ldapgroup1使用者組了。
開啟OpenLDAP日誌訪問功能
預設情況下OpenLDAP是沒有啟用日誌記錄功能的,但是在實際使用過程中,我們為了定位問題需要使用到OpenLDAP日誌。
新建日誌配置ldif檔案,如下:
cat > /root/loglevel.ldif << EOF dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats EOF
匯入到OpenLDAP中,並重啟OpenLDAP服務,如下:
[root@192 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/loglevel.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" [root@192 ~]# systemctl restart slapd [root@192 ~]#
修改rsyslog配置檔案,並重啟rsyslog服務,如下:
cat >> /etc/rsyslog.conf << EOF local4.* /var/log/slapd.log EOF systemctl restart rsyslog
檢視OpenLDAP日誌
tail -f /var/log/slapd.log
修改OpenLDAP預設監聽埠
OpenLDAP預設監聽的埠是389.如果我們現在要修改OpenLDAP監聽埠的話,我們可以修改/etc/sysconfig/slapd檔案。例如我們現在把OpenLDAP監聽的埠修改為4567,可以進行如下操作:
vim /etc/sysconfig/slapd SLAPD_URLS=”ldapi://0.0.0.0:4567/ldap://0.0.0.0:4567/” 重啟OpenLDAP服務,如下: systemctl restart slapd.service
-x 進行簡單認證
-D 用來繫結伺服器的DN
-h 目錄服務的地址
-w 繫結DN的密碼(ldap管理員密碼)
-f 使用ldif檔案進行條目新增的檔案
-Y 指定用於身份驗證的SASL機制。如果沒有指定,程式將選擇伺服器知道的最佳機制
-H 指定引用ldap伺服器的URI;只允許協議/主機/埠欄位;一個用空格或逗號分隔的URI列表。
例子
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret(這樣寫就是在命令列新增條目)
ldapsearch
-x 進行簡單認證
-D 用來繫結伺服器的DN
-w 繫結DN的密碼
-b 指定要查詢的根節點
-H 指定要查詢的伺服器
-LLL禁用列印無關資訊
ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com"
使用簡單認證,用 "cn=root,dc=starxing,dc=com" 進行繫結,
要查詢的根是 "dc=starxing,dc=com"。這樣會把繫結的使用者能訪問"dc=starxing,dc=com"下的
所有資料顯示出來。
ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -htroy.osdn.zzti.edu.cn
ldapsearch -b "dc=canon-is,dc=jp" -Hldaps://192.168.0.92:636
ldapdelete
ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com"
ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com'
這樣就可以刪除'uid=zyx,dc=it,dc=com'記錄了,應該注意一點,如果o或ou中有成員是不能刪除的。
ldappasswd
-x 進行簡單認證
-D 用來繫結伺服器的DN
-w 繫結DN的密碼
-S 提示的輸入密碼
-s pass 把密碼設定為pass
-a pass 設定old passwd為pass
-A 提示的設定old passwd
-H 是指要繫結的伺服器
-I 使用sasl會話方式
#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S
New password:
Re-enter new password:
就可以更改密碼了,如果原來記錄中沒有密碼,將會自動生成一個userPassword
建立ldap賬號
https://blog.51cto.com/ljl2013/1359441
Linux基於LDAP進行使用者認證
有三種方法:
一、使用authconfig-tui 圖形介面配置
二、使用authconfig啟動
1、準備工作
關閉防火牆
關閉selinux
2、安裝ldap客戶端
yum install -y nss-pam-ldapd pam_ldap openldap-clients
3、備份配置檔案
#備份 authconfig --savebackup=openldap.bak #恢復 authconfig --restorebackup=openldap.bak
4、authconfig啟動即可
authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update
如果執行上述命令沒效果,可以執行authconfig --restorebackup=openldap.bak恢復初始配置,再執行“authconfig 命令,操作如下:
[root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update [root@slave-02 ~]# ps -ef | grep nslcd #可以看到上面沒有啟動成功 root 2436 1912 0 21:57 pts/0 00:00:00 grep --color=auto nslcd [root@slave-02 ~]# [root@slave-02 ~]# authconfig --restorebackup=openldap.bak #恢復 [root@slave-02 ~]# [root@slave-02 ~]# authconfig --enableldap --enableldapauth --ldapserver=192.168.7.6 --ldapbasedn="dc=asiainfo,dc=com" --enablemkhomedir --update [root@slave-02 ~]# ps -ef | grep nslcd #啟動成功了 nslcd 2569 1 0 21:58 ? 00:00:00 /usr/sbin/nslcd root 2579 1912 0 21:58 pts/0 00:00:00 grep --color=auto nslcd [root@slave-02 ~]#
三、主機配置(略複雜)
1-3 與authconfig一樣
4、配置 /etc/sysconfig/authconfig
/etc/sysconfig/authconfig 檔案由 authconfig 包自動建立。 配置該檔案的目的是用來跟蹤 LDAP 身份認證機制是否正確啟用。
[root@slave-02 ~]# cp /etc/sysconfig/authconfig /etc/sysconfig/authconfig.$(date +%F) [root@slave-02 ~]# sed -i '/USESYSNETAUTH/s/no/yes/' /etc/sysconfig/authconfig [root@slave-02 ~]# sed -i '/USELDAPAUTH/s/no/yes/' /etc/sysconfig/authconfig [root@slave-02 ~]# sed -i '/USEMKHOMEDIR/s/no/yes/' /etc/sysconfig/authconfig [root@slave-02 ~]# sed -i '/PASSWDALGORITHM/s/md5/yes/' /etc/sysconfig/authconfig [root@slave-02 ~]# sed -i '/USELDAP/s/no/yes/' /etc/sysconfig/authconfig [root@slave-02 ~]# cat /etc/sysconfig/authconfig | grep yes CACHECREDENTIALS=yes PASSWDALGORITHM=yes USELDAP=yes USELDAPAUTH=yes USELOCAUTHORIZE=yes USEMKHOMEDIR=yes USEPWQUALITY=yes USESHADOW=yes USESSSD=yes USESYSNETAUTH=yes [root@slave-02 ~]#
5、配置 /etc/nsswith.conf
/etc/nsswith.conf 檔案由glibc包自動建立, 該檔案用於名稱轉換服務。通常LINUX系統身份驗證讀取本地檔案,要使身份驗證查詢通過LDAP伺服器必須在該檔案中找到passwd; shadow; group;三行在files後空格新增“ldap”
[root@slave-02 ~]# cp /etc/nsswitch.conf /etc/nsswitch.conf.$(date +%F) [root@slave-02 ~]# sed -i '/^passwd:/s/files/files ldap/' /etc/nsswitch.conf [root@slave-02 ~]# sed -i '/^shadow:/s/files/files ldap/' /etc/nsswitch.conf
[root@slave-02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
[root@slave-02 ~]# sed -i '/^group:/s/files/files ldap/' /etc/nsswitch.conf
[root@slave-02 ~]#
[root@slave-02 ~]# egrep "^passwd|^shadow|^group" /etc/nsswitch.conf
passwd: files ldap sss
shadow: files ldap sss
group: files ldap sss
[root@slave-02 ~]#
6、配置 /etc/pam.d/system-auth
身份驗證服務是實際向LDAP驗證使用者身份的服務。可插入身份驗證模組(PAM)提供了本地Linux身份驗證服務。pam_unix.so模組是通用模組,使用PAM機制對本地的/etc/passwd檔案檢查使用者帳號。PAMLDAP模組可以用來將身份驗證重定向到LDAP目錄上。身份驗證本身是由PAM程式執行的,它從身份驗證候選機制中獲取使用者名稱,將其繫結到openLDAP 伺服器上。如果繫結成功,PAM會報告說這個使用者已經成功通過了pam_ldap.so提供的身份驗證測試。根據PAM的配置不同,在使用者看到命令提示符之前可能會執行其它測試。
/etc/pam.d/system-auth檔案是CentOS的系統認證PAM檔案。在該檔案的auth,account,password,session四段中pam_unix.so模組後新增pam_ldap.so模組使身份驗證先對本地的/etc/passwd檔案檢查使用者帳號,然後再對LDAP伺服器進行檢查。同時因為是LDAP認證需要為使用者建立根目錄,所以還必須在會話(SESSION)階段增加pam_mkhomedir.so模組,為使用者登入自動建立宿主目錄。
[root@slave-02 ~]# vi /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 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 sha512 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 umask=0077
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
[root@slave-02 ~]# vi /etc/pam.d/password-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 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 sha512 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 umask=0077
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
7、配置 /etc/openldap/ldap.conf
[root@slave-02 ~]# cp /etc/openldap/ldap.conf /etc/openldap/ldap.conf.$(date +%F)
[root@slave-02 ~]# echo "BASE dc=asiainfo,dc=com" >>/etc/openldap/ldap.conf
[root@slave-02 ~]# echo "URI ldap://192.168.7.6" >>/etc/openldap/ldap.conf
[root@slave-02 ~]#
8、使用 ldapsearch命令測試能否讀取 openldap server 中的資料
[root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com" # extended LDIF # # LDAPv3 # base <dc=asiainfo,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # asiainfo.com dn: dc=asiainfo,dc=com o: asiainfo com dc: asiainfo objectClass: top objectClass: dcObject objectClass: organization # root, asiainfo.com dn: cn=root,dc=asiainfo,dc=com cn: root objectClass: organizationalRole description: Directory Manager # People, asiainfo.com dn: ou=People,dc=asiainfo,dc=com ou: People objectClass: top objectClass: organizationalUnit # Group, asiainfo.com dn: ou=Group,dc=asiainfo,dc=com ou: Group objectClass: top objectClass: organizationalUnit
如果出現下面資訊,解決該問題的方法是:
1)檢查/etc/hosts檔案,是否有ldapserver的記錄,最好能ping一下,看能否解析成功
2)到openldap server上檢查slapd服務是否正在執行,如果沒有,啟動slapd服務
3)檢查/etc/openldap/ldap.conf檔案,檢視裡面的BASE和URI是否正確
[root@slave-02 ~]# ldapsearch -x -b "dc=asiainfo,dc=com" ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1) [root@slave-02 ~]#
9、啟動 nslcd
systemctl start nslcd
10、測試,可以看到雖然主機上沒有ldapuser1這個使用者,但啟動nslcd後,連線上ldap server,便可以使用這個賬號
[root@slave-02 ~]# id ldapuser1 id: ldapuser1: no such user [root@slave-02 ~]# systemctl start nslcd [root@slave-02 ~]# id ldapuser1 uid=1000(any) gid=1000(any) groups=1000(any) [root@slave-02 ~]# su - ldapuser1 Creating directory '/home/ldapuser1'. [any@slave-02 ~]$
https://blog.csdn.net/weixin_33713707/article/details/92177797
https://mp.weixin.qq.com/s/JyH5mqwWFt0N1nGYZqBCBQ