作者:夏明亮
一、Active Directory操作主机角色概述
Active Directory 定义了五种操作主机角色(又称FSMO):
架构主机 schema master、
域命名主机 domain naming master
相对标识号 (RID) 主机 RID master
主域控制器模拟器 (PDCE)
基础结构主机 infrastructure master
而每种操作主机角色负担不同的工作,具有不同的功能:
架构主机
具有架构主机角色的 DC 是可以更新目录架构的唯一 DC。这些架构更新会从架构主机复制到目录林中的所有其它域控制器中。 架构主机是基于目录林的,整个目录林中只有一个架构主机。
域命名主机
具有域命名主机角色的 DC 是可以执行以下任务的唯一 DC:
向目录林中添加新域。
从目录林中删除现有的域。
添加或删除描述外部目录的交叉引用对象。
相对标识号 (RID) 主机
此操作主机负责向其它 DC 分配 RID 池。只有一个服务器执行此任务。在创建安全主体(例如用户、
组或计算机)时,需要将 RID 与域范围内的标识符相结合,以创建唯一的安全标识符 (SID)。 每一个
Windows 2000 DC 都会收到用于创建对象的 RID 池(默认为 512)。RID 主机通过分配不同的池来确保这
些 ID 在每一个 DC 上都是唯一的。通过 RID 主机,还可以在同一目录林中的不同域之间移动所有对象。
域命名主机是基于目录林的,整个目录林中只有一个域命名主机。相对标识号(RID)主机是基于域的,目录林中的每个域都有自己的相对标识号(RID)主机
PDCE
主域控制器模拟器提供以下主要功能:
向后兼容低级客户端和服务器,允许 Windows NT4.0 备份域控制器 (BDC) 加入到新的 Windows 2000 环境。 本机 Windows 2000 环境将密码更改转发到 PDCE。每当 DC 验证密码失败后,它会与 PDCE 取得联系,以查看该密码是否可以在那里得到验证,也许其原因在于密码更改还没有被复制到验证 DC 中。
时间同步 ― 目录林中各个域的 PDCE 都会与目录林的根域中的 PDCE 进行同步。
PDCE是基于域的,目录林中的每个域都有自己的PDCE。
基础结构主机
基础结构主机确保所有域间操作对象的一致性。当引用另一个域中的对象时,此引用包含该对象的
全局唯一标识符 (GUID)、安全标识符 (SID) 和可分辨的名称 (DN)。如果被引用的对象移动,则在域中担
当结构主机角色的 DC 会负责更新该域中跨域对象引用中的 SID 和 DN。
基础结构主机是基于域的,目录林中的每个域都有自己的基础结构主机
默认,这五种FMSO存在于目录林根域的第一台DC(主域控制器)上,而子域中的相对标识号 (RID) 主机、PDCE 、基础结构主机存在于子域中的第一台DC。
二、RID主机及RID相关属性的查询
RID 有何用途呢?当域控制器内添加了一个用户、组或计算机对象时,域控制器必须指派一个唯一的安全识别码(SID )给这个对象,此对象的SID 是由域的SID 与RID 所组成的,也就是说“对象的SID =域的SID + RID ”,而RID 并不是由每一台域控制器自己产生的,它是由“RID 操作主机”来统一发放给其域内的所有域控制器的。如果每一台域控制器各自产生RID ,可能出现不同的域控制器产生相同的RID ,这将导致对象SID 冲突的情况发生。
每一台域控制器需要RID 时,它会向“RID 主机”索取一些RID ,用完后再向“RID 操作主机”索取。当需要移动对象时,无论目前所连接的域控制器是哪台,当要将某个对象传送到另外一个域时,系统会移动位于“RID 主机”内的对象,然后通知其他域控制器该对象已被转移。这种做法可以避免位于不同域控制器的同一个对象,被重复传送到不同域的情况发生。如果“RID 主机”出现故障或离线,可能无法添加对象,也无法将对象转移到其他域。
首先,查看RID主机是那一台域控制器的方法如下图所示:
或者,使用命令:
或者,使用dsquery命令:
其次,查看活动目录的RID属性,及说明,参考微软帮助文档:
http://support.microsoft.com/kb/305475/zh-cn
查看当前域控制器的上的rid分配情况:
假如运行了脚本,无限循环地创建用户、组或者计算机,会导致RID池的耗尽。所以,假如AD初学者要在生产环境使用创建用户、组或者计算机的脚本,AD管理员一定要当心。
有上图可以看出在这个域中可以使用的rid池是从1600到1073741823;下一个可用的rid号是1120,我们测试下看看结果是不是预想的这样,我们建立一个用户在域中:
再次运行刚才的命令dcdisg /test:ridmanager /v得到如下结果:
上图可以看到下一个可用的rid变成1121了,那么我们再来看一下刚才创建的用户的sid号的最后一段数字是不是1121:
结果显示:确实是1121
查看RID池信息的方法:
在域中的DC Server上打开adsi编辑器,连接到“默认命名上下文”如下图所示:
单击确定,并找到如下图所示位置:
打开上图位置的属性窗口:
把上图红色框框内的数值复制到LDP工具中:、
打开ldp工具的方法是运行ldp.exe
单击确定后得到如下界面:
打开上图中的“实用工具”――“大型整数转换器(L)”
把rIDAvailablePool的值4611686014132422208复制粘贴到上图中的“字符串”后面的输入框中。并运行得到如下结果:
其中上面的high part中显示的就是RID池中没有分配给域控的ID总数,而Low Part中的值便是己经分配给域控的ID总数。
结合上图我们可以看出1.目前我的这个测试域中还可以由RID主机分配给DC使用的RID池(个数)是1600到1873741823
2.当前DC向RID主机索要的RID池为1100到1599,即500个。
3.LDP使用工具的低位正好是1600,也就是代表下一次DC向RID主机索要RID池时,RID主机会向DC分配的RID池为1600到2099.
4. LDP使用工具的高位正好是1873741823,也就是代表RID主机可以分配的最后一个RID号。
注意:有一个概念我们常常混淆,因为我们习惯上说“普通DC会向RID主机所要RID池”。其实这句话有点歧义,应该说成是“普通DC会向RID主机所要RID范围”。这样也许大家会更容易理解。
然后,在adsi编辑器中找到如下位置路径CN=Rid Set,Cn=computername,ou=domain controllers,DC=domain,DC=COM
打开上图位置的属性
结合这张图分析下:
RID主机每次为域控分配500个的ID,其中High Part就是域控此次得到的最大ID,最小ID便是1100,也就是说,当前情况下,在此域控上创建的对象,SID当中RID部分的值便是在1100-1599之间的。