深入理解組策略一:組策略處理流程

概述:
    組策略是Win2003操作系統提供的一種重要的更新和配置管理技術,用來批量控制計算機和用戶的環境,包括控制應用程序、系統設置和管理模板的一種機制。在AD域環境中,通過組策略可以對計算機和用戶組進行高效集中化的管理。組策略是AD域環境最有吸引力的基礎架構應用之一,正確高效組策略應用可以最大化提高工作效率,節約大量時間和精力。但如果部署了不正確的組策略,排錯過程往往會使人抓狂。本文不涉及具體組策略部署方法以及如何排錯案例,僅就AD域環境中客戶機處理組策略的流程做一詳細分析。相信正確理解和掌握組策略內部處理流程,會對組策略部署以及組策略排錯有相當大的幫助和參考。
 
一:簡述客戶端計算機處理組策略流程
    簡單的說,客戶機應用組策略的流程有以下幾個步驟:
       1:客戶機啓動,執行本地安全策略。
       2:客戶機連接到網絡,查詢DC獲取要應用的GPO列表。
       3:客戶機根據GPO列表連接到Sysvol文件夾定位對應的組策略模板。
       4:客戶機根據組策略模板中信息執行相應的操作。
       5:計算機策略執行完成後,出現登錄界面,用戶登錄。
       6:用戶驗證通過後,用戶查詢DC獲取要應用的GPO列表。下面執行步驟與計算機執行步驟類似。   
     客戶機組策略處理基本流程如上所述,其中忽略了某些可能性如:環回設置,同步/異步處理,安全組篩選,WMI篩選等,因對基本流程影響不大,此處略過。有興趣請見後續文章。
     上述流程並不複雜,但其中存在一些細節需要深入瞭解,也是自己當初學習組策略時一直存在的疑問。比如:
        1:客戶機如何從DC上獲取要應用的GPO列表
        2:客戶機如何可以根據GPO列表,定位到Sysvol文件夾定位對應的組策略模板。
        3:客戶機如何可以正確的處理每個組策略設置
        4:按MS說法,客戶機與DC失去聯繫,客戶機會使用本機緩存的組策略,那麼組策略本地緩存保存在客戶機什麼位置?
    下面就上述疑問做儘可能的分析,希望能給其他朋友帶來參考,因有些結論是實驗測試結果,可能會存在某些不當之處,如有異議,歡迎討論!
 
二:客戶機如何獲取應用的GPO列表
    我們知道,DC啓動時,會向DNS宣告自己的角色,DNS服務器接受宣告後,更新DNS數據庫中DC對應的資源記錄。客戶機登錄時會聯繫DNS服務器,尋找適當的DC進行身份驗證。驗證通過後,DC告訴客戶機所屬的站點信息,域信息,以及OU信息。客戶機獲取到這些信息後,就可以查詢到正確的GPO列表。之所以擁有站點,域,OU信息後就可以獲取GPO列表信息,主要是因爲站點,域和OU對象的gPlink屬性中保存有GPO鏈接信息。
    獲取GPO列表的順序是從所屬OU往上查找每一層存在的GPO對象,直至域級。然後再查找站點所鏈接的GPO對象,生成完整的GPO列表。
    考慮到組策略執行時處理順序是:本地->站點->域->OU。與組策略生成GPO列表的順序相反,所以猜想組策略GPO列表應該是一個棧結構,採取的是先進後出的執行原則。
    如果希望能對客戶機獲取組策略列表有一個感性認識,建議大家閱讀userenv日誌文件,該文件詳細記載用戶登錄過程信息。
    要想查看完整的日誌文件,需要先激活userenv日誌完整模式。方法是:
    打開註冊表編輯器,定位至HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows NT\ CurrentVersion\Winlogon。
    新建dword值:UserEnvDebugLevel,數據爲10002 (Windows 2000/XP),Windows 2003改爲30002。
    重新啓動後在%SystemRoot%\Debug\UserMode\下可找到Userenv.log 文件。重點觀察與GPO相關的各條記錄。
   
