LDAP資料


14.4  管理OpenLDAP

啟動OpenLDAP服務器程序之后,接下來的操作就是通過客戶端程序對目錄進行操作,包括添加、修改、刪除和搜索數據等操作。能對LDAP進行操作的客戶端程序很多,本節簡單介紹在Linux命令方式下進行這些操作的方法。

14.4.1  向目錄數據庫中添加數據

初始狀態下,LDAP是一個空目錄,即沒有任何數據。可通過程序代碼向目錄數據庫中添加數據,也可使用OpenLDAP客戶端工具ldapadd命令來完成添加數據的操作,該命令可將一個LDIF文件中的條目添加到目錄。因此,需要首先創建一個LDIF文件,然后再進行添加操作。

1.LDIF文本條目格式

LDIF用文本格式表示目錄數據庫的信息,以方便用戶創建、閱讀和修改。在LDIF文件中,一個條目的基本格式如下:

# 注釋

dn: 條目名

屬性描述: 值

屬性描述: 值

屬性描述: 值

... ...

dn行類似於關系數據庫中一條記錄的關鍵字,不能與其他dn重復。一個LDIF文件中可以包含多個條目,每個條目之間用一個空行分隔。

例如,以下內容組成一個條目:

1:      dn: dc=wyh, dc=com

2:      objectclass: top

3:      objectclass: dcobject

4:      objectclass: organization

5:      dc: wyh

6:      o: wyh,Inc.

在以上文本中,各行含義如下:

  ● 第1行的dn定義該條目的標識。

  ● 第2~4行定義該條目的objectcCass,可以定義多個屬性,如上面代碼中定義了3個objectClass。條目的屬性根據objectClass的不同而不同,有的objectClass有必須設置的屬性。在2~4行的3個objectClass中,top沒有必須定義的屬性,dcobject必須定義屬性dc,用來表示一個域名的部分,而organization必須定義屬性o,用來表示一個組織的名稱。

  ● 根據objectClass的要求,第5、6行分別定義屬性dc和屬性o的值。

2.了解objectClass

LDAP中,一個條目必須包含一個objectClass屬性,且需要賦予至少一個值。每一個值將用作一條LDAP條目進行數據存儲的模板;模板中包含了一個條目必須被賦值的屬性和可選的屬性。

objectClass有着嚴格的等級之分,最頂層是top和alias。例如,organizationalPerson這個objectClass就隸屬於person,而person又隸屬於top。

objectClass可分為以下3類:

  ● 結構型(Structural):如person和organizationUnit;

  ● 輔助型(Auxiliary):如extensibeObject;

  ● 抽象型(Abstract):如top,抽象型的objectClass不能直接使用。

在OpenLDAP的schema中定義了很多objectClass,下面列出部分常用的objectClass的名稱。

  ● account

  ● alias

  ● dcobject

  ● domain

  ● ipHost

  ● organization

  ● organizationalRole

  ● organizationalUnit

  ● person

  ● organizationalPerson

  ● inetOrgPerson

  ● residentialPerson

  ● posixAccount

  ● posixGroup

3.了解Attribute

屬性(Attribute)類似於程序設計中的變量,可以被賦值。在OpenLDAP中聲明了許多常用的Attribute(用戶也可自己定義Attribute)。常見的Attribute含義如下:

1         c:國家。

  ● cn:common name,指一個對象的名字。如果指人,需要使用其全名。

  ● dc:domain Component,常用來指一個域名的一部分。

  ● givenName:指一個人的名字,不能用來指姓。

  ● l:指一個地名,如一個城市或者其他地理區域的名字。

  ● mail:電子信箱地址。

  ● o:organizationName,指一個組織的名字。

  ● ou:organizationalUnitName,指一個組織單元的名字。

  ● sn:surname,指一個人的姓。

  ● telephoneNumber:電話號碼,應該帶有所在的國家的代碼。

  ● uid:userid,通常指某個用戶的登錄名,與Linux系統中用戶的uid不同。

