本節書摘來自異步社群《linux/unix openldap實戰指南》一書中的第1章,第1.4節,作者:郭大勇著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
1.4.1 objectclass分類
objectclass類通常分三類:結構型、輔助型、抽象型。
結構型(structural):如person和organizationunit。
輔助型(auxiliary):如extensibleobject。
抽象型(abstract):如top,抽象型的objectclass不能直接使用。
1.4.2 openldap常見的objectclass
openldap常見的objectclass類如下所示。
alias
applicationentity
dsa
applicationprocess
bootabledevice
certificationauthority
certificationauthority-v2
country
crldistributionpoint
dcobject
device
dmd
domain
domainnameform
extensibleobject
groupofnames
groupofuniquenames
ieee802device
iphost
ipnetwork
ipprotocol
ipservice
locality
dclocalitynameform
nismap
nisnetgroup
nisobject
oncrpc
organization
dcorganizationnameform
organizationalrole
organizationalunit
dcorganizationalunitnameform
person
organizationalperson
inetorgperson
uidorganizationalpersonnameform
residentialperson
posixaccount
posixgroup
shadowaccount
strongauthenticationuser
uidobject
usersecurityinformation
如上對象類由openldap官方所提供,以滿足大部分企業的需求,openldap還支援系統所提供的對象類,例如sudo、samba等。後續章節将對企業中常用的對象類進行闡述并通過案例示範其實作過程,讓讀者熟悉其原理及實作過程。
當openldap官方以及系統提供的對象類無法滿足企業的特殊需求時,讀者可根據openldap schema内部結構制定schema規範并生成對象類,來滿足目前需求。
1.4.3 objectclass詳解
在openldap目錄樹中,每個條目必須包含一個屬于自身條件的對象類,然後再定義其條目屬性及對應的值。
openldap條目的屬性能否添加取決于條目所繼承的objectclass是否包含此屬性。objectclass具有繼承關系,也就是說,條目添加的屬性最終取決于自身所繼承的所有objectclass的集合。如果所添加的屬性不在objectclass範圍内,此時目錄伺服器不允許添加此屬性。如果要添加,就必須添加schema檔案産生objectclass所對應的屬性。objectclass和attribute由schema檔案來規定,存放在/etc/openldap/schema目錄下,schema檔案規範objectclass的構成以及屬性和值在目錄樹中的對應關系。後面章節會介紹如何通過定義schema檔案來産生objectclass,進而生成所需要的屬性。
每一個屬性和值将用作每個條目在目錄樹中存儲資訊的标準,例如能包含哪些屬性資訊。對于objectclass的了解,讀者可以将objectclass的屬性值了解為一種模闆。模闆定義哪些資訊可以存取,哪些資訊不可以存儲在目錄樹中。
1.4.4 objectclass案例分析
下面給出兩個對象類案例分析示例。
objectclass案例分析示例1
所有的objectclass定義都存放在/etc/openldap/schema/*.schema檔案中。例如,person屬性的定義就存放在core.schema檔案中。
分析:
如果要定義person類型,需要定義頂級為top,并且必須定義sn和cn兩個屬性,還可以附加userpassword、telephonenumber、seealso、description 4個屬性值。郵件位址、國家等屬性不可以定義,除非讀者添加相關的objectclass條目,否則提示相關屬性不允許添加。
對于此案例,如果要定義top屬性,必須定義一個objectclass屬性。因為此案例中還定義了person屬性,是以要必須定義sn和cn屬性,以及可以附加的屬性(userpassword、telephonenumber、seealso、description)。此案例中必須要定義的有3個屬性分别是objectclass、sn以及cn。通過此案例下一級的objectclass可以繼承上一級objectclass的屬性資訊。
注:
根據定義,對于不同的objectclass,屬性的相關資訊也不同。希望通過上面兩個案例的介紹,能讓讀者了解objectclass的含義以及屬性的含義。