1. 程式人生 > >ldap 基本名詞解釋(3)

ldap 基本名詞解釋(3)

alc man 必須 人的 inf sco iar led 代碼

名詞解釋

Objectclass

  LDAP對象類,是LDAP內置的數據模型。每種objectClass有自己的數據結構,比如我們有一種叫“電話薄”的objectClass,肯定會內置很多屬性(attributes),如姓名(uid),身份證號(uidNumber),單位名稱(gid),家庭地址(homeDirectory)等,同時,還有一種叫“同學錄”的objectClass,具備“電話薄”裏的一些attributes(如uid、homeDirectory),還會具有“電話薄”沒有的attributes(如description等)。

Entry

  entry可以被稱為條目,一個entry就是一條記錄,是LDAP中一個基本的存儲單元;也可以被看作是一個DN和一組屬性的集合。註意,一條entry可以包含多個objectClass,例如zhang3可以存在於“電話薄”中,也可以同時存在於“同學錄”中。

DN

  Distinguished Name,LDAP中entry的唯一辨別名,一條完整的DN寫法:uid=zhang3,ou=People,dc=163,dc=com。LDAP中的entry只有DN是由LDAP Server來保證唯一的。

LDAP Search filter

  使用filter對LDAP進行搜索。 Filter一般由 (attribute=value) 這樣的單元組成,比如:(&(uid=ZHANGSAN)(objectclass=person)) 表示搜索用戶中,uid為ZHANGSAN的LDAP Entry.再比如:(&(|(uid= ZHANGSAN)(uid=LISI))(objectclass=person)),表示搜索uid為ZHANGSAN, 或者LISI的用戶;也可以使用*來表示任意一個值,比如(uid=ZHANG*SAN),搜索uid值以 ZHANG開頭SAN結尾的Entry。更進一步,根據不同的LDAP屬性匹配規則,可以有如下的Filter: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)),表示搜索創建時間在20050301000000和20050302000000之間的entry。

Filter中 “&” 表示“與”;“!”表示“非”;“|”表示“或”。根據不同的匹配規則,我們可以使用“=”,“~=”,“>=”以及“<=”,更多關於LDAP Filter讀者可以參考LDAP相關協議。

Base DN

  一條Base DN可以是“dc=163,dc=com”,也可以是“dc=People,dc=163,dc=com”。執行LDAP Search時一般要指定basedn,由於LDAP是樹狀數據結構,指定basedn後,搜索將從BaseDN開始,我們可以指定Search Scope為:只搜索basedn(base),basedn直接下級(one level),和basedn全部下級(sub tree level)。

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

  對象類(ObjectClass)是屬性的集合,LDAP預想了很多人員組織機構中常見的對象,並將其封裝成對象類。比如人員(person)含有姓(sn)、名(cn)、電話(telephoneNumber)、密碼(userPassword)等屬性,單位職工(organizationalPerson)是人員(person)的繼承類,除了上述屬性之外還含有職務(title)、郵政編碼(postalCode)、通信地址(postalAddress)等屬性。

  通過對象類可以方便的定義條目類型。每個條目可以直接繼承多個對象類,這樣就繼承了各種屬性。如果2個對象類中有相同的屬性,則條目繼承後只會保留1個屬性。對象類同時也規定了那些屬性是基本信息,必須含有(Must 活Required,必要屬性):哪些屬性是擴展信息,可以含有(May或Optional,可選屬性)。

  對象類有三種類型:結構類型(Structural)、抽象類型(Abstract)和輔助類型(Auxiliary)。結構類型是最基本的類型,它規定了對象屍體的基本屬性,每個條目屬於且僅屬於一個結構型對象類。抽象類型可以是結構類型或其他抽象類型父類,它公國將對象屬性中共性的部分組織在一起,稱為其他類的模板,條目不能直接集成抽象型對象類。輔助類型規定了對象實體的擴展屬性。雖然每個條米只屬於一個結構型對象類,但可以同時屬於多個輔助型對象類。

對象類本身是可以相互繼承的,所以對象類的根類是top抽象型對象類。以常用的人員類型為例,他們的繼承關系如圖:

技術分享圖片

  accout內置的attributes有:userid、description、host、localityName、organizationName、organizationalUnitName、seeAlso;

  inetOrgPerson內置的attributes有cn、sn、description、seeAlso、telephoneNumber、userPassword、destinationIndicator、facsimileTelephoneNumber、internationaliSDNNumber、l、ou、physicalDeliveryOfficeName、postOfficeBox、postalAddress、postalCode、preferredDeliveryMethod、registeredAddress、st、street、telephoneNumber、teletexTerminalIdentifier、telexNumber、title、x121Address、audio、usinessCategory、carLicense、departmentNumber、isplayName、employeeNumber、employeeType、givenName、homePhone、homePostalAddress、initials、jpegPhoto、labeledURI、mail、manager、mobile、o、pager、photo、preferredLanguage、roomNumber、secretary、uid、userCertificate等;

  由上可見,accout僅僅預置了幾個必要且實用的屬性(完成登陸驗證肯定是夠了),而inetOrgPerson內置了非常之多的屬性,例如電話號碼、手機號碼、街道地址、郵箱號碼,郵箱地址,房間號碼,頭像,經理,雇員號碼等等。

因此,在配置LDAP時,如果僅僅是基於驗證登陸的目的,建議將objectClass類型設置為accout,而如果希望打造一個大而全的員工信息寶庫,建議將objectClass設置為inetOrgPerson

  這裏我常用的是‘inetOrgPerson‘, ‘posixAccount‘, ‘shadowAccount‘。

  account的必要屬性是userid,而posixAccount的必要屬性是cn、gidNumber、homeDirectory、uid、uidNumber;shadowAccount的必要屬性是uid,可選屬性有shadowExpire、shadowInactive、shadowMax、shadowMin、userPassword等;top必要屬性是objectClass(可見,top和其它objectClass是繼承的關系)。

Attribute

屬性(Attribute)類似於程序設計中的變量,可以被賦值。在OpenLDAP中聲明了許多常用的Attribute(用戶也可自己定義Attribute)。常見的Attribute含義如下:
● c:國家。
● cn:common name,指一個對象的名字。如果指人,需要使用其全名。
● dc:domain Component,常用來指一個域名的一部分。
● givenName:指一個人的名字,不能用來指姓。
● l:指一個地名,如一個城市或者其他地理區域的名字。
● mail:電子信箱地址。
● o:organizationName,指一個組織的名字。
● ou:organizationalUnitName,指一個組織單元的名字。
● sn:surname,指一個人的姓。
● telephoneNumber:電話號碼,應該帶有所在的國家的代碼。

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


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

下面列出部分常用objectClass要求必設的屬性。
● account:userid。
● organization:o。
● person:cn和sn。
● organizationalPerson:與person相同。
● organizationalRole:cn。
● organizationUnit:ou。
● posixGroup:cn、gidNumber。
● posixAccount:cn、gidNumber、homeDirectory、uid、uidNumber。

參考博客:

   https://blog.csdn.net/qq_27376871/article/details/52037317

   https://www.2cto.com/kf/201709/678679.html

ldap 基本名詞解釋(3)