提示:objectClass是一種特殊的Attribute,它包含其他用到的Attribute以及其自身。

對於不同的objectClass,通常具有一些必設屬性值和一些可選屬性值。例如,可使用person這個objectClass來表示系統中一個用戶的條目,對於系統中用戶通常需要有這樣一些信息:姓名、電話、密碼、描述等。如圖14-6所示,對於person,通過cn和sn設置用戶的名和姓,這是必須設置的,而其他屬性則是可選的。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-6  objectClass屬性

下面列出部分常用objectClass要求必設的屬性。

  ● account:userid。

  ● organization:o。

  ● person:cn和sn。

  ● organizationalPerson:與person相同。

  ● organizationalRole:cn。

  ● organizationUnit:ou。

  ● posixGroup:cn、gidNumber。

  ● posixAccount:cn、gidNumber、homeDirectory、uid、uidNumber。

4.創建LDIF文件

對以上內容有一定了解之后,就可以編寫輸入LDIF文件,編輯需要向目錄數據庫添加的條目了。

下面根據如圖14-7所示的結構,創建LDIF文件wyh.com.ldif。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-7  目錄的樹形結構

對圖14-7進行分析,該目錄結構分為3層,有4個結點。根據圖14-7可創建LDIF文件如下:

提示:每個結點可用一個dn表示,對於每個結點,又可繼續添加新的結點。如在根結點中可添加其他部門ou,在ou=managers結點也可繼續添加其他管理人員的信息。

1:      dn: dc=wyh, dc=com

2:      objectclass: top

3:      objectclass: dcobject

4:      objectclass: organization

5:      dc: wyh

6:      o: wyh,Inc.

7:     

8:      dn: ou=managers, dc=wyh, dc=com

9:      ou: managers

10:    objectclass: organizationalUnit

11:   

12:    dn: cn=wyh, ou=managers, dc=wyh, dc=com

13:    cn: wyh

14:    sn: wuyunhui

15:    objectclass: person

16:   

17:    dn: cn=test, ou=managers, dc=wyh, dc=com

18:    cn: test

19:    sn: Test User

20:    objectclass: person

以上文件中各行的含義如下:

  ● 第1~6行創建根結點,這部分在前面也有介紹,就不再重復了。

  ● 第7、11、16行為空行,用來分隔4個dn條目(4個結點)。

  ● 第8~10行定義cn=managers結點的條目,該條目的objectClass為organizationalUnit,因此需要用ou屬性定義組織名稱。

  ● 第12~15行定義cn=wyh結點的條目,該條目使用的objectClass為person,因此需設置cn和sn兩個屬性值。

  ● 第17~20行與第12~15行的意義相同。

  ● 在以上LDIF文件中,第1、8、12、17行以dn開頭,這部分內容必須唯一,並且在向目錄數據庫添加這些數據時,也要確保這些數據不能與目錄數據庫中已有數據相同,否則,添加操作將中斷。

5.從LDIF文件添加到目錄數據庫

使用OpenLDAP客戶端工具ldapadd命令,可將LDIF文件中的條目添加到目錄數據庫中,該命令的格式如下:

ldappadd  選項  LDIF文件

在ldappadd命令中常用的選項如下:

  ● -x:進行簡單認證。

  ● -D:用來綁定服務器的dn。

  ● -h:目錄服務的地址。

  ● -w:綁定dn的密碼。

  ● -f:使用LDIF文件進行條目添加的文件。

【實例14-2】將前面編寫的LDIF文件的條目數據添加到目錄數據庫中。

具體操作步驟如下:

(1)檢查wyh.com.ldif文件中的內容,需要注意的是,每個冒號后面都需要空一格,而每行結束處不能留有空格字符。

(2)使用以下命令將wyh.com.ldif文件中的條目添加到目錄中:

