Active Directory

Active Directory（簡稱AD。中國大陸譯名為「活動目錄」，台灣為維持英文不譯）是微軟Windows Server中，負責架構中大型網路環境的集中式目錄管理服務（Directory Services），在Windows 2000 Server開始內建於Windows Server產品中，它處理在組織中的網路物件，物件可以是使用者，群組，電腦，網域控制站，郵件，設定檔，組織單元，樹系等等，只要是在Active Directory結構定義檔（schema）中定義的物件，就可以儲存在Active Directory資料檔中，並利用Active Directory Service Interface來存取，實際上，許多Active Directory的管理工具都是利用這個介面來呼叫並使用Active Directory的資料。
Active Directory也被做為微軟部份伺服器軟體與網域構連的資料結構，例如Microsoft Exchange Server 2003-2007，均使用AD來儲存其個人信箱資料（透過建立新的Active Directory Schema），並將AD列為建置Exchange Server的必要條件。
Active Directory最早在1996年出現，並在Windows 2000中首次問世，研發代號為Cascade，並歷經Windows 2000、Windows Server 2003的演化，目前AD已成為成熟的目錄服務元件，在Windows Server 2008中，AD更擴充其角色至五種服務（包含憑證、聯合、權限控管與輕量級服務等）。

目錄結構

Active Directory(AD)以樹狀的資料結構來組成網路服務的資訊，在簡單的網路環境中（例如小公司），通常網域都只有一個，在中型或大型的網路中，網域可能會有很多個，或是和其他公司或組織的AD相互連結（此連結稱為信任關係，於後面說明）。

森林

在多個網域的環境下，可能在不同的網域之間會需要交換與共用資料，像是組態設定、使用者帳戶與群組原則設定等，在這個時候需要有一個角色來做為不同網域間的資訊交換角色，同時又必須要符合AD樹狀結構的規範，因此微軟在多網域之間建立了一個中介用的角色，稱為森林（Forest），一個組織中最多只能有一個Forest，在Forest下則是各自的網域樹系，而在Forest下的網域或網域樹系間，可以共用資訊。

實體結構

Active Directory背後，則是一個植基於Windows Server網路基礎結構（infrastructure）的網路服務與通訊方式所組成，這些網路服務和通訊方式讓Active Directory具有高度的擴充性與向後相容性等，網路管理人員必須要妥適的設定與監控這些網路服務與通訊方式，以讓Active Directory能夠正常且順利的運作。
在以往的Windows NT網域環境中，網域的實體結構分為三種角色，即主要網域控制站（Primary Domain Controller, PDC）、備份網域控制站（Backup Domain Controller, BDC）以及成員伺服器（Member Server）三種，網域的資料都儲存在PDC和BDC中，並且在PDC和BDC間交換資料，但PDC和BDC的部署方式並不方便（一個網域只能有一個PDC），在不同的地理環境中也不能設定PDC，而且所有網域的查詢都會被導向PDC，如此很容易造成網域登入和存取的塞車情況，這個問題在Active Directory中已獲得改善，即不再有BDC（只有DC和Member Server兩種角色），在網域中的任何一台網域控制站都可以負責處理來自用戶端的網域查詢，如此在分散部署上會具有相當的彈性。

Global Catalog

在AD的實體結構中，最重要的角色非Global Catalog（全域目錄，簡稱GC）莫屬，它儲存了最完整的Active Directory的結構資料，也是以目錄為主（directory-enabled）的應用程式對AD的查詢的主要標的，而通常在不同的地理位置（例如在中國大陸、台灣、美國和英國各有分公司，且各有網域）時，GC扮演了重要的快取結構角色，若台灣的員工出差到英國分公司，並試圖登入網域時，Windows會先搜尋最近的Global Catalog Server（由DNS設定提供），若找不到時，才會連結到其他地區的GC，但若分公司的網路很慢時，這種跨地理位置的AD資料存取會直接影響到登入的時間，因此謹慎的GC的布署對AD的推行是很重要的。

Site

Active Directory站台（site），是指一個實體的網路位置，在一個站台中可能會有很多個網域控制站，AD網域資料的複製，就是以站台為主，實際處理複製作業的工具稱為KCC（Knowledge Consistency Checker，知識一致性檢查器），它會在特定時間對站台設定中的網域進行資料的同步化，複製活動則分為對內複製（intra-site replication）與對外複製（或站間複製，inter-site replication），對內複製是同一個網域間的控制站交換資訊，對外複製則是在網路管理人員的設定下，透過指定的通訊方法（IP或SMTP）以及拓樸進行複製。
預設情況下，站台的通訊方式是使用IP（即RPC over IP）來通訊，這個方式是最快的，且可以利用TCP/IP來執行遠端呼叫以及處理，但若是非網域資料（架構、設定和通用類別目錄更新，亦即沒有AD物件）的複製，則可以利用SMTP通訊方法，但這個方法需要另外建立企業級的憑證服務才可以使用，目的是確保SMTP的資料可以被確認與保全。
在中大型的網路環境中，適當的分散網路流量以及設計網路拓樸是很重要的事，KCC會利用設定好的網路通訊成本（cost）來選擇要用哪一條網路來進行複製，例如可能公司和辦公室間有一條T1和ISDN 64Kbps的線路，而T1的成本設為500（因為會有很大流量），而ISDN只有100時，KCC會選擇ISDN做複製，這樣代表網路管理員可以自己決定要使用哪一條網路來進行複製，KCC的複製演算法會判斷哪一個網路最適合複製AD的資料。除了成本以外，AD也支援了橋接站台（site bridge）的結構，站台橋接能力讓複製的成本得以分散，並可讓同一台GC的複製流量分散，也適合在不同地理區域之間的AD資訊複製與散發工作。。

