openldap介紹
一、LDAP定義
LDAP是Lightweight Directory Access Protocol的縮寫,顧名思義,它是指輕量級目錄通路協定(這個主要是相對另一目錄通路協定X.500而言的;LDAP略去了x.500中許多不太常用的功能,且以TCP/IP協定為基礎)。目錄服務和資料庫很類似,但又有着很大的不同之處。資料庫設計為友善讀寫,但目錄服務專門進行了讀優化的設計,是以不太适合于經常有寫操作的資料存儲。同時,LDAP隻是一個協定,它沒有涉及到如何存儲這些資訊,是以還需要一個後端資料庫元件來實作。這些後端可以是bdb(BerkeleyDB)、ldbm、shell和passwd等。
LDAP目錄以樹狀的層次結構來存儲資料(這很類同于DNS),最頂層即根部稱作“基準DN”,形如"dc=mydomain,dc=org"或者"o=mydomain.org",前一種方式更為靈活也是Windows AD中使用的方式。在根目錄的下面有很多的檔案和目錄,為了把這些大量的資料從邏輯上分開,LDAP像其它的目錄服務協定一樣使用OU(Organization Unit),可以用來表示公司内部機構,如部門等,也可以用來表示裝置、人員等。同時OU還可以有子OU,用來表示更為細緻的分類。
LDAP中每一條記錄都有一個唯一的差別于其它記錄的名字DN(Distinguished Name),其處在“葉子”位置的部分稱作RDN;如dn:cn=tom,ou=animals,dc=mydomain,dc=org中tom即為RDN;RDN在一個OU中必須是唯一的。
二、LDAP的四個基本模型
LDAP的體系結構由4中基本模型組成:資訊模型描述LDAP的資訊表達方式;命名模型描述LDAP的資料如何組織;功能模型描述LDAP的資料操作通路方式;安全模型描述LDAP的安全機制。
1.資訊模型
LDAP資訊模型定義能夠在目錄中存儲的資料類型和基本的資訊機關。
2.命名模型
LDAP中的命名模型,即LDAP中的條目定位方式。在LDAP中每個條目均有自己的DN(Distinguished Name,辨別名)和RDN(Relative Distinguished Name,相對辨別名)。DN是該條目在整個數中唯一名稱辨別。RDN是條目在父節點下唯一名稱辨別,如同檔案系統中,帶路徑的檔案名就是DN,檔案名就是RDN.
3.功能模型
LDAP功能模型說明了能夠使用LDAP協定對目錄執行某些操作。在LDAP中共有4類操作(共10種):
(1)查詢類操作,如搜尋,比較;
(2)更新類操作,如添加條目,删除條目,修改條目和修改條目名;
(3)認證類操作,如綁定,解綁定;
(4)其它操作,如放棄和擴充操作。
4.安全模型
LDAP的安全模型主要是基于綁定操作的,綁定操作的不同使得安全機制有所不同。3種:
(1)無認證
(2)基本認證:當使用LDAP的基本安全認證時,客戶程序通過網絡向服務程序發送一個分辨名(DN)和密碼來辨別自己。服務程序檢查客戶程序發送的分辨名(DN)和密碼是否與目錄中儲存的分辨名(DN)和密碼相比對,如果比對則認為通過了認證。
(3)SASL認證:即LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證。
三、LDIF
LDIF(LDAP Interchange Format)是指存儲LDAP配置資訊及目錄内容的标準文本檔案格式,之是以使用文本檔案來格式來存儲這些資訊是為了友善讀取和修改,這也是其它大多數服務配置檔案所采取的格式。LDIF檔案常用來向目錄導入或更改記錄資訊,這些資訊需要按照LDAP中schema的格式進行組織,并會接受schema的檢查,如果不符合其要求的格式将會出現報錯資訊。LDIF檔案樣例如下:
#LDIF file example
dn: dc=mydomain,dc=org
objectClass: domain
dc: mydomain
LDIF格式:
1、一個entry(條目)必須列出所有屬性,每個entery必須以一個空行隔開
2、一個條目的必須以dn為第一行,以“#”号開頭的為注釋行;
3、第二行起的行中,冒号左邊為屬性,右邊是屬性的值(冒号後必須以一個空格與屬性值隔開),這類同于程式設計中的變量及為其所賦的值,但屬性可以被重複指派。
4、屬性一行無法表達時,下一行以空格開頭以示續接上行值
四、objectClass
LDAP中,一條記錄必須包含一個objectClass屬性,且其需要賦予至少一個值。每一個值将用作一條LDAP記錄進行資料存儲的模闆;模闆中包含了一條記錄中數個必須被指派的屬性和一系列可選的屬性。如上述LDIF檔案中的記錄所示,objectClass的值為domain。
objectClass有着嚴格的等級之分,最頂層的類是top和alias。例如,organizationalPerson這個objectClass隸屬于Person,而Person又是top的子類。
objectClass大緻分為三類:結構型的(如:person和organizationUnit)、輔助型的(如:extensibeObject)和抽象型的(這類不能直接使用)。官方定義的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
五、Attribute
如上文所述,Attribute類同于程式設計語言中的變量,它可以被指派,就像是可以存放一個單一類型資訊的容器。官方聲明了許多常用的Attribute,如果其中沒有你所需要的,你可以自己定義,但要避免重名。objectClass是一種特殊的Attribute,它包含其它用到的Attribute以及它自身。常見的Attribute如:givenName、l、objectClass、dc、ou、cn、c、mail、telephoneNumber、sn、uid等。分别介紹如下:
dc:domain Component,經常用來指一個域名的一部分,如:dc=mydomain,dc=org;
cn:common name,指一個對象的名字;如果指人,需要使用其全名;
sn:surname,指一個人的姓;
givenName:指一個人的名字,不能用來指姓或者middle name;
c:兩位數的國家代碼;
o:organizationName,指一個組織的名字;
objectClass:一個LDAP server要想啟用必須能夠識别每一個對象的Attribute,objectClass Attribute正是用來描述一個對象應該具有的Attribute及可選Attribute。是以,每個objectClass“模闆”的Attribute中必然含有一條objectClass Attribute,我不知道用“自包含”稱呼這個算不算合适。
ou:organizationalUnitName,指一個組織單元的名字。
l:指一個地名,如一個城市或者其它地理區域的名字;
mail:電子信箱位址
telephoneNumber:電話号碼,應該帶有所在的國家的代碼;
uid:userid,通常指一個人的登入名,這個不同于Linux系統中使用者的uid;
六、schema
LDAP中,schema用來指定一個目錄中所包含的objects的類型(objectClass)以及每一個objectClass中的各個必備(mandatory)和可選(optional)的屬性(attribute)。是以,Schema是一個資料模型,它被用來決定資料怎樣被存儲,被跟蹤的資料的是什麼類型,存儲在不同的Entry下的資料之間的關系。schema需要在主配置檔案slapd.conf中指定,以用來決定本目錄中使用到的objectClass。管理者可以自己設計制定schema,一般包括屬性定義(AttributeDefinition)、類定義(ClassDefinition)以及文法定義(SyntaxDefinition)等部分。
LDAP V3中在x.500标準的基礎上定義了一個包含了網絡中大多常見對象的schema,這些對象包括國家、所在地、組織、人員、小組以及裝置等。同時,LDAP V3中可以很友善的從目錄中提取出schema,它正是一條記錄中關于屬性的聲明部分。
七、對象辨別符(Object Identifiers)
對象辨別符(OID)是被LDAP内部資料庫引用的數字辨別。Attribute的名字是設計為友善人們讀取的,但為了友善計算機的處理,通常使用一組數字來辨別這些對象,這類同于SNMP中的MIB2。例如,當計算機接收到dc這個Attribute時,它會将這個名字轉換為對應的OID:1.3.6.1.4.1.1466.115.121.1.26。
八、使用LDAP做身份驗正
驗正主要是用來确定一次會主中用戶端使用者所具有的權利,即用來确立使用者能否登入以及登入具有使用哪些資源以及如何使用資源的權限。驗正過程中的修改、查詢等操作由認證級别來控制。
objectClass中的person可以用來作linux系統中使用者登入的身份驗正,此時需要指定userPassword屬性的值,即指定使用者登入時使用的密碼。密碼可以使用的加密方式有MD5、CRYPT、SHA、SSHA等。在LDAP V3中,驗正用戶端時可以使用的驗正機制有匿名驗正、簡單驗正、基于SSL/TLS的驗正和基于SASL的驗正等四種方式。
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/537752