概述:
組策略是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不在線時,有權限用戶能夠經過修改註冊表實現取消組策略設置的管理和控制。