DNS

Active Directory極度依賴DNS，因為DNS可以讓AD表現出階層化的樹狀結構，同時也可以和開放的目錄標準接軌，因此在建置網域時，DNS服務（或另有架設DNS Server）一定要存在於網路或該網域控制站中，AD以SRV記錄（SRV Record）來識別網域控制站，以提供網域處理的服務，而和Windows NT網域不同的是，Windows NT使用的是NetBIOS通訊協定，但AD使用的則是TCP/IP，但AD仍然提供可以在Windows NT帳戶格式（DOMAIN\User）和AD帳戶格式（user@domain）的格式互轉。

唯讀網域控制站

在Windows Server 2008中，加入了一個新的網域控制站角色，稱為唯讀型網域控制站（Read-Only Domain Controller，簡稱RODC），RODC可以作為組織的分部、分公司、辦公室或是臨時單位等，將網域控制站放在該處時會有安全性疑慮或風險時使用，顧名思義，RODC不會寫入任何資料到Active Directory，與其他網域的複寫也是有限度的，並且只會以系統管理員定義的Password Replication Policy（密碼複製原則）控制下的帳戶才會快取密碼等功能。
若要在AD中加入唯讀網域控制站，則網域的功能層級必須要在Windows Server 2003以上。

安全性

Active Directory的安全性可分為物件的安全性識別、階層的安全性以及森林之間的信任關係等。

安全性識別

AD以Kerberos V5作為其安全驗證的主要架構，並且每個AD物件都擁有一個獨一無二的安全性識別碼（Security Identifier，SID），其格式範例為S-1-5-21-7623811015-3361044348-030300820-1013，每組程式碼均有其意義，這組識別碼儲存在AD的objectSid屬性中。

階層的安全性

在AD中，不同階層的OU可以定義不同的安全性資訊，以及不同的使用者權限，而不同的網域階層之間也可以定義不同的使用者權限，管理員也可以利用安全性管理範本（Secutiy Template）來定義不同的安全性資訊，或者使用群組原則（Group Policy）來定義，在大型網路之中，使用群組原則會比安全性範本要來的方便，將兩者合併使用更可達到事半功倍之效（例如和Microsoft Base Security Analyzer的整合）。
在父階層定義的安全性，可以被繼承至子階層ㄇ。

名稱系統

Active Directory的命名預設是以LDAP（輕量級目錄存取協定）版本的X.500協定為主（由ADSI LDAP Directory Service Provider），對於AD這種如此規模的目錄服務而言，LDAP這種具有階層識別能力的協定，非常適合作為目錄服務的存取協定，但AD亦可以支援NT時代的UNC格式（由ADSI Windows NT Directory Service Provider提供），在UNC與LDAP名稱間的轉換則由ADSI的IADsNameTranslate介面來提供。

一般名稱

每個AD中的物件都會有一個一般的名稱，又稱為別名（Canonical Name），在Schema中的屬性為cn（Common Name），但組織單元（OU）基本上是例外，它自己有一個代字ou作為識別符。

關聯識別名稱

為了要在容器與物件間作識別，在Schema中設定了一個Relative Distinguished name（簡稱RDN），儲存在rDnAttId屬性中，可在搜尋AD時可以快速的對應容器內的物件。

GUID

每一個物件都有一個唯一的GUID物件識別碼，儲存在objectGUID屬性中，其編碼方式與GUID相同。

物件結構

由於微軟在設計Active Directory是使用開放型的目錄服務為方針，且目錄服務的最基本特性之一就是要能「廣納百川」，除了基本的網路服務資料外，還需要能夠和其他異質型服務連接與整合，因此微軟在AD之中實作了一個物件的儲存單位，稱為「物件結構」（schema），物件結構可以視為AD物件的元資料（metadata）。每一個物件（不論是單元或是容器物件）都有各自的schema，用以儲存識別該物件的不同資料，schema是由class和attribute所組成，attribute是最小的儲存單元，class則是包含attribute的集合體。
儲存在attribute中的資料有很多種格式，微軟將這些格式定義成27種Schema資料型態，像是指示帳戶過期日的Account-Expires屬性，其值是interval資料型態（代表時間週期，為一個64位元整數值），又如指示帳戶SAM名稱的sAMAccountName屬性，其值是String（Unicode）值（支援Unicode的字串值），又如儲存使用者的相片的Picture屬性，其值是Object(Repl-Link，代表是位元組資料，且可以複製到其他網域控制站）。
微軟也開放了可延伸schema的方法，開發人員可以利用這一套方法來延伸Active Directory Schema中的資料，但一旦寫入AD後，即不可刪除（因為物件識別碼不可更動），但是可以停用，延伸AD Schema最好的例子就是Microsoft Exchange Server。

服務

Active Directory本身除基本的網路目錄服務外，微軟也應用這個基礎架構設計了不同的服務，並且在Windows Server 2003不同的版次中加入，以提升Active Directory的應用範圍。

輕量級服務

輕量級服務（Lightweight Directory Service）在Windows Server 2003中被稱為Active Directory Application Mode（ADAM），它是一個不需要與AD基礎架構整合就可以獨立運作的目錄服務，適合用來表現企業的階層化概念與物件的管理，而且開發人員只要把使用ADSI的經驗搬過來即可使用，不必另外學習ADAM的操作方法，它也可以做為ADFS的外部驗證提供者。輕量級目錄可以在同一台電腦中安裝多個執行個體，因此也很適合用ADAM來實作Directory-Enabled的應用程式，尤其是與組織結構相關的（例如人事或人力資源系統），ADAM本身也可以延伸schema，開發人員可以將ADAM視為另一種型式的資料庫，也可以由AD中複製資料到ADAM，不過ADAM不會對AD進行站台複製，開發人員需要自行撰寫程式來複製資料。
輕量級服務在Windows Server 2008中改名為Active Directory Lightweight Directory Service（簡稱AD LDS），並提升為AD的應用角色之一。

憑證服務

憑證服務（Certificate Service）是在Windows Server 2008中首次納入Active Directory體系的服務，它原本是在Windows 2000與Windows Server 2003的憑證伺服器（Certificate Server），用來建立企業中的公開金鑰基礎建設，在Windows Server 2008中，憑證和AD物件有了更強更緊密的整合，所以有了Active Directory Certificate Service（AD CS）的角色，這個角色還可以和權限管理的Right Management Service（RMS）整合在一起，提供對檔案或應用程式層次的權利管理。

權利管理服務

權利管理服務（Right Management Service）也是在Windows Server 2008中首次納入Active Directory體系的服務，最早的時候，它是在Microsoft Office 2003開始提出的資訊權利管理（Information Right Management）功能，可利用它來控制Office檔案散布時的權限，例如列印以及儲存檔案等，接著微軟發表了Right Management Server以及RMS SDK，供Windows Server 2003平台使用，而在Windows Server 2008中即將它整合到Active Directory中，變成AD服務的一部份。

整合Unix到Active Directory中

Active Directory互通的多樣性層次得以透過符合標準的LDAP用戶端在大多數的類Unix作業系統記錄，但這些系統通常缺乏與Windows元件像是群組原則與單向信任關聯的許多屬性的自動直譯，目前也有許多第三方軟體廠商提供了將Unix平台（包含UNIX、Linux、Mac OS X與數個Java與Unix-based應用程式）整合Active Directory方法，這些供應商的一部份，包含Thursby Software System（ADmitMac）, Quest Software（Vintela Authentication Services）, Centrify（DirectControl），與Likewise Software（Likewise Open and Likewise Enterprise）。Microsoft也在這個市場中擁有為UNIX產品所設計的免費Microsoft Windows服務（即Windows Service for Unix）。
這些額外的物件結構在Windows Server 2003 R2版本中被釋出，包含完全對應到RFC 2307的一般用途的屬性。這些RFC 2307、nss_ldap與pam_ldap的參考實作均提供自PADL.com，包含直接使用這屬性以及填充資訊的支援。預設群組成員（group membership）的Active Directory Schema與被提議的RFC 2307bis延伸功能一起編譯。RFC 2307bis使用LDAP成員屬性儲存Unix的群組成員資料，與基礎RFC 2307，以儲存群組成員為以逗號分隔的使用者識別碼清單有所不同。Windows Server 2003 R2包含了一個MMC snap-in以建立與編輯這些屬性。
一個替代選項是使用其他的目錄服務，像是Fedora Directory Server（之前的Netscape Directory Server）或是Sun的Java System Directory Server，它可以執行與Active Directory雙向同步化，進而在需要使用FDS驗證的Unix與Linux平台與需要使用Windows驗證的Windows用戶端之間，提供一個與Active Directory之間轉向（deflected）的整合。另一個選項是使用OpenLDAP以及它的透通覆蓋（translucent overlay）功能得以延伸項目於使用額外屬性儲存在本機資料庫的任何遠端LDAP伺服器上。在本機資料庫中指示的用戶端將會看到包含在遠端和地的屬性，當遠端資料庫仍保持完整不變的情況下。
Samba 4，在2012年12月11日發布的 Samba 4中包含了一個Active Directory相容伺服器。