且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Active Directory的主要还原,Active Directory系列之五

更新时间:2022-10-04 21:52:47

Active Directory的授权还原
 
在上篇博文中我们介绍了如何在域中部署额外域控制器,额外域控制器有很多好处,例如可以平衡用户对AD的访问压力,有利于避免唯一的域控制器损坏所导致域的崩溃。从上篇博文中我们得知,域内所有的域控制器都有一个内容相同的Active Directory,而且Active Directory的内容是动态平衡的,也就是说任何一个域控制器修改了Active Directory,其他的域控制器都会把这个Active Directory的变化复制过去。
今天我们要考虑这么一个问题,如果域中有多个域控制器,但他们所拥有的Active Directory内容不一致,那么应该以哪个域控制器的Active Directory内容为准?有的朋友可能会疑惑,怎么会出现这种情况呢?其实假如有个域控制器由于更换硬件导致有几天时间没有在线,而其他的域控制器在这段时间对Active Directory进行了修改,那么当这个域控制器重新上线时就会出现我们所提到的这种情形。
当域控制器们发现彼此的Active Directory的内容不一致,他们就需要分析一下Active Directory的优先级,从而决定以哪个域控制器的Active Directory内容为准。Active Directory的优先级比较主要考虑三方面因素,分别是:
1       版本号
2       时间
3       GUID
版本号指的是Active Directory对象的修改次数,版本号高者优先。例如域中有两个域控制器ABA域控制器上的用户administrator口令被修改了4次,最后被改为12345B域控制器上的用户administrator口令被修改了5次,最后被改为123456。那么AB发现他们的Active Directoryadministrator口令不一致,这时AB会分析版本号,发现版本号分别是45,这时A就会把BActive Directory内容复制到本机的Active Direcotry中。经过这么一轮复制后,ABActive Directory内容就达到了新的平衡,他们Active Directory中所有对象的版本号也都完全一致了。
如果AB两个域控制器都是对administrator口令修改了4次,那么版本号就是相同的。这种情况下两个域控制器就要比较时间因素,看哪个域控制器完成修改的时间靠后,时间靠后者优先。这里我们顺便提及一下,Active Directory中时间是个非常重要的因素,域内计算机的时间误差不能超过5分钟,而且Active Directory还有一个墓碑时间的限制,这些我们以后再详细加以说明。
如果AB两个域控制器的版本号和时间都完全一致,这时就要比较两个域控制器的GUID了,显然这完全是个随机的结果。一般情况下时间完全相同的非常罕见,因此GUID这个因素只是一个备选方案。
说了这么多的Active Directory优先级原理,我们引入一个具体的例子让大家加深理解。如下图所示,域中有两个域控制器FlorenceFirenze。现在域中有一个用户张建国,我们在Firenze上对Active Directory已经进行了备份。现在我们在Florence上不小心把张建国误删除了,显然Firenze会很快把Active Directory中的张建国也删除,以便和FlorenceActive Directory保持一致。那么我们应该怎么做才能把张建国给恢复回来呢?
 Active Directory的主要还原,Active Directory系列之五
很多朋友会很自然地想到利用Firenze上的Active Directory备份来解决这个问题,既然备份中有张建国,那么把备份还原回来不就OK了吗?这个问题没这么简单,如果域中只有一个域控制器,那么用备份还原是成立的。但现在域中有两个域控制器,我们就要好好考虑一下了。Firenze从备份还原后,FlorenceFirenzeActive Directory内容就不一样了,那么FlorenceFirenzeActive Directory哪个优先级更高呢?哦,不对,似乎是Florence的版本号更高一些!那我们就可以从理论上得出结论,Firenze从备份还原之后,Active Directory中已经拥有了张建国的用户账号,但FirenzeFlorence比较了Active Directory之后,Firenze认为FlorenceActive Directory比自己的优先级高,因此Firenze会把FlorenceActive Directory复制过来,这样一来,刚被还原的张建国肯定会被重新删除掉!
难道我们对此就无能为力了吗?不是的,在Firenze从备份还原Active Directory之后,我们可以利用一个工具NTDSUTIL.EXE来修改Active Directory对象的版本号,让Firenze的版本号大于Florence的版本号,这样我们就可以利用游戏规则顺利地达到目的了。这种还原方式我们称为授权还原,下面我们通过一个实例为大家演示一下具体过程。
现在的场景是Firenze已经对Active Directory进行了备份,备份中包含了域用户张建国。在备份之后我们误删除了张建国,现在我们在Firenze上开始利用备份进行主要还原。首先在Firenze上重启计算机,BIOS自检后按下F8,如下图所示,选择进入目录服务还原模式。目录服务还原模式可以把Active Directory挂起,适合我们从备份还原Active Directory
 Active Directory的主要还原,Active Directory系列之五
进入目录服务还原模式后,我们从附件中启动备份工具,如下图所示,选择下一步继续。
 Active Directory的主要还原,Active Directory系列之五
选择还原文件和设置。
 Active Directory的主要还原,Active Directory系列之五
选择从备份还原Active Directory
 Active Directory的主要还原,Active Directory系列之五
点击确定开始Active Directory的还原。
 Active Directory的主要还原,Active Directory系列之五
如下图所示,还原结束后,千万别选择重启计算机,我们还没有修改Active Directory的版本号呢,确保选择“否”。
 Active Directory的主要还原,Active Directory系列之五
还原结束后在Firenze的命令提示符下运行NTDSUTIL,如下图所示。
 Active Directory的主要还原,Active Directory系列之五
运行了NTDSUTIL后,我们可以输入?来获取当前环境下的可执行命令帮助,如下图所示,我们运行Authoritative restore来修改AD对象的版本号。
 Active Directory的主要还原,Active Directory系列之五
如下图所示,我们可以简单地运行restore database,这样整个AD内所有对象的版本号都将加到最大,版本号加到最大是什么含义呢?微软规定,AD对象的版本号每天最多可以增加10万。在本例中我们不需要把AD中所有对象的版本号都增加到最大,只要修改张建国的版本号就可以了。因此我们可以使用Restore Object命令只针对张建国的版本号进行修改,那如何在AD中表示张建国呢?按照目录对象的命名规范,张建国隶属于ADTEST.COM域中的人事部组织单位,那我们描述张建国就应该使用cn=张建国,ou=人事部,dcadtestdccom。如下图所示,我们输入修改指令后观察一下运行的效果。
 Active Directory的主要还原,Active Directory系列之五
系统询问是否执行授权还原,我们选择“是”。
 Active Directory的主要还原,Active Directory系列之五
如下图所示,授权还原成功完成,用quit命令退出NTDSUTIL
 Active Directory的主要还原,Active Directory系列之五
 
授权还原结束后我们重启Firenze,如下图所示,FirenzeAD中已经重新拥有了用户张建国,修改版本号成功了。
 Active Directory的主要还原,Active Directory系列之五












本文转自yuelei51CTO博客,原文链接:http://blog.51cto.com/yuelei/119477,如需转载请自行联系原作者