RID池管理

   Active Directory 中的用戶、計算機和組統稱爲“安全主體”。安全主體會被分配一個唯一的叫做安全標識符 (SID) 的字母數字字符串。安全主體的 SID 由一個域範圍的 SID 和一個具有唯一性的相對標識符 (RID) 串接而成。RID 是在創建安全主體時由域中的RID Master分配的。RID Master的作用是:分配可用RID池給域內的DC和防止安全主體的SID重複。

   S-1-5-21-1004336348-1177238915-682003330-2100

   ==>

   S-1-5-Domain Identifier-Relative Identifier


   各域控制器維護着從 RID 操作主機上的全局池獲得的本地 RID 池。默認情況下,RID 池是以 500 這一增量獲取的。當 RID 池剩餘50% 時,域控制器將請求一個新 RID。大規模 ADMT 遷移環境中的域控制器可能在很短的時間內創建大量的安全主體。與傳統的企業部署相比,這可能會更快地用完其本地 RID 池。

   當域控制器的本地 RID 池用完但又由於域控制器自身的問題而無法從 RID 操作主機上獲取新池時,就會出現問題。RID 操作主機、網絡以及域控制器於是將無法創建更多的安全主體,並停止公佈域控制器服務,直到獲得一個新的本地池爲止。
 

  爲了減少這種丟失服務的可能性,管理員可以通過在DC上調整 REG_DWORD RID Block Size 值來增加由 RID 操作主機在每個池中分配的 RID 的數量,此值位於以下註冊表項中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\RID Values\

然而,由於 RID 閾值比較邏輯的缺陷,小於500 的“RID Block Size”(RID 塊大小)值實際上會被忽略,並返回默認的分配值 500。

    如果您決意要使用 一個不同的 RID 塊大小,只有 RID 操作主機上配置了此更改。不過,爲簡化對此設置的管理,可在目標域中所有的域控制器上以完全相同的方式配置此值。這樣,如果 RID 操作主機轉移到另一個域控制器,無須另外更新即可讓 RID 塊大小保持一致,而且“系統狀態還原”將不會誤覆蓋特意的設置。

注意,對於每個域而言,全局 RID 空間,以及您能夠創建的用戶、計算機和組的數目都是有限的(約有 2^30 個 RID)。在域範圍的 RID 池用完之後,將不能在域中創建新的安全主體。因此,增加“RID 塊大小”有一定的風險。例如,每當通過正常或強制降級解除某個域控制器時,或者在出現硬件故障時,其 RID 將全部丟失。類似地,每當從備份中還原一個域控制器時,其 RID 將全部失效,這樣有助於防止將同一個 RID 分配給一個以上的用戶帳戶。

也就是說RID Block Size值越大,潛在域RID池用的越快。系統會報16644錯誤:The maximum domain account identifier value has been reached. No further account-identifier pools can be allocated to domain controllers in this domain.


RID操作主機分配RID池:

   當你創建一個可讀域控時,它會從RID操作主機獲取500個RIDS,也就是說如果你提升10個DC的話,RID操作主機就會發布5000個RIDs,如果其中8臺DC降級,然後重新提升爲DC,現在一共發佈了9000個RIDs,如果你又使用系統狀態還原了某一臺DC,那麼現在共有9500個RIDs。獲取到的RID 池不可回收使用,即使沒有使用或使用的對象已經被刪除了

.

雖然域可以有10億RIDs可供使用,但如果反覆大量創建用戶,也有可能會出現RIDs用完的情況,出現以下情況會從RID操作主機上獲取RID池:

創建用戶,計算機,組

提升DC

正常降級DC

使用系統狀態還原DC

強奪RID操作主機角色到另一臺DC


以下非正常操作會造成RID池的浪費

使用腳本意外批量用戶,計算機和組

創建並啓用的用戶不能滿足密碼策略

DC未啓動的時間超過了墓碑時間

DC的元數據已經被清理

森林恢復

發起LDAP請求執行invalidateRidPool操作

在註冊表裏增加RID Poll Size的值


爲讓管理人員監控RID的使用情況,提供了以下方式去獲取相關信息

1.Dcdiag.exe /test:ridmanager /v

wKioL1MMQHzwMPwUAAATHZIZYP8609.png

rIDAllocationPool 代表待使用的RID池

rIDPreviousAllocationPool 代表當前正在使用的RID池

rIDNextRID 代表最近一次分配的RID爲1163

2.LDP.exe結合ADSIEDIT.exe 獲取信息

使用ADSEDIT,查看 CN = RID Manager$,CN = 系統,DC =domain,DC = com

wKioL1MMQaKCYOxZAABmcPH8eQE104.png

點擊查看相關字段,使用LDP轉換獲取信息

RidAvailablePool爲整個域的全局 RID 空間。爲整個域的全局 RID 空間。作爲大整數的上限和下限的部分。上半部分中定義安全主體可分配的每個域 (0x3FFFFFFF 或剛剛超過 10 億) 的數。下半部分是已分配的域中的 Rid 數。若要查看這兩個部件,用在 Ldp.exe實用程序菜單上大整數轉換器命令。

wKioL1MMQqCjuCLJAABKcGlWpn0332.png


使用ADSEDIT,查看 CN = Rid Set Cn =computername,ou = 域控制器,DC =domain,DC = COM

wKioL1MMQ66jV48HAAAvMBBEbvE632.png

RidAllocationPool每個域控制器都有兩個池: 它們目前採取行動,以及下一步他們將使用的池。它是下一步的池,分配由 RID FSMO,當前池用盡時,則在域中安全主體的創建時將使用它。大整數轉換器命令用於 Ldp.exe 的實用程序中查看這兩個池。

wKiom1MMRC3TB8e2AABBkdBTo7Y764.png

另外你會發現rlDAllocationPool和rlDPreviousAllocationPool的數值是一樣的,注意只有當前的RID池使用達到50%,纔會獲取下一個RID池,所以它們是一樣的。


參考資料:

http://support.microsoft.com/kb/305475

http://blogs.technet.com/b/askds/archive/2011/09/12/managing-rid-pool-depletion.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章