Ldap簡介

一、Directory Services(目錄服務)能做什麼?

   我們知道,當局域網的規模變的越來越大時,爲了方便主機管理,我們使用DHCP來實現IP地址、以太網地址、主機名和拓撲結構等的集中管理和統一分配。同樣,如果一個局域網內有許多的其它資源時,如打印機、共享文件夾等等,爲了方便的定位及查找它們,一種集中定位管理的方式或許是較好的選擇,DNS和NIS都是用來實現類似管理的方法。

   對於局域網內的一個用戶來講,工作等其它應用需要,我們必須憑帳號登錄主機、用帳號收發E-mail,甚至爲了管理需要公司還需要維護一個電子號碼簿來存儲員工的姓名、地址、電話號碼等信息。隨着時間的增長,我們會爲這些越來越多的帳號和密碼弄的頭暈腦脹。同時,如果一個員工離開,管理員就不得不翻遍所有的記錄帳號信息的文件把離職員工的信息刪除。這些將是一個繁瑣而效率低下的工作。那麼,如果能將此些帳號信息等統一到一個文件中進行管理,無疑會大大提高員工及管理員的工作效率。目錄服務(LDAP是其實現的一種)正是基於這些應用實現的。

二、什麼是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中必須是唯一的。

三、什麼是LDIF?

   LDIF(LDAP Interchange Format)是指存儲LDAP配置信息及目錄內容的標準文本文件格式,之所以使用文本文件來格式來存儲這些信息是爲了方便讀取和修改,這也是其它大多數服務配置文件所採取的格式。LDIF文件常用來向目錄導入或更改記錄信息,這些信息需要按照LDAP中schema的格式進行組織,並會接受schema的檢查,如果不符合其要求的格式將會出現報錯信息。LDIF文件樣例如下:

#LDIF file example
dn: dc=mydomain,dc=org
objectClass: domain
dc: mydomain

   其中,以“#”號開頭的爲註釋行;第二行起的行中,冒號左邊爲屬性,右邊是屬性的值,這類同於編程中的變量及爲其所賦的值,但屬性可以被重複賦值。

四、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等。分別介紹如下:

c:國家;
cn:common name,指一個對象的名字;如果指人,需要使用其全名;
dc:domain Component,經常用來指一個域名的一部分,如:dc=mydomain,dc=org;
givenName:指一個人的名字,不能用來指姓或者middle name;
l:指一個地名,如一個城市或者其它地理區域的名字;
mail:電子信箱地址
o:organizationName,指一個組織的名字;
objectClass:一個LDAP server要想啓用必須能夠識別每一個對象的Attribute,objectClass Attribute正是用來描述一個對象應該具有的Attribute及可選Attribute。因此,每個objectClass“模板”的Attribute中必然含有一條objectClass Attribute,我不知道用“自包含”稱呼這個算不算合適。
ou:organizationalUnitName,指一個組織單元的名字。
sn:surname,指一個人的姓;
telephoneNumber:電話號碼,應該帶有所在的國家的代碼;
uid:userid,通常指一個人的登錄名,這個不同於Linux系統中用戶的uid;  

   如果可以這樣類比的話,我想,我們不妨把objectClass理解爲關係數據庫的表,而attribute則類同爲表中的字段。而下面即可介紹的schema或許可以類比作一個數據庫,但它的這個類比或許從邏輯上說更合適些。

六、什麼是schema

       好了,現在可以說說到底什麼是schema了。LDAP中,schema用來指定一個目錄中所包含的objects的類型(objectClass)以及每一個objectClass中的各個必備(mandatory)和可選(optional)的屬性(attribute)。因此,[color=Orange]Schema是一個數據模型,它被用來決定數據怎樣被存儲,被跟蹤的數據的是什麼類型,存儲在不同的Entry下的數據之間的關係。[/color]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的驗正等四種方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章