小心雙刃劍 Ntdsutil對活動目錄的管理
有傳言說微軟正計劃去掉Ntdsutil.exe,該工具從Windows 2000開始就提供到各種活動目錄功能的命令行訪問。Ntdsutil已經成為我調試活動目錄問題的常用工具,但是我卻發現,盡管在Windows Server 2008和R2中Ntdsutil增加了許多功能來提高易用性,仍然只有很少一部分管理員使用它。
Ntdsutil功能很強大,但也很危險。問題就在于某些Ntdsutil命令要求活動目錄處于脫機狀態。在Windows 2000和2003中,通過重啟域控制器和開啟目錄服務還原模式(Directory Services Restore Mode,DSRM)完成活動目錄的脫機。這是唯一一種完成語義數據庫檢查(semantic database checker)等操作的方法。
然而,重啟DC(兩次)并不是我們希望的,但是在維護窗口時經常會要求有這樣的操作。重啟并進入DSRM(通常要求安全模式)會導致所有的服務都脫機,雖然我們不推薦這么做,但這種做法卻相當普遍。
幸運的是,Windows Server 2008中引入了一個很不錯的新選項,可以將活動目錄服務安裝為可以脫機使用的服務(見圖1)。當活動目錄域名服務(Active Directory Domain Services,AD DS)關閉后,Ntdsutil就可以在不重啟的情況下進行語義數據庫分析。
圖1:活動目錄域名服務
Ntdsutil命令介紹
那么讓我們來看看Windows Server 2008和R2版的Ntdsutil,學習一些強大的操作,說不定某天就能讓你少打一個技術支持電話:
- 元數據清理:允許刪除服務器、站點、域以及命名上下文對象(當你必須手動降級DC或有一些損壞對象時這特別有用。)
- 文件*:管理活動目錄數據庫文件(這個不常用,但是還是有一些很有用的命令)
- 組成員評估:顯示主要的安全信息
- 角色:管理FSMO角色
- IFM(從介質安裝)*:捕獲活動目錄的快照,然后在dcpromo的介質安裝過程中使用
- 語義數據庫分析*:查找并修復數據庫錯誤
- 快照:管理快照,包括列舉、安裝和卸載快照
- 授權還原:將域控制器還原到某個特定時間點
這些操作要求在活動目錄域名服務停止的情況下進行。
注:雖然在過去,活動目錄輕型目錄服務( Active Directory Lightweight Directory Services,AD LDS)使用dsdbutil和dsmgmt這兩個工具來管理AD LDS實例,但微軟實際上已將這些工具整合到Ntdsutil中了。我不會在這里討論AD LDS的詳細功能,但我們必須意識到現在所有的管理功能都在AD LDS中了,這點很重要。
有幾個技巧可以幫助管理員迅速熟悉Ntdsutil工具。初學者應知道,命令可以用縮寫,這意味著你只要輸入足夠的字母就可以唯一定義Ntdsutil命令。例如,要使用元數據清除命令,你只需鍵入“meta cl”。另外,管理員還可以使用方向鍵調出曾用的命令。
Ntdsutil還包括了一個退出選項,在任何菜單級別選擇該選項,都會進入上一級菜單。^C則表示退出整個Ntdsutil。連接選項會在很多Ntdsutil命令中出現,如元數據清除,如圖2所示。它定義了一個到某一特定域控制器的鏈接。當這個命令出現時,你只需進入連接菜單然后輸入:
Connections: Con To Ser <域控制器名,如ATL-DC1>
操作會在該域控制器復制的活動目錄生效。你可以使用已登錄用戶的密碼,或者另外指定一個。
圖2:Ntdsutil元數據清除命令
Ntdsutil也有一個在線幫助組件,如圖3所示。多年來我曾多次使用這個工具,我還總是在任一菜單級別中鍵入?來快速顯示可用的選項。
對于在線幫助,有幾個變化需要注意。例如,授權還原操作現在需要一個實例的定義。這與Ntdsutil管理AD LDS分區的方式有關。如果你得到錯誤提示,要求你指定一個實例,那么你可以使用如下的命令:
Ntdsutil:Activate Partition ntds(或選擇合適的AD LDS實例進行管理)。
圖3:Ntdsutil幫助組件#p#
Ntdsutil:文件
Files命令要求停止活動目錄域服務器。 以下幾個命令較為常用:
- Checksum --檢查引擎數據庫的物理完整性。當數據庫報錯,尤其是在事件日志中,你可以使用該命令,也可以使用主菜單上的語義數據檢測器。
- Integrity--該命令非常類似于Checksum,但是運行不同的檢查。
- Set default folder security--該命令用于重設NTDS文件夾上的安全設置。這個命令不常用,除非你不小心誤操作了NTDS文件夾,不得不重新恢復。
- Move logs to %S and Move DB to %S--該命令用于移動數據庫和日志文件。
雖然我們不會每天都用到這些命令,但是如過你看到在事件日志中出現了數據庫錯誤時,Integrity 和Checksum命令就能馬上派上用場。你也可以使用語義數據庫檢測去檢測數據庫的一致性。
Ntdsutil:語義數據庫分析
這是個功能強大的命令,而且非常容易使用。 在任何時候,只要在事件日志中看到數據庫錯誤,我都會使用它。老實說,這個是我唯一使用的命令。
Semantic Checker: Go Fixup
此命令可以快速地進行完整性檢查,根據我的經驗,該命令每次都可以成功修復數據庫。當然,不能保證它能修復所有數據庫問題,但是它肯定不會帶來任何新問題。此命令可以和上面提及的Ntdsutil:Files中的數據庫修復命令一起使用。
Ntdsutil:組成員評估
這個選項為用戶或組在安全令牌中存儲安全標識符(SID)。雖然有一些老的資源工具包中的工具也能執行該操作,但是能把該工具整合到Ntdsutil確實非常棒。使用該命令前,需要先使用Set Global Catalog 或 Set Resource DC 命令去定義GC/DC。
Run Corp.com olseng
該命令會是一個五個步驟的操作過程,結果保存到C:\ olseng-20110217024622.tsv(包括所有安全信息的文本文件)。
正如你所看見的,Ntdsutil非常強大。因篇幅所限,還有很多有用的命令選項不能一一介紹。請記住對于安全、賬戶管理、分區管理、LDAP策略和其它AD LDS分區選項,Ntdsutil都是一個非常方便的命令,當然,有時候也很危險。通常,Ntdsutil會提供警示信息來讓你自我保護。 記住一點,無論做什么,在點擊回車時,一定要清楚知道自己正在做什么。
現在我們就來看看Windows Server 2008中Ntdsutil命令的詳細功能,來進一步認識它的強大功能。
Ntdsutil:元數據清理
該命令是所有Ntdsutil命令中最常用的一個,至少我這樣認為。早在Windows 2000中就有了該命令,它主要是在手動執行了域控制器提升操作(dcpromo)后用于清除活動目錄對象。Ntdsutil元數據清除命令需要使用連接菜單連接活動目錄控制器。
元數據清理要求明確指出相關站點、域、命名上下文和服務器來定位需要刪除的對象。該操作是通過元數據清除菜單中的選擇操作對象(SelOT)命令來實現的。例如,如果我想從SelOT目錄中刪除ALT-DC4這個對象,我首先可以輸入“?”命令符來了解該命令的語法參數,如圖4所示。
圖 4:使用SelOT命令
為了指定站點、域和服務器,你必須列出所有站點來得到一個相關編號,該編號會在選擇命令時使用。以下就是如何操作:
- 使用 List sites 命令:
select operation target: list sites
發現 6個 site(s)
0 - CN=Alpharetta,CN=Sites,CN=Configuration,DC=Wtec, DC=adapps,DC=hp,DC=com
1 - CN=Brussels,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
2 - CN=Melbourne,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
3 - CN=Bracknell,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
4 - CN=Roseville,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
5 - CN=Site1,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
- 現在可以使用Select site命令。我們想處理的服務器是site 1 – Brussels:: select operation target: sel site 1(注意 “1”是Brussels在LIST sites命令中的相關編號。)輸出如下:
Site -CN=Brussels,CN=Sites,CN=Configuration,DC=Wtec,DC=adapps,DC=hp,DC=com
No current domain
No current server
No current Naming Context
- 為域名和服務器重復該過程。每次使用list命令(如List domains),獲取你想處理對象的相關編號,然后在使用Select domain (#) 命令。一旦完成了這些操作,您就能看到類似圖5中的結果。雖然讀起來有點費勁,但是至少指定了站點、域和服務器。
圖5: SelOT命令的輸出例子
- 要刪除一個已指定的服務器對象,請使用Quit回到Ntdsutil元數據菜單,然后使用remove命令:
Remove selected server
你會看到一個彈出窗口通知服務器將被刪除,如圖6所示。當你在處理活動目錄中的對象時,請一定要小心使用這個命令。
圖 6:服務器刪除確定對話框 #p#
Ntdsutil:角色
這是查看、奪取并轉移靈活單主機操作(Flexible Single Master Operations ,FSMO)角色的最快辦法。在使用該命令時,有幾點要注意:
- 在FSMO維護(Role)菜單中,進入Connection菜單連接到域控制器,該域控制器是你想轉移角色的目的地。這非常重要。
Connections: Connect to server Wtec-dc1
- 退回到FSMO維護菜單(如圖7所示)
Figure 7:FSMO維護菜單
- 圖7顯示命令選項和詳細的解釋。
- 想使用Ntdsutil命令查看所有角色,進入選擇操作目標菜單,然后輸入所選服務器的角色列表(如圖7)。雖然輸出不好看,但是涵蓋了所有你想要的內容。使用Netdom命令可以獲取更詳細的信息。
Netdom Query Fsmo
- 你可以使用如下命令,奪取PDC角色Fsmo Maintenance: Seize PDC
請注意,任何奪取操作都會先自動嘗試轉換。Ntdsutil的優點就是可以一次性管理所有FSMO角色。
Ntdsutil:IFM
從介質安裝是Windows 2008上的新功能,能通過域控制器提升操作(dcpromo) 安裝向導使用高級安裝選項建立一個新的域控制器,比windows 2003要快得多。在執行這個選項前,會要求對DC做一次備份,此后恢復文件會復制到服務器的本地介質中。域控制器提升操作(dcpromo) /ADV發出指令稱要對首次升級使用靜態恢復文件而不是通過網絡。圖8顯示IFM菜單選項和一個創建完整實例的例子。包括如下操作:
- 創建完整的SYSVOL活動目錄實例和非SYSVOL完整實例
- 創建SYSVOL和非SYSVOL只讀域控制器 (RODC)實例
圖 8: Ntdsutil IFM快照
IFM創建一個快照,首先會進行數據庫碎片整理,然后保存快照到你指定的硬盤文件夾中。
Create sysvol full c:\adbackup
在C:\adbackup中將會有三個目錄,分別是:Active Directory、Registry和SYSVOL,這里面的所有文件都會在執行dcpromo操作時用到。
使用IFM命令,能很容易地從現有域控制器上獲得安裝所需的活動目錄資源,就好像是向待提升的服務器,進行一個簡單的復制操作。IFM使得升級服務器來作為域控制器變得異常簡單。一旦域控制器提升操作(dcpromo)結束,復制將立即進行以保證及時更新。請注意,一個只讀域控制器(read-only domain controller, RODC)實例會在讀/寫域控制器中創建,但是只有只讀域控制器實例自己能創建一個只讀域控制器實例。
正如你所看見的,Ntdsutil非常強大。因篇幅所限,還有很多有用的命令選項不能一一介紹。請記住對于安全、賬戶管理、分區管理、LDAP策略和其它AD LDS分區選項,Ntdsutil都是一個非常方便的命令,當然,有時候也很危險。通常,Ntdsutil會提供警示信息來讓你自我保護。 記住一點,無論做什么,在點擊回車時,一定要清楚知道自己正在做什么。
【編輯推薦】