【安全科普】AD域安全協(xié)議(三)LDAP
前言
LDAP是一種目錄訪問(wèn)協(xié)議,它規(guī)定了以樹(shù)狀結(jié)構(gòu)的方式來(lái)存儲(chǔ)和訪問(wèn)數(shù)據(jù)。
然而協(xié)議是抽象的,要產(chǎn)生具體的功效,必須在應(yīng)用中實(shí)現(xiàn),比如AD域服務(wù)就實(shí)現(xiàn)了LDAP協(xié)議。
?
LDAP最明顯的優(yōu)勢(shì)就是讀取速度快,擁有極高的搜索效率。
可以用一個(gè)例子來(lái)體會(huì)這種速度:當(dāng)我們進(jìn)入一個(gè)迷宮,需要尋找出口。
普通數(shù)據(jù)庫(kù):一條路一條路地嘗試,直到嘗試出能走出去的路線,再將這條路線返回給我們。
LDAP:相當(dāng)于拿了一張解密地圖,上面清清楚楚寫(xiě)著哪條路能直接到達(dá)出口。
?
很明顯,普通數(shù)據(jù)庫(kù)也許要嘗試十多次才能找到正確的路線,但是LDAP只要一次就能找到,搜索性能上孰優(yōu)孰劣一目了然。
除此之外,LDAP允許靈活地添加數(shù)據(jù),并且采取【客戶端-服務(wù)端】的方式提供服務(wù),即在服務(wù)端存儲(chǔ)數(shù)據(jù),在客戶端操作數(shù)據(jù),但相比于關(guān)系型數(shù)據(jù)庫(kù),它不支持事務(wù)、回滾等操作。
?
LDAP之所以擁有這些特點(diǎn),主要基于它的數(shù)據(jù)存儲(chǔ)方式——樹(shù)形目錄,即在系統(tǒng)中構(gòu)建一棵樹(shù),在樹(shù)葉上存儲(chǔ)數(shù)據(jù)。接下來(lái)我們通過(guò)在系統(tǒng)中搭建一棵樹(shù)的流程,詳細(xì)介紹LDAP原理。
# LDAP原理?#
?
構(gòu)建一棵樹(shù),首先我們需要確定這棵樹(shù)長(zhǎng)在哪里,也就是樹(shù)根是什么。
LDAP中將域名拆分開(kāi),形成樹(shù)根,系統(tǒng)中的樹(shù)根叫做DC,比如在test20.local域下,樹(shù)根為DC=test20,DC=local。

相比于直接用test20.local做樹(shù)根,這樣的組織方式讓整體結(jié)構(gòu)更清晰,同時(shí)便于擴(kuò)充域。假如有另一個(gè)叫test20.local2的域要加入這棵樹(shù),那么我們就可以直接將DC=local2放到DC=test20下面,而不必重新構(gòu)建一棵叫test20.local2的樹(shù),如下圖所示。

?
樹(shù)根有了,下一步,我們開(kāi)始構(gòu)建樹(shù)枝。
LDAP中,樹(shù)的枝干通常是由組織單位(OU)來(lái)充當(dāng),主要是區(qū)分?jǐn)?shù)據(jù)所屬范圍。比如有一個(gè)叫張三的用戶在local下的信息部,那么張三所屬枝干就是OU=信息部。
?

?
在這里,LDAP有一個(gè)明顯優(yōu)勢(shì),就是每一個(gè)樹(shù)枝都可以被單獨(dú)放在一個(gè)服務(wù)器中進(jìn)行管理。這不僅有利于減輕服務(wù)器負(fù)擔(dān),也方便具有分公司的企業(yè)在不同地域部署服務(wù)器。
?
到最后,只要把所有的數(shù)據(jù)制作成樹(shù)葉,掛到樹(shù)枝上去就行了。
制作樹(shù)葉有兩個(gè)關(guān)鍵的地方,一個(gè)是樹(shù)葉名字,另一個(gè)是樹(shù)葉內(nèi)容。
?
LDAP規(guī)定的名字結(jié)構(gòu)由兩部分組成,一部分是直接名稱,即CN,一部分是相對(duì)名稱,即RDN。
CN是唯一的,用來(lái)區(qū)分不同樹(shù)葉。比如用戶張三注冊(cè)時(shí),CN=張三。
而RDN是指從樹(shù)根到樹(shù)葉經(jīng)過(guò)的所有枝干,用來(lái)標(biāo)識(shí)樹(shù)葉位置。如果Sam用戶在市場(chǎng)運(yùn)營(yíng)部,他的RDN就是DC=test20,DC=local,OU=信息部。
RDN加CN就形成了數(shù)據(jù)名稱,用DN來(lái)表示,張三的DN就是:DC=test20,DC=local,OU=信息部,CN=張三。
正是這樣的名字結(jié)構(gòu)提升了LDAP的讀取效率,因?yàn)镈N就是那張標(biāo)識(shí)了出口路線的地圖,只要我們順著名稱往下尋找,就能直接找到所需數(shù)據(jù)。

樹(shù)葉內(nèi)容主要是描述這片樹(shù)葉的顏色、形狀、氣味等獨(dú)特的信息,對(duì)應(yīng)到系統(tǒng)中,就是資源的屬性,比如用戶的屬性有性別,身份證號(hào),電話等,計(jì)算機(jī)的屬性有操作系統(tǒng)類型、賬號(hào)密碼等。

一片樹(shù)葉名稱加上它的屬性就形成完整的數(shù)據(jù)信息,在系統(tǒng)中被稱為條目。
每片樹(shù)葉有它單獨(dú)的條目,如果要增加新的信息,只需要在條目中添加一個(gè)屬性,不會(huì)影響其它的條目。而在關(guān)系型數(shù)據(jù)庫(kù)中,增加信息需要改變表結(jié)構(gòu),相比來(lái)說(shuō),困難很多。
?
為了提高效率,LDAP還提供了一種比較方便的做法,就是給具有相同屬性類型的資源制定模板,在注冊(cè)時(shí)直接往模板中填充信息就能創(chuàng)建一片樹(shù)葉,這就是對(duì)象類。
比如說(shuō)系統(tǒng)中有一個(gè)對(duì)象類叫用戶,它的屬性包括姓名、電話、郵箱。那么我創(chuàng)建用戶時(shí),必須填寫(xiě)這三項(xiàng)才能創(chuàng)建成功。

系統(tǒng)中的樹(shù)還有一個(gè)不一樣的地方,就是各種不同品種的樹(shù)葉可以長(zhǎng)在一棵樹(shù)上,這個(gè)不同品種的樹(shù)葉是由系統(tǒng)中多種多樣的資源對(duì)象來(lái)充當(dāng)?shù)?,所以我們可以想象一棵長(zhǎng)滿了用戶、計(jì)算機(jī)和打印機(jī)的樹(shù)。
除此之外,它還可以允許雜交樹(shù)葉的存在。這是因?yàn)橄到y(tǒng)中的某個(gè)資源對(duì)象可能同時(shí)具有多個(gè)對(duì)象類的屬性,比如系統(tǒng)管理員,它就同時(shí)具有用戶和管理員的屬性。
?
到此,在LDAP協(xié)議的“指導(dǎo)”下,我們就成功在系統(tǒng)中構(gòu)建好一棵完整的樹(shù)了。
# 結(jié)語(yǔ) #
LDAP常用來(lái)構(gòu)建統(tǒng)一的賬號(hào)管理、身份驗(yàn)證平臺(tái),實(shí)現(xiàn)sso單點(diǎn)登錄機(jī)制。此外,它還有訪問(wèn)控制和數(shù)據(jù)復(fù)制的功能,能夠幫助增強(qiáng)系統(tǒng)安全性和容災(zāi)性。
但同時(shí),LDAP協(xié)議也存在一些安全問(wèn)題,比如LDAP注入造成的惡意LDAP查詢。在工作生產(chǎn)中,同樣需要我們多加防范。
?
以上就是LDAP協(xié)議的全部?jī)?nèi)容,下一篇文章中,我們將繼續(xù)為大家介紹RPC協(xié)議。