#  ldapadd  -x  -D  "cn=Manager, dc=wyh, dc=com"  -w  secret  -f  wyh.com.ldif

執行以上命令,如果添加操作正常完成,將顯示如圖14-8所示的提示信息,表示添加了4個條目到目錄數據庫中。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-8  添加初始條目

提示:如果以上命令執行不成功,需要逐個字符檢查wyh.com.ldif文件中的內容,特別注意空格的問題。

14.4.2  查詢

添加到目錄中的條目被保存在目錄數據庫,在Linux命令界面下,可使用OpenLDAP客戶端工具ldapsearch命令來進行查詢。該命令的格式如下:

ldapsearch  選項  過濾  屬性值

常用的選項有以下幾個。

  ● -x:進行簡單認證。

  ● -D:用來綁定服務器的dn。

  ● -w:綁定dn的密碼。

  ● -b:指定要查詢的根節點。

  ● -H:制定要查詢的服務器。

使用ldapsearch命令查詢“dc=wyh, dc=com”下的所有條目,可使用以下命令:

#  ldapsearch  -x  -b "dc=wyh,dc=com"

執行結果如圖14-9所示。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-9  查詢所有條目

而如果使用以下命令,將查詢顯示sn中以字符wu開頭的條目,將得到如圖14-10所示的查詢結果,只找到一個條目。

#  ldapsearch  -x  -b  'dc=wyh,dc=com'  'sn=wu*'

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-10  查詢單個條目

14.4.3  修改條目

使用OpenLDAP客戶端工具ldapmodify命令可對目錄數據庫中的條目進行修改。該命令的格式如下:

ldapmodify  選項

該命令的選項也很多,常用選項與ldapadd類似,這里就不再列出了。

提示:使用ldapmodify命令不能修改條目的dn,但可以修改其他屬性值。

使用ldapmodify命令修改條目信息可以有兩種方式:一種是交互式進行修改,另一種是通過文件進行修改。

1.交互式修改

修改前面創建的條目“cn=test, ou=managers, dc=wyh, dc=com”,將其sn屬性修改為“Test User Modify”,並添加一個description屬性,設置其值為“add Attribute”。

首先輸入以下命令,進行修改狀態:

# ldapmodify  -x  -D  "cn=Manager,dc=wyh,dc=com"  -w  secret

執行以上命令后,終端將等候用戶輸入需要修改條目的dn,輸入以下內容:

dn: cn=test, ou=managers, dc=wyh, dc=com

changetype: modify

replace: sn

sn: Test User Modify

-

add: description

description : add Attribute

以上輸入內容中,第1行查找需要修改的條目,第2行設置修改模式,第3行設置需要替換的屬性sn,第4行給屬性sn重新設置一個值,替換該屬性原有的值,第5行用一個短橫線分隔,第6行添加一個屬性description,第7行設置新添加屬性description的值。

輸入完以上內容之后再按Enter鍵,程序將按以上設置更新數據,然后按Ctrl+C鍵退出修改命令。執行過程如圖14-11所示。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-11  修改條目

使用以上命令修改條目的數據之后,可使用以下命令查看是否修改成功:

#  ldapsearch  -x  -b  'dc=wyh,dc=com'  'sn=test'

執行以上命令查看test條目的數據如圖14-12所示,可以看到sn屬性被修改了,同時添加了一個description屬性。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-12  查看修改部分

2.通過文件修改

通過前面的方式對條目進行修改時,很不方便,如果在交互方式時輸錯了某個字符,只能中斷命令后重新進行修改。因此,更好的修改方法是首先將修改時輸入的文字保存到一個文件中,然后以該文件作為輸入進行修改。用這種方式進行操作,首先需要創建一個臨時文件,用來保存需要進行的修改操作,下面演示這種方式的修改過程。

【實例14-3】 通過修改命令將前面LDAP數據庫中的信息還原,即將sn屬性由“Test User Modify”修改為“Test User”,並將description屬性刪除。