三:客戶機如何根據GPO列表,定位到sysvol文件夾並查找對應的組策略模板文件
    客戶機獲取到GPO列表後,接下來就需要根據每個GPO信息,定位到DC中的sysvol文件夾,查找對應的組策略模板文件。
    在瞭解如何正確定位和查找到對應的組策略模板文件之前,有必要解釋一下幾個相關概念。
    1:組策略對象GPO
       在組策略編輯器中生成一個組策略後,就會對應生成一個組策略對象GPO。
       但GPO是域中一個虛擬對象,在AD數據庫中並不存在真實的GPO對象。實際上,GPO對象由兩部分組成,分別是保存在AD數據庫中組策略容器GPC和保存在Sysvol共享文件夾中的對象組策略模板GPT。
       兩者之間通過組策略對象的GUID保持關聯,並且GPC通過AD複製引擎複製到當前域的所有DC中,而GPT則是通過文件複製服務(FRS)複製到當前域的所有DC中。基本結構如下圖:
    
      注:因爲AD複製與FRS複製機制不同,導致存在GPT與GPC可能不一致的可能性。
 
    2:組策略模板GPT
       GPT是實現了一系列組策略設置的指令集,包含具體組策略的相關設置參數。
           大多數GPT都採用文件形式,存放在sysvol共享文件夾中,以便於客戶端下載和處理。 除軟件部署使用的是二進制.aas文件外,其它GPT文件都是簡單的文本文件,客戶端下載GPT文件後,按照文件指令進行相應的操作和設置。GPT的版本號存儲在Gpt.ini文件中,用於與GPC保持同步。
 
    3:組策略容器GPC
       GPC是一個目錄服務對象,主要包含有如下重要屬性:
          versionNumber:版本號屬性的主要目的是爲了確保GPC與GPT信息保持同步。
          gPCFileSysPath:提供客戶端查找和定位對應組策略模板文件的路徑。
          gPCMachineExtensionNames:指定客戶端處理計算機策略GPT文件時需要使用的客戶端擴展的ClassID。
          gPCUserExtensionNames:指定客戶端處理用戶策略GPT文件時需要使用的客戶端擴展的ClassID
          gPCWQLFilter:指定應用於組策略對象的任何WMI篩選器。
       GPC對象存儲在AD數據庫Domain分區中,可以通過AdsiEdit或LDP工具查看某個GPC對象屬性,增加感性認識。LDP工具查看到的屬性如下圖
 
    理解了上述三個概念後,很容易理解爲什麼客戶機可以根據GPO列表,定位到sysvol文件夾並查找對應的組策略模板文件:
    GPC與GPT之間由GPO的GUID保持關聯,由GPC的gPCFileSysPath記載對應組策略模板具體位置,指示客戶機下載組策略模板文件!
 
四:客戶機如何正確處理每個組策略設置
    客戶機根據GPO列表,查找到對應的組策略模板信息,通過比較緩存的GPO版本號與GPT中版本號,確定該組策略是否已經更新,如果組策略已經更新,下載GPT文件,並執行相應的操作和設置。客戶機之所以可以正確執行組策略指令集,是由於在客戶機系統中有客戶端擴展的存在。
    在Windows系統共有11種功能可以由組策略來管理,每個功能都有一個相應的服務在客戶端運行,服務負責處理相應的組策略。
    這些服務稱之爲CSE(客戶端擴展),每個CSE都作爲動態鏈接庫dll的方式存在,在客戶機啓動時,由winlogon服務動態加載。
    詳細的每個功能和對應的CSE擴展如下圖:
 
    可以在客戶機註冊表中查看詳細的客戶端擴展列表,具體註冊表位置在:
   HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\GPExtensions。
         
 
     列表中每一項代表一個具體的服務,以ClassID來標識,與GPC中gPCMachineExtensionNames/gPCUserExtensionNames保持一致。
     客戶機執行某一個GPO時,由GPC的gPCMachineExtensionNames/gPCUserExtensionNames屬性定位出該組策略具體由哪一個CSE來執行。每個CSE擴展知道如何正確處理所對應的組策略設置。
 
五:瞭解緩存登錄的客戶機組策略設置
    上述幾個步驟把正常情況下客戶機處理組策略流程做了分析,現在我們考慮一個特殊情況:當客戶機聯繫不上DC時,組策略如何處理?
    MS給出的說法是客戶機上保存有組策略緩存,客戶機聯繫不上DC,客戶機使用域帳號登錄系統,會使用組策略緩存繼續處理,
    也就是已經執行的組策略繼續有效。那麼組策略緩存保存在客戶機什麼位置呢,結論是緩存在註冊表中,並不存在一個實際的緩存文件。
    可以通過一個具體的實驗來測試緩存文件存在與否,測試方案如下:
    1:在GPMC中新建一個禁止修改網絡屬性的組策略,並鏈接給測試域帳號所在OU。禁止修改網絡屬性的設置如下:
       
      2:配置測試域用戶在客戶機爲管理員級別,在能聯繫DC情況下域用戶在客戶機正確登錄,無法修改網絡屬性。
        
 
      3:斷開客戶機網絡,重啓客戶機,通過緩存登錄後,還是無法修改網絡屬性,與上圖情況相同。
         此時我們查看當前客戶機註冊表中的的組策略緩存設置情況,具體位置在:
         HKCU\Software\Policies\Microsoft\Windows\Network Connetions。
        
 
           手動將上圖中各個值爲0的鍵值修改爲1,再次重啓客戶機,此時仍然在聯繫不上DC,但卻可以修改網絡屬性。
          
 
 
           通過這個實驗,可以得知在客戶機中並不存在實際的組策略緩存文件,因爲如果存在某個組策略緩存文件,那麼在客戶機修改註冊表重啓過程中,會重新加載該組策略緩存信息,從而覆蓋修改後的註冊表情況。如同DC在線時客戶機執行組策略會覆蓋修改的註冊表信息一樣。
        但實驗證明類似情況沒發生,從而可以測試出組策略緩存實際上就保存在註冊表上述路徑中。同時也得出當DC不在線時,有權限用戶可以通過修改註冊表實現取消組策略設置的管理和控制。
 
六:參考資料
    本文對組策略處理流程進行了稍深入的分析,通過了解組策略流程,我們可以看到,組策略正確處理依賴於多個因素,如DNS,AD數據,AD複製與FRS複製,還包括安全性設置以及sysvol文件夾目錄權限以及客戶端擴展等。當組策略不能正確執行時,可以從上述因素中查找與定位原因。
    參考資料:[url]http://technet.microsoft.com/en-us/library/cc779838.aspx[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章