活動目錄在構建核心過程中的八個關鍵點
原創編者按:活動目錄(Active Directory),是一個面向Windows Server級別的目錄服務。在活動目錄中存儲了有關網絡對象的信息,并且讓管理員和用戶能夠輕松地查找和使用這些信息。活動目錄使用了一種結構化的數據存儲方式,并以此作為基礎對目錄信息進行合乎邏輯的分層組織。李洋老師在之前的文章中為我們介紹了活動目錄設計中需要遵循的七個原則,今天在這里李洋老師再次為我們講解有關《活動目錄構建核心關鍵點》。關于李洋老師更多對活動目錄的內容請參考:51CTO特別專題聽專家講述Windows活動目錄
1. 活動目錄的由來
與活動目錄概念最相關的就是DOS下的“目錄”、“路徑”和Windows9X/ME系列操作系統下的“文件夾”,那個時候的“目錄”或“文件夾”僅代表一個文件存在磁盤上的位置和層次關系,一個文件生成之后相對來說這個文件的所在目錄也就固定了(當然可以刪除、轉移等,現在不考慮這些),也就是說它的屬性也就相對固定了,是靜態的。這個目錄所能代表的僅是這個目錄下所有文件的存放位置和所有文件總的大小,并不能得出其它有關信息,這樣就影響到了整體使用目錄的效率,也就是影響了系統的整體效率,使系統的整個管理變得復雜。
因為沒有相互關聯,所以在不同應用程序中同一對象要進行多次配置,管理起來相當繁鎖,影響了系統資源的使用效率。為了改變這種效率低下的關系和加強與Internet上有關協議的關聯,Microsoft公司決定從WIN2K開始全面改革(Windows 2003、Windows 2008中也使用了該機制),也就是引入活動目錄的概念。理解活動目錄的關鍵就在于“活動”兩個字,正因為這個目錄是活動的,所以它是動態的,它是一種包含服務功能的目錄,它可以做到“由此及彼”的聯想、映射,如找到了一個用戶名,就可聯想到它的賬號、出生信息、E-mail、電話等所有基本信息,雖然組成這些信息的文件可能不在一塊。同時不同應用程序之間還可以對這些信息進行共享,減少了系統開發資源的浪費,提高了系統資源的利用效率。
2. 活動目錄的主要概念
活動目錄包括兩個方面:目錄和與目錄相關的服務。目錄是存儲各種對象的一個物理上的容器,從靜態的角度來理解這活動目錄與以前熟知的“目錄”和“文件夾”沒有本質區別,僅僅是一個對象,是一實體;而目錄服務是使目錄中所有信息和資源發揮作用的服務,活動目錄是一個分布式的目錄服務,信息可以分散在多臺不同的計算機上,保證用戶能夠快速訪問,因為多臺機上有相同的信息,所以在信息容氏方面具有很強的控制能力,正因如此,不管用戶從何處訪問或信息處在何處,都對用戶提供統一的視圖。
理解活動目錄,需要了解其有關名詞,如下:
1) 名字空間:
從本質上講,活動目錄就是一個名字空間,可以把名字空間理解為任何給定名字的解析邊界,這個邊界就是指這個名字所能提供或關聯、映射的所有信息范圍。通俗地說就是在服務器上通過查找一個對象可以查到的所有關聯信息總和,如一個用戶,如果在服務器已給這個用戶定義了講如:用戶名、用戶密碼、工作單位、聯系電話、家庭住址等,那上面所說的總和廣義上理解就是“用戶”這個名字的名字空間,因為只輸入一個用戶名即可找到上面所列的一切信息。名字解析是把一個名字翻譯成該名字所代表的對象或者信息的處理過程。舉例來說,在一個電話目錄形成一個名字空間中,可以從每一個電話戶頭的名字可以被解析到相應的電話號碼,而不是象現在一樣名字是名字,號碼歸號碼,根本不能橫向聯系。Windows 操作系統的文件系統也形成了一個名字空間,每一個文件名都可以被解析到文件本身(包含它應有的所有信息)。
2) 對象:
對象是活動目錄中的信息實體,也即通常所見的“屬性”,但它是一組屬性的集合,往往代表了有形的實體,比如用戶賬戶、文件名等。對象通過屬性描述它的基本特征,比如,一個用戶賬號的屬性中可能包括用戶姓名、電話號碼、電子郵件地址和家庭住址等。
3) 容器:
容器是活動目錄名字空間的一部分,與目錄對象一樣,它也有屬性,但與目錄對象不同的是,它不代表有形的實體,而是代表存放對象的空間,因為它僅代表存放一個對象的空間,所以它比名字空間小。比如一個用戶,它是一個對象,但這個對象的容器就僅限于從這個對象本身所能提供的信息空間,如它僅能提供用戶名、用戶密碼。其它的如:工作單位、聯系電話、家庭住址等就不屬于這個對象的容器范圍了。
4) 目錄樹:
在任何一個名字空間中,目錄樹是指由容器和對象構成的層次結構。樹的葉子、節點往往是對象,樹的非葉子節點是容器。目錄樹表達了對象的連接方式,也顯示了從一個對象到另一個對象的路徑。在活動目錄中,目錄樹是基本的結構,從每一個容器作為起點,層層深入, 都可以構成一棵子樹。一個簡單的目錄可以構成一棵樹,一個計算機網絡或者一個域也可以構成一棵樹。
5) 域:
域是網絡系統的安全性邊界。在獨立的計算機上,域即指計算機本身,一個域可以分布在多個物理位置上,同時一個物理位置又可以劃分不同網段為不同的域,每個域都有自己的安全策略以及它與其他域的信任關系。當多個域通過信任關系連接起來之后,活動目錄可以被多個信任域域共享。
6) 組織單元:
包含在域中特別有用的目錄對象類型就是組織單元。組織單元是可將用戶、組、計算機和其他單元放入活動目錄的容器中,組織單元不能包括來自其他域的對象。組織單元是可以指派組策略設置或委派管理權限的最小作用單位。使用組織單元,您可在組織單元中代表邏輯層次結構的域中創建容器,這樣您就可以根據您的組織模型管理帳戶、資源的配置和使用,可使用組織單元創建可縮放到任意規模的管理模型。可授予用戶對域中所有組織單元或對單個組織單元的管理權限,組織單元的管理員不需要具有域中任何其他組織單元的管理權,組織單元有點象NT時代的工作組。
7) 域樹:
域樹由多個域組成,這些域共享同一表結構和配置,形成一個連續的名字空間。樹中的域通過信任關系連接起來,活動目錄包含一個或多個域樹。域樹中的域層次越深級別越低,一個“.”代表一個層次,如域child.Microsoft.com 就比 Microsoft.com這個域級別低,因為它有兩個層次關系,而Microsoft.com只有一個層次。域樹中的域是通過雙向可傳遞信任關系連接在一起。由于這些信任關系是雙向的而且是可傳遞的,因此在域樹或樹林中新創建的域可以立即與域樹或樹林中每個其他的域建立信任關系。這些信任關系允許單一登錄過程,在域樹或樹林中的所有域上對用戶進行身份驗證,但這不一定意味著經過身份驗證的用戶在域樹的所有域中都擁有相同的權利和權限。因為域是安全界限,所以必須在每個域的基礎上為用戶指派相應的權利和權限。
8) 域林:
域林是指由一個或多個沒有形成連續名字空間的域樹組成,它與上面所講的域樹最明顯的區別就在于這些域樹之間沒有形成連續的名字空間,而域樹則是由一些具有連續名字空間的域組成。但域林中的所有域樹仍共享同一個表結構、配置和全局目錄。域林中的所有域樹通過Kerberos 信任關系建立起來,所以每個域樹都知道Kerberos信任關系,不同域樹可以交叉引用其他域樹中的對象。域林都有根域,域林的根域是域林中創建的***個域,域林中所有域樹的根域與域林的根域建立可傳遞的信任關系。
9) 站點:
站點是指包括活動目錄域服務器的一個網絡位置,通常是一個或多個通過TCP/IP連接起來的子網。站點內部的子網通過可靠、快速的網絡連接起來。站點的劃分使得管理員可以很方便地配置活動目錄的復雜結構,更好地利用物理網絡特性,使網絡通信處于***狀態。當用戶登錄到網絡時,活動目錄客戶機在同一個站點內找到活動目錄域服務器,由于同一個站點內的網絡通信是可靠、快速和高效的,所以對于用戶來說,他可以在最快的時間內登錄到網絡系統中。因為站點是以子網為邊界的,所以活動目錄在登錄時很容易找到用戶所在的站點,進而找到活動目錄域服務器完成登錄工作。
10) 域控制器:
域控制器是使用活動目錄安裝向導配置的Windows Server(Windows 2000,Windows Server 2003或者Windows Server 2008) 的計算機。活動目錄安裝向導安裝和配置為網絡用戶和計算機提供活動目錄服務的組件供用戶選擇使用。域控制器存儲著目錄數據并管理用戶域的交互關系,其中包括用戶登錄過程、身份驗證和目錄搜索,一個域可有一個或多個域控制器。為了獲得高可用性和容錯能力,使用單個局域網 (LAN) 的小單位可能只需要一個具有兩個域控制器的域。具有多個網絡位置的大公司在每個位置都需要一個或多個域控制器以提供高可用性和容錯能力。#p#
3. 活動目錄的邏輯結構
活動目錄的邏輯結構非常靈活,有目錄樹、域、域樹、域林等,這些名字都不是實實在在的一種實體,只是代表了一種關系,一種范圍,如目錄樹就是由同一名字空間上的目錄組成,而域又是由不同的目錄樹組成,同理域樹是由不同的域組成,域林是由多個域樹組成。它們是一種完全的樹狀、層次結構視圖,這種關系可以看成是一種動態關系。
3.1 域、域樹、域林
域既是以活動目錄為基礎的網絡系統的邏輯組織單元,是對象(如計算機、用戶等)的容器,這些對象有相同的安全需求、復制過程和管理,這一點對于網管人員應是相當容易理解的。域是安全邊界,域管理員只能管理域的內部,除非其他的域顯式地賦予他管理權限,他才能夠訪問或管理其他的域。每個域都有自己的安全策略,以及它與其他域的安全信任關系。在這里就涉及到了不同域之間的信任關系及傳遞關系。
下圖給出了域、域樹和域林的示意:

域與域之間具有一定的信任關系,域信任關系使得一個域中的用戶可由另一域中的域控制器進行驗證,才能使一個域中的用戶訪問另一個域中的資源。所有域信任關系中只有兩種域:信任關系域和被信任關系域。信任關系就是域A信任域B,則域B中的用戶可以通過域A中的域控制器進行身份驗證后訪問域A中的資源,則域A與域B之間的關系就是信任關系。被信任關系就是被一個域信任的關系,在上面的例子中域B就是被域A信任,域B與域A的關系就是被信任關系。信任與被信任關系可以是單向的,也可以是雙向的,即域A與域B之間可以單方面的信任關系,也可以是雙方面的信任關系。
而在域中傳遞信任關系不受關系中兩個域的約束,是經父域向上傳遞給域目錄樹中的下一個域,也就是說如果域A信任域B,則域A也就信任域B下面的子域B1、子域B2……,傳遞信任關系總是雙向的:關系中的兩個域互相信任(是指父域與子域之間)。默認情況下,域目錄樹或目錄林(目錄林可以看做是同一域中的多個目錄樹組成)中的所有信任關系都是傳遞的。通過大大減少需管理的委托關系數量,這將在很大程度上簡化域的管理。
3.2 組織單元(OU)
組織單元(OU)是一個容器對象,它也是活動目錄的邏輯結構的一部分,可以把域中的對象組織成邏輯組,它可以幫助管理員簡化管理工作。OU可以包含各種對象,比如用戶賬戶、用戶組、計算機、打印機等,甚至可以包括其他的OU,所以可以利用OU把域中的對象形成一個完全邏輯上的層次結構。對于企業來講,可以按部門把所有的用戶和設備組成一個OU層次結構,也可以按地理位置形成層次結構,還可以按功能和權限分成多個OU層次結構。很明顯,通過組織單元的包容,組織單元具有很清楚的層次結構,這種包容結構可以使管理者把組織單元切入到域中以反應出企業的組織結構并且可以委派任務與授權。建立包容結構的組織模型能夠幫助用戶解決許多問題,同時仍然可以使用大型的域、域樹中每個對象都可以顯示在全局目錄,從而用戶就可以利用一個服務功能輕易地找到某個對象而不管它在域樹結構中的位置。
下圖給出了AD中,域、容器、目錄樹、OU等邏輯概念的示意:

由于OU層次結構局限于域的內部,所以一個域中的OU層次結構與另一個域中的OU層次結構沒有任何關系。組織中的不同部門可以成為不同的域,或者一個組織單元,從而采用層次化的命名方法來反映組織結構和進行管理授權。順著組織結構進行顆粒化的管理授權可以解決很多管理上的頭疼問題,在加強中央管理的同時,又不失機動靈活性。#p#
4. 活動目錄的物理結構
活動目錄中,物理結構與邏輯結構有很大的不同,它們是彼此獨立的兩個概念。邏輯結構側重于網絡資源的管理,而物理結構則側重于網絡的配置和優化。活動目錄的物理結構主要著眼于活動目錄信息的復制和用戶登錄網絡時的性能優化。物理結構的兩個重要概念是站點和域控制器。
4.1 站點
站點是由一個或多個IP子網組成,這些子網通過高速網絡設備連接在一起。站點往往由企業的物理位置分布情況決定,可以依據站點結構配置活動目錄的訪問和復制拓撲關系,這樣能使得網絡更有效地連接,并且可使復制策略更合理,用戶登錄更快速, 活動目錄中的站點與域是兩個完全獨立的概念,一個站點中可以有多個域,多個站點也可以位于同一域中。
4.2 域控制器
域控制器是指運行Windows服務器版本(Windows 2000、Windows Server 2003、Windows Server 2008)的服務器,它保存了活動目錄信息的副本。域控制器管理目錄信息的變化,并把這些變化復制到同一個域中的其他域控制器上,使各域控制器上的目錄信息處于同步。域控制器也負責用戶的登錄過程以及其他與域有關的操作,比如身份認證、目錄信息查找等。一個域可以有多個域控制器。規模較小的域可以只需要兩個域控制器,一個實際使用,另一個用于容錯性檢查。規模較大的域可以使用多個域控制器。
5. LDAP協議簡介
LDAP的英文全稱是Lightweight Directory Access Protocol,簡稱為LDAP。它是基于X.500標準的,但是又比它簡單許多,并且可以根據需要定制的一種目錄服務協議。與X.500不同,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規范在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。
目錄服務的工作模型是客戶機/服務器模型。1988年,CCITT組織首先創建了X.500標準全面描述了這一模型,包括目錄服務器的目錄結構、命名方法、搜索機制以及用于客戶機與服務器通信的協議DAP(Directory Access Protocol)。此標準很快被ISO組織引用,編號為ISO 9594。但是,在實際應用的過程中,X.500存在著不少障礙。由于DAP這種應用層的協議是嚴格遵照復雜的ISO七層協議模型制定的,對相關層協議環境要求過多,在許多小系統上無法使用,TCP/IP協議體系的普及更使這種協議越來越不適應需要。在這種情況下,DAP的簡化版棗LDAP應運而生。早期設計的LDAP服務器不是獨立的目錄服務器,主要扮演LDAP客戶機與X.500服務器間網關的角色,既是LDAP的服務器又是X.500的客戶機。
如今的LDAP服務器可取代X.500服務器而獨立提供服務。LDAP服務器的目錄組織以“條目”為基本單位,結構類似樹形,每一個條目即是樹上的一個分枝節點或葉子。一個條目由多個“屬性”組成,每個屬性又由一個“類型”和一到多個“值”組成。LDAP協議直接基于面向連接的TCP協議實現,定義了LDAP客戶機和LDAP服務器間的通信過程和信息格式。LDAP服務器在服務端口(缺省端口號為389)監聽,收到客戶機的請求后,建立連接,開始會話。活動目錄與DNS協議的結合的意義在于使內部網與外部網命名方式保持一致,這樣便于整個網絡的管理。
LDAP協議是用于查詢和檢索活動目錄信息的目錄訪問協議。由于它是基于工業標準的目錄服務協議,使用 LDAP 的程序可以發展成與其他目錄服務共享活動目錄信息,這些目錄服務同樣支持LDAP。活動目錄使用LDAP 目錄訪問協議作為它與其他應用或者目錄服務交換信息的手段。LDAP已經成為 目錄服務的標準,它比X.500 DAP 協議更為簡單實用一些。Microsoft 已經在Exchange Server 系統中提供了LDAP v2 和LDAP v3 的支持, 在Windows Server的活動目錄服務中將提供更為全面的支持。#p#
6. AD服務與DNS的關系
DNS(Domain Name Server, 域名服務器)是活動目錄的基礎。總結來說,AD用于組織資源,DNS用于尋找資源。在活動目錄中命名策略基本按照Internet標準來實現,遵照DNS和LDAP3.0兩種標準,活動目錄中的域和DNS系統中的域采用完全相同的命名方式,即活動目錄中的域名就是DNS域名。那么在活動目錄中依賴于DNS作為定位服務,實現將名字解析為IP地址。
所以構建活動目錄時,必須同時安裝配置相應的DNS,無論用戶實現IP地址解析還是登錄驗證,都利用DNS在活動目錄中定位服務器。活動目錄與DNS系統的這種緊密集成,意味著活動目錄同時非常適合于Internet和Intranet環境,這也是微軟創建適用于Internet的網絡操作系統的思想的一種體現。企業可以把活動目錄直接連接到Internet以簡化與客戶和合作伙伴之間的信息通訊。
另外,DNS服務允許客戶使用DNS動態更新協議(RFC 2136)來動態更新資源記錄,通過縮短手工管理這些相同記錄的時間,提高DNS管理的性能。運行Windows Server的計算機能動態地注冊他們的DNS名稱和IP地址。
下圖給出了AD與DNS的關系,以及對于域中一臺具體的計算機,AD命名與DNS命名的對應關系:

7. AD中組策略簡介
組策略是Active Directory中非常重要的一項技術。組策略是一個允許執行針對用戶或計算機進行配置的基礎架構。通俗地說,組策略和注冊表類似,是一項可以修改用戶或計算機設置的技術。組策略和注冊表的區別主要在于:注冊表只能針對一個用戶或一臺計算機進行設置,但組策略卻可以針對多個用戶和多臺計算機進行設置。舉個例子,在一個擁有1000用戶的企業中,如果用注冊表來進行配置,可能需要在1000臺計算機上分別修改注冊表。但如果改用組策略,那只要創建好組策略,然后通過一個合適的級別部署到1000臺計算機上就可以了。
組策略和Active Directory結合使用,可以部署在OU,站點和域的級別上,當然也可以部署在本地計算機上,但部署在本地計算機并不能使用組策略中的全部功能,只有和Active Directory配合,組策略才可以發揮出全部潛力。組策略部署在不同級別的優先級是不同的,本地計算機<站點<域<OU。管理員可以根據管理任務,為組策略選擇合適的部署級別。
組策略對象存儲在兩個位置,鏈接GPO(Group Policy Object)的Active Directory容器和域控制器上的Sysvol文件夾。GPO是組策略設置的集合,是存儲在Active Directory中的一個虛擬對象。GPO由組策略容器和組策略模板組成,組策略容器包含GPO的屬性信息,存儲在域中每臺域控制器活動目錄中;組策略模板包含GPO的數據,存儲在系統盤的/Policies子目錄下。
組策略管理可以通過組策略編輯器和組策略管理控制臺,組策略編輯器是Windows操作系統中自帶的組策略管理工具,可以修改GPO中的設置。組策略管理控制臺則是功能更強大的組策略編輯工具,組策略管理控制臺可以創建,管理,部署GPO,***的GPMC可以從微軟網站下載。#p#
8. 基于AD的認證過程
8.1 NTLM認證
NTLM是用于Windows NT和 Windows 2000/2003/2008 Server 工作組環境的身份驗證協議。下圖給出了NTLM認證的過程,其基本流程如下:

1) 用戶請求訪問。用戶嘗試通過提供用戶憑據登錄到客戶端。登錄前,客戶端計算機緩存密碼的哈希值。客戶端向服務器發送一個請求,該請求包括用戶名以及純文本格式的請求。
2) 服務器發送質詢消息。服務器生成一個稱為質詢的 16 字節隨機數(即 NONCE),并將它發送到客戶端。
3) 客戶端發送應答消息。客戶端使用由用戶的密碼生成的一個密碼哈希值來加密服務器發送的質詢。它以應答的形式將這個加密的質詢發回到服務器。
4) 服務器將質詢和應答發送到域控制器。服務器將用戶名、原始質詢以及應答從客戶端計算機發送到域控制器。
5) 域控制器比較質詢和應答以對用戶進行身份驗證。域控制器獲取該用戶的密碼哈希值,然后使用該哈希值對原始質詢進行加密。接下來,域控制器將加密的質詢與客戶端計算機的應答進行比較。如果匹配,域控制器則發送該用戶已經過身份驗證的服務器確認。
6) 服務器向客戶端發送應答。假定憑據有效,服務器授予對所請求的服務或資源的客戶端訪問權。
8.2 Kerberos認證

當客戶端對網絡服務進行身份驗證之后,kerberos v5 協議遵循以下步驟:
1) 客戶端從 KDC 請求TGT.
用戶試圖通過提供用戶憑據登錄到客戶端。客戶端計算機上的 Kerberos 服務向密鑰發行中心(KDC) 發送一個 Kerberos 身份驗證服務請求。該請求包含用戶名、請求票證授予票證(ticket-granting ticket,TGT)所獲取的服務信息,以及使用用戶的長期密鑰(即密碼)加密的時間戳。(在Windows 2000 Server/Windows Server 2003/ Windows Server 2008操作系統上,域控制器充當 KDC,而 Active Directory 宿主安全帳戶數據庫)
2) 身份驗證服務發送加密的
TGT 和會話密鑰。KDC 為來自 Active Directory 的用戶獲取長期密鑰(即密碼),然后解密隨請求一起傳送的時間戳。如果該時間戳有效,則用戶是真正的用戶。KDC 身份驗證服務創建一個登錄會話密鑰,并使用用戶的長期密鑰對該副本進行加密。然后,該身份驗證服務創建一個 TGT,它包括用戶信息和登錄會話密鑰。***,該身份驗證服務使用自己的密鑰加密 TGT,并將加密的會話密鑰和加密的 TGT 傳遞給客戶端。
3) 客戶端從 TGT 請求服務器訪問。
客戶端使用其長期密鑰(即密碼)解密登錄會話密鑰,并在本地緩存它。此外,客戶端還將加密的 TGT 存儲在它的緩存中。訪問網絡服務時,客戶端向 KDC 票證授予服務(ticket-granting service,TGS)發送一個包含信息的請求,這些信息包括用戶名、使用用戶登錄會話密鑰加密的驗證者消息、TGT,以及用戶想訪問的服務(和服務器)名稱。
4) TGS 發送加密的會話密鑰和票證。
KDC 上的 TGS 使用自己的密鑰解密 KDC 并提取登錄會話密鑰。它使用該登錄會話密鑰解密驗證者消息(通常是時間戳)。如果驗證者消息成功解密,TGS 從 TGT 提取用戶信息,并使用用戶信息創建一個用于訪問該服務的服務會話密鑰。它使用該用戶的登錄會話密鑰對該服務會話密鑰的一個副本進行加密,創建一個具有服務會話密鑰和用戶信息的服務票證,然后使用該服務的長期密鑰(密碼)對該服務票證進行加密。然后,TGS 將加密的服務會話密鑰和服務票證添加到客戶端。
5) 客戶端發送服務票證。客戶端訪問服務時,向服務器發送一個請求。該請求包含驗證者消息(時間戳),該消息使用服務會話密鑰和服務票證進行加密。
6) 服務器發送加密的時間戳以進行客戶端驗證。
服務器解密服務票證并提取服務會話密鑰。通過使用服務會話密鑰,服務器解密驗證者消息(時間戳)并計算它。如果驗證者通過測試,則服務器使用服務會話密鑰對驗證者(時間戳)進行加密,然后將驗證者傳回到客戶端。客戶端解密時間戳,如果該時間戳與原始時間戳相同,則該服務是真正的,客戶端繼續連接。
【編輯推薦】






