具體操作步驟如下:

(1)使用vi編輯器創建一個文件modify,在其中輸入以下內容:

dn: cn=test,ou=managers,dc=wyh,dc=com

changetype: modify

replace: sn

sn: Test User

-

delete: description

-

從以上輸入內容可看到,與在交互式時輸入的內容完全相同。

技巧:使用文件方式修改條目,可方便修改和檢查,若某個地方有輸入錯誤,可修改后再調用ldapmodify進行修改,減少輸入量。

(2)使用以下命令調用modify的內容進行修改:

# ldapmodify  -x  -D  "cn=Manager,dc=wyh,dc=com"  -w  secret  -f  modify

執行結果如圖14-13所示。

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-13  用文件修改條目

14.4.4  刪除條目

對於目錄數據庫中不用的條目,也可使用ldapdelete命令將其刪除。該命令的格式如下:

ldapdelete  選項  刪除條目

該命令使用的選項與ldapadd類似,就不再列出來了。

刪除目錄數據庫中的“cn=test, ou=managers, dc=wyh, dc=com”條目,具體命令如下:

#  ldapdelete  -x  -D  "cn=Manager,dc=wyh,dc=com"  -w  secret  /

> "cn=test,ou=managers,dc=wyh,dc=com"

順利執行以上命令后,終端上將不會有任何信息輸出,表示完成了刪除操作。

使用ldapdelete命令只能刪除樹形結構中的葉結點條目,如果刪除非葉結點條目,將出現錯誤提示。例如,執行以下命令刪除根結點“dc=wyh,dc=com”,由於根結點下面還有結點,將顯示如圖14-14所示的錯誤提示信息:

ldap數據的管理_增刪改查 - 123456 - duanhehui0928

圖14-14  刪除非葉結點

# ldapdelete -x -D "cn=Manager,dc=wyh,dc=com" -w secret /

> "dc=wyh,dc=com"

14.4.5  數據導出

通過ldapadd命令可向目錄數據庫中添加數據,在某些情況下,可能還需要進行反向操作,即將目錄數據庫中的數據導出。

使用ldapsearch命令對目錄數據庫進行搜索,然后通過重定向將搜索結果保存到一個文件中,可達到導出數據的目的。另外,導出數據更常用的是slapcat命令,該命令的格式如下:

slapcat  選項

最常用的選項就是-l,表示導出為LDIF文件格式。

如將本章前面例子中創建的目錄數據庫導出為export.ldif文件,可使用以下命令:

#  slapcat  -l  export.ldif

執行以上命令將在當前工作目錄得到文件export.ldif,打開文件可看到以下所示內容:

dn: dc=wyh,dc=com

objectClass: top

objectClass: dcObject

objectClass: organization

dc: wyh

o: wyh,Inc.

structuralObjectClass: organization

entryUUID: 5213bf36-4851-102e-8dc0-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000000#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

dn: ou=managers,dc=wyh,dc=com

ou: managers

objectClass: organizationalUnit

structuralObjectClass: organizationalUnit

entryUUID: 52148fc4-4851-102e-8dc1-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000001#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

dn: cn=wyh,ou=managers,dc=wyh,dc=com

cn: wyh

sn: wuyunhui

objectClass: person

structuralObjectClass: person

structuralObjectClass: person

entryUUID: 5215a92c-4851-102e-8dc2-856b03ac5474

creatorsName: cn=Manager,dc=wyh,dc=com

createTimestamp: 20091008122451Z

entryCSN: 20091008122451Z#000002#00#000000

modifiersName: cn=Manager,dc=wyh,dc=com

modifyTimestamp: 20091008122451Z

提示:從導出結果可看出,除了使用ldapadd命令添加到目錄數據庫中的條目數據外,還導出了很多其他信息,包括條目錄UUID、時間戳等信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM