LDAP 基本概念

來源:互聯網
上載者:User
 LDAP(Lightweight Directory Access Protocol)是一種基於計算模型的客戶機/伺服器X.500目錄服務訪問協議。LDAP是從X.500目錄訪問協議的基礎上發展過來的,它是對X.500的簡化,它和X.500的主要區別在於:
  1. LDAP是基於TCP/IP的,而X.500是基於OSI網路通訊協定棧,OSI很少有真正的應用
  2. LDAP刪除了X.500中一些繁瑣而不常用的功能
  3. LDAP使用了更簡潔的字串來表示資料,而非比較複雜的結構化文法ASN1 (Abstract Syntax Notation One)

LDAP用戶端和LDAP伺服器端互動的一般過程

  1. LDAP用戶端發起串連請求與LDAP伺服器建立會話,LDAP的術語是綁定(binding)。在建立綁定時用戶端通常需要指定訪問使用者,以便能夠訪問伺服器上的目錄資訊。
  2. LDAP用戶端發出目錄查詢、建立、更新、刪除、移動目錄條目、比較目錄條目等操作
  3. LDAP用戶端結束與伺服器的會話,即解除綁定(unbinding)

LDAP和RFC文檔
LDAP協議的版本目前是3.0,它是有一系列RFC組成成的:
RFC2251 Light-weight Directory Access Protocol
主要定義了LDAP的操作、在用戶端和伺服器之間的交換的訊息格式。為了更好地支援國際化,它規定資料用UTF-8表示。此外,相對舊版本RFC2251又添加了referral的功能,並把schema本身存放到目錄中,使得用戶端可以讀取schema資訊
RFC2252 Light-weight Directory Access Protocol -- Attribute Syntax Definition

RFC2253 Light-weight Directory Access Protocol -- UTF-8 String Representation of Distinguished Names

RFC2254 Light-weight Directory Access Protocol -- The String Representation of LDAP Search Filters

RFC2255 Light-weight Directory Access Protocol -- The LDAP URL format

RFC2256 A summary of X.500 user schema for use with LDAP v3
一些常用的objectClass和屬性已經由X.500定義,該RFC對這些在LDAP中使用的objectClass作了總結。

LDAP的四層模型

  1. Information model 描述LDAP目錄結構
  2. Naming model 描述目錄條目的唯一標識方法
  3. Functional model 描述LDAP支援的操作
  4. Security 描述目錄資訊的存取控制

Information model
目 錄條目是LDAP中最基本的表示資訊的單元,每個目錄條目可以一個以上的屬性,和程式設計語言及資料庫類型定義中的屬性不同,LDAP中的屬性允許多值。每個 屬性都屬於一種類型,類型規定了屬性允許存放的值的約束條件,同時也規定了該類型的資料進行比較時規則,這一點類似於關聯式資料庫中的字元型資料的 collation。LDAP中是用文法(syntax)這一概念來表式屬性的取值約束和比較規則的。常用的LDAP Syntax有:

bin 二進位資訊
ces 大小寫敏感比較,也就是所謂的directory string
cis 大小寫不敏感比較
tel 電話號碼,字串中的空格、減號在比較時會被去掉
dn 標識
Generalized Time
Postal Address

屬性定義在LDAP中是全域的,屬性名稱通常有簡寫形式,常用的屬性如下:
commonName, cn cis John Smith
surname, sn cis Smith
telephoneNumber tel 021-34354576
organizationalUnitName, ou cis it
owner dn cn=John Smith, o=SUN, c=CN
organization, o cis SUN
jpegPhoto bin

在 屬性的基礎上LDAP還用schema進一步約束目錄條目。schema是一種類型定義機制,每種類型定義又成為objectClass,它規定一個該類 型的目錄條目執行個體必須的和可選的屬性等其它約束。和物件導向的程式設計語言相似,objectClass支援繼承,並且所有的objectClass都是 top的子類型,因為top定義了必須的屬性objectClass,所以所有的目錄條目執行個體都有objectClass這個屬性。常見的 objectClass有:
InetOrgPerson, OrganizationalUnit, Organization
extensibleObject允許任何屬性。

Naming model
DN是無歧義標識一個目錄條目的名字。DN的文法如下:

DistinguishedName = [name]
name = name-component *(, name-component)
name-component = attributeTypeAndValue*("+" attributeTypeAndValue)
attributeTypeAndValue = attributeType "=" attributeValue
attributeType = (ALPHA 1*keychar) / oid
keychar = ALPHA / DIGIT / "-"
oid = 1*DIGIT *("." 1*DIGIT)
attributeValue = string
...
由此可見,如果在RDN中有多個屬性則需將它們用加號"+"串連。比如,cn=John Smith+l=Shanghai,o=SUN,c=CN。此外,屬性也可以用OID來表示,比如cn=John Smith等價於2.5.4.2 = John Smith。
以下是常用的屬性名稱和它代表的意義(在LDAP中屬性名稱大小寫不敏感):
CN 常用名稱,常常是DN的一部分
L 地名,通常是城市的名稱
ST 州或省的名稱
O 組織名稱
OU 組織單位
C 國家名稱
STREET 街道地址
DC 網域名稱成分
UID 使用者標識

尾碼(suffix)是目錄資訊樹中頂層節點的DN,一個LDAP伺服器可以存放多個尾碼。
引 用(referral)是一種將分布在不同LDAP伺服器中目錄資訊子樹串連成邏輯上的一棵完整樹的機制。建立referral將目錄條目增加一個值為 "referral"的objectClass,並將屬性ref設成引用的分類樹的LDAP URL。引用過程的大致步驟是:
LDAP用戶端發出查詢請求
LDAP伺服器發現該請求目錄資訊不在該伺服器上,但伺服器儲存了這些資訊的引用,伺服器就返回一個引用,用LDAP URL告訴用戶端真正的資訊源的位置
LDAP用戶端接受到引用後,決定是否根據引用向真正的目錄資訊源發請求

與referral相對應的是chaining,它和referral的區別在於referral要求用戶端解析引用,而chaining是由伺服器來完成的。chaining過程的大致步驟是:
LDAP用戶端發出查詢請求
LDAP伺服器發現該請求目錄資訊不在該伺服器上,但伺服器儲存了這些資訊的引用,伺服器就資訊源發出請求,取得資訊並返回給用戶端
LDAP用戶端響應

referral是LDAP v3定義的,但chaining並不屬於LDAP v3的範疇。

LDAP v3規定了LDAP伺服器必須將自己的資訊存放在一個特殊的DN下(又稱root DSE),主要的資訊是:
伺服器存放的尾碼
存放schema的DN
該伺服器支援的LDAP的版本
支援的SASL安全機制

Functional model
Functional model是指訪問和更新LDAP目錄資訊的機制。LDAP的操作基本上有三類:查詢、更新和認證
查詢是LDAP中最複雜的操作,它允許用戶端指定查詢的起點、查詢的深度、屬性需要滿足的條件以及最終返回的目錄條目所包含的屬性。
查 詢的起點是通過base DN來指定的,查詢的深度即範圍有三種baseObject, singleLevel, wholeSubtree。baseObject只對base DN指定的目錄條目進行查詢;singleLevel只對base DN的直接子節點進行查詢; wholeSubtree對base DN(包括base DN)的所有子節點查詢。屬性需要滿足的條件是用search filter來表達的。此外,還可以指定別名的解析(Aliase Dereferrencing)和查詢的結果集大小限定和查詢時間限定。
search filter的基本文法是:
attribute operator value
主要的操作符有:=, >=, <=, =*, ~=其中=*可以表示匹配子字串,~=近似相等。例子有sn=*表示sn有值的所有目錄條目。cn=J*Smi*, sn~=smit。
多個簡單filter可以用關係操作符組成複合運算式,基本文法是:
(&(filter1)(filter2)...(filtern))
(|(filter1)(filter2)...(filtern))
(!(filter))
例子有:(|(sn=Miler)(sn=Smith)), (|(sn=Miler)(&(ou=Austin)(sn=Smith)))

更新操作
LDAP定義了以下更新操作:
add 建立新的目錄條目到分類樹種
delete 刪除目錄條目,只有葉子節點可以刪除,刪除別名並不影響被引用的節點
modify 修改目錄條目的屬性,包括增加、刪除屬性
modify DN 移動分類樹

認證操作
LDAP定義了以下認證操作:
bind 該操作用於在LDAP的用戶端和伺服器之間建立會話
unbind 該操作用於結束LDAP會話
abandon 該操作用於放棄前一個操作

control和Extended Operation
Control 和Extended Operation用來在不修改LDAP協議本身的前提下擴充LDAP的功能。control用來修改操作的行為,Extended Operation用來增加新的操作。每個control由標識、參數、重要性構成。如果重要性為TRUE,那麼伺服器要麼處理該control,要麼完 全不支援該control;如果重要性為FALSE,那麼那些無法支援該control的伺服器可以忽略該control。Extended Operation由標識、參數構成。

LDIF檔案格式
LDAP協議定義LDIF檔案格式用於在不同的LDAP實現產品之間交換資料。LDIF的字元編碼必須是UTF-8。LDIF檔案的基本格式如下:
[]
dn:
objectClass:
objectClass:
...
attributeType[;language tag]:attributeValue
attributeType[;language tag]:attributeValue
...

在LDIF檔案中表示位元據時必須使用base64編碼。凡是base64編碼的資料用兩個冒號開頭,例如:jpegPhoto::

。以&ldquo#&rdquo開頭的行是注釋行,以單個空格開始的行表示與前一行在邏輯上同一行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.