【51CTO精选译文】活动目录(AD)通常是公司企业的关键网络服务之一。要是没有它,一切都会慢慢地停下来。考虑到这一点,防备可能会影响活动目录林(forest)的各种灾难就显得很重要。
说到活动目录,灾难的严重性可能大不一样。有的很简单,比如某一个域控制器(DC)出现故障,或者某一个对象不小心被删除。比较糟糕的情况是,整个组织单元(OU)层次体系不小心被删除。而最糟糕的情况则是,可能需要还原整个域或活动目录林。
不过好消息是,适用于从简单灾难恢复过来的许多技巧和方法同样适用于从重大灾难恢复过来。本文将探讨如何从域控制器出故障和对象不小心被删除这两种最常见的灾难恢复过来。
备份策略
你首先要确保:有东西可以用来恢复。起码,应该有有效的系统状态备份,备份了活动目录林中每个域的至少两个域控制器。Windows Server Backup(Windows Server 2008及以后版本)、NTBackup(Windows Server 2003和Windows 2000 Server)以及大多数商用备份工具都可以执行有效的系统状态备份。不过,测试备份总是值得的,确保一切都处于良好状态。备份工具方面有一点很重要,那就是应该使用一款可感知卷影复制服务(VSS)的备份工具。依赖磁盘镜像或虚拟机快照技术的备份工具一般与活动目录不兼容。还原由这类工具生成的备份会引起严重的复制故障,这种故障叫更新序列号(USN)回滚。
在许多企业,负责服务器备份和还原的与运行活动目录的常常不是同一个团队。这带来了几个问题。首先,你无法直接控制备份过程,因而很难验证备份内容。其次,许多备份工具要求在进行备份的每个活动目录上要有代理软件,这间接提供了对域控制器的更高访问权。
为了应对这些问题,我对域控制器备份经常采用两层方法。我每天晚上使用脚本,对域控制器运行Windows Server Backup,把一两周的备份保留在本地域控制器上。然后共享含有备份的文件夹,只允许备份工具可以访问,因为许多备份工具不需要代理软件就可以备份文件共享区。我有时还把备份文件保存在同一个站点里面的邻近域控制器上。那样,如果你在某个站点有域控制器1和域控制器2,域控制器 1的备份就保存在域控制器2上的文件共享区上,反之亦然。
这种两层方法的优点包括如下:
•可以减小依赖另一个团队来备份的一些风险。
•万一需要进行还原,可以使用手头的本地备份文件立即进行还原,不用等另一个团队来进行还原。
•万一备份远程执行,你不用等备份通过广域网从另一个站点拷贝过来。
我在另一篇文章《如何用Windows Server Backup来管理本地备份》(http://briandesmond.com/blog/managing-local-backups-with-windows-server-backup/)中介绍了Windows Server Backup的设置方法,还发布了用来运行Windows Server Backup的脚本。
域控制器恢复
活动目录的优点之一是,域控制器基本上具有无状态的性质。除了可能担任一个或多个灵活单主机操作(FSMO)角色外,域控制器一般应该是域中其他域控制器的匹配副本,除了复制时可能有些延迟外——延迟长短取决于系统拓扑结构。如果某个故障导致域控制器无法运行,这种无状态性质就非常好,因为常常不需要从备份来进行复杂的还原。相反,你只要重新安装Windows,使用Dcpromo将服务器升级为域控制器,将所有数据复制回来——假定你的域有不止一个域控制器。如果你的域只有一个域控制器,那么只要部署第二个域控制器,就能大大降低故障风险。
不过在你重新安装和重新升级域控制器之前,必须先清理活动目录,这个过程分两步。第一步是捕鱼域控制器可能为域中另一个域控制器担任的任何FSMO角色。如果你不确信哪些域控制器担任域中的FSMO角色,请在命令提示符窗口运行:
Netdom query fsmo
就可以看个究竟。然后,可以使用Ntdsutil实用工具,捕获FSMO角色。在微软文章《使用 Ntdsutil.exe 捕获 FSMO 角色或将其转移到域控制器》(http://support.microsoft.com/kb/255504)中,按照“捕获FSMO角色”章节介绍的指示操作即可。值得一提的是,你在捕获FSMO角色时,一条最佳实践是,千万不要让担任原始角色的域控制器恢复运行。
由于不可能让担任原始FSMO角色的域控制器重新投入使用,第二步是针对活动目录中失效域控制器的配置,清理元数据。这一步同样可以用Ntdsutil来完成。请按照微软文章中《域控制器降级失败后,如何删除活动目录中的数据》(http://support.microsoft.com/kb/216498)的指示操作即可。另外,如果你在使用Server 2008(或以后版本)的活动目录用户和计算机(Active Directory Users and Computers)管理单元,只要在域控制器组织单元中删除域控制器的计算机帐户,就可以完成这一步。
当需要复制的数据量会给网络带来过大的负担时,通过网络重新升级域控制器可能行不通。这种情况下,有另外几个办法。第一个办法是从备份来还原域控制器的系统状态,然后继续进行。第二个办法是使用从介质安装(IFM)功能——该功能已添加到Windows 2003版本中。借助IFM,拿来系统状态备份(用Windows 2003中的NTBackup来创建)或IFM介质(用Server 2008或以后版本中的Ntdsutil来创建)后,让Dcpromo指向IFM介质中的活动目录数据库。Windows 2003创建的IFM介质必须先还原到文件系统上的可选用位置,以便Dcpromo可以使用它。域控制器会对介质中的数据库作必要的更改,只复制自介质创建以来发生变更的部分。
活动目录对象的生存时间
删除了一个活动目录对象,其实后台发生了许多事。最重要的是,删除对象与从活动目录数据库删除记录并没有直接关联。为了保持活动目录复制模型的一致性,对象先要转变成逻辑删除(tombstoned)状态,如图1所示。活动目录复制了表明对象已被删除的属性变更,而不是采用分布式机制来复制从数据库物理删除的内容。
图1:活动目录对象的默认生存时间
从活动目录删除一个对象后,isDeleted属性被设成True,这意味着该对象的几乎所有属性都被删除。该对象被移到Deleted Objects容器,它的lastKnownParent属性被印上了父对象的可辨别名称(DN),之后再删除对象。对象被标记为已删除后,查询活动目录的任何工具都看不到它,除非你添加了一个特殊的LDAP控件,表明想让活动目录在搜索结果中返回删除对象。各种免费的LDAP查询工具(如AdFind)为你添加了这个LDAP控件,因而很容易搜索删除对象。
这时,对象仍作为逻辑删除对象存留一段时间。活动目录林的默认逻辑删除生存时间基于活动目录林中第一个域控制器的操作系统。表1显示了默认逻辑删除生存时间。升级活动目录并不改变活动目录林的逻辑删除生存时间。
表 1:新活动目录林的默认逻辑删除生存时间 |
|
第一个域控制器的操作系统 |
逻辑删除生存时间 |
Windows 2000 |
60天 |
Windows 2003 |
180天 |
Windows 2003 R2 |
60天 |
Server 2008 |
180天 |
Server 2008 R2 |
180天 |
表1:新活动目录林的默认逻辑删除生存时间
有时,在每个域控制器上会运行名为垃圾收集的后台进行。垃圾收集进程(又叫垃圾收集器)会搜索数据库,查找存留期比活动目录林的逻辑删除生存时间更久的逻辑删除对象,然后将它们从活动目录数据库删除出去。
直到某个逻辑删除对象被垃圾收集器清除后,才可以使用名为逻辑删除恢复(tombstone reanimation)的过程来恢复对象。恢复逻辑删除对象时,只能恢复在逻辑删除过程中保留的几个属性。比如说,为用户对象保留的属性包括用户的SID、SID历史和用户名(sAMAccountName)。注意:该列表不包括一些属性,比如用户的密码、组成员关系或用户身份信息(如姓名和部门)。只要修改模式中每个属性定义的searchFlags属性,就可以控制列表含有对象被逻辑删除后保留的属性。你想添加多少属性,就可以添加多少。不过,无法添加链接属性,比如组成员关系或含有用户邮箱的邮箱数据库。想了解如何修改searchFlags属性,请参阅MSDN网页“Search-Flags属性”(http://msdn.microsoft.com/en-us/library/ms679765%28VS.85%29.aspx)。
在Server 2008 R2活动目录功能级别(FFL)层面运行的活动目录林中,你可以启用一项名为活动目录回收站的新特性。如图2所示,活动目录回收站在对象被删除时与被逻辑删除时之间添加了一个中间状态。当对象处于这个新的删除状态时,被隐藏起来,不出现在搜索结果中,但它的所有属性(包括组成员关系等链接属性)都保留下来。
图2:活动目录回收站启用后,活动目录对象的生存时间
可以使用用来恢复逻辑删除对象的同一个过程,将删除对象阶段的对象恢复到删除时的精确状态。默认情况下,对象留在删除对象阶段的时间与活动目录林的逻辑删除生存时间一样长,如表1所概述的那样。只要修改活动目录林的msDS-deletedObjectLifetime属性,就可以更改这个时间段。
删除对象生存时间到期后,垃圾收集器将对象移到回收对象阶段。回收对象的功能相当于逻辑删除对象,不过有一个重要区别:你无法恢复回收对象,也无法从备份来还原。#p#
对象恢复机制
由于不同版本的活动目录日趋成熟,恢复删除对象的机制大有完善。在Windows 2000中,恢复删除对象的唯一办法是从备份来执行强制性还原(authoritative restore)。Windows 2003引入了逻辑删除恢复的概念,这样不需要从备份来还原,就可以恢复删除对象的部分拷贝。Server 2008 R2则添加了活动目录回收站,这样不需要还原,就可以完全恢复删除对象。
值得一提的是,活动目录备份(以及IFM介质)的搁置时间与逻辑删除生存时间一样。如果启用了活动目录回收站,搁置时间是删除对象生存时间或回收对象生存时间中较短的那个。比如说,如果删除对象生存时间是180天,回收对象生存时间是60天,那么搁置时间是60天。因而,不可能从时间比其中一个都久远的备份来还原删除对象。
强制性还原
需要从备份恢复一个对象或一组对象时,强制性还原过程常常是个办法。如果你之前想域控制器的F8启动菜单上的目录服务还原模式(DSRM)选项有啥用,现在可以选择这个选项来进行强制性还原。在DSRM模式下启动时,活动目录从不开启,数据库处于离线状态。你可以在启动进入到DSRM模式的同时,从备份还原活动目录数据库,然后使用Ntdsutil选择需要还原的对象。注意:禁止了Server 2008及以后版本的域控制器上的活动目录NTDS服务后,就无法进行还原。
进行强制性还原时,活动目录提高了还原对象的内部版本号。这确保域控制器可重新使用后,那些对象复制到了域的其余部分,还原后版本变成了全局有效。
进行强制性还原常常是为了恢复含有大量对象(如用户、用户组、计算机及其他组织单元)的组织单元(OU)。假设你不小心删除了contoso.com域中的Executives OU。为了还原该OU及里面的一切对象,需要采取下面几个步骤:
1. 启动进入到DSRM模式,用你在Dcpromo期间设置的DSRM密码来登录。
2. 还原不小心删除前创建的系统状态备份。不要重启。(许多人常犯这错误,面临压力时更会犯)。
3. 开启命令提示符窗口,运行Ntdsutil。
4. 运行命令:
authoritative restore
5. 运行命令:
restore subtree
OU=Executives,DC=contoso,DC=com
(虽然该命令在这里换了行,但要把它们全部输入到一行上。其他换行的命令也是如此。)
6. 检查并核实确认安全提示符。然后,你会收到像图3所示的消息。记下文本和生成的LDAP数据交换格式(LDIF)文件。
图3:表明强制性还原成功的消息。
7. 重启域控制器,进入到正常的操作模式。
8. 登录到域控制器,打开命令提示符窗口。运行下列命令,导入第6步期间导出的LDIF文件:
ldifde -i -f ar_20110221-151131_links_contoso.com.ldf
这会导入还原对象的链接属性值(如组成员关系)。
如果你只需要还原一个对象(如删除的计算机对象),可以使用restore object命令,而不是使用第5步中的restore subtree命令。如果你的活动目录林含有多个域,就要使用第6步中导出的文本文件,为其他域中的域本地组还原组成员关系。
恢复逻辑删除
有许多工具可以用来恢复逻辑删除对象,但它们最终都执行同样的步骤。所以这里举个例子,表明使用AdRestore实用工具来恢复名为John Doe的删除用户需要哪些步骤:
1. 打开命令提示符窗口,用下列命令搜索该用户
adrestore Doe
AdRestore会搜索删除对象,查找与*doe*匹配的任何对象,并返回输出结果,如图4所示。
图4:AdRestore实用工具的示例输出
2. 确保找到了想要恢复的对象,然后再次运行AdRestore,使用-r参数选项:
adrestore -r Doe
3.确认问你是否想恢复该对象的提示。然后,AdRestore会把该对象恢复到之前所在的位置。
如前所述,逻辑删除对象被删除后失去了大部分属性。所以,你得重新添加许多属性,让恢复后的对象再度有用。(一般来说,如果你使用身份自动管理工具,逻辑删除对象被恢复后,属性会自动重新添加上去。)
活动目录回收站的删除恢复
活动目录回收站无疑是最佳的恢复选项,因为可以还原所有属性,包括组成员关系等链接属性。不过如前所述,你的活动目录林需要在Windows Server 2008 R2 FFL层面运行,才能利用这个选项。
只要运行下面这样的命令,就可以使用Windows PowerShell来启用活动目录回收站。
Enable-ADOptionalFeature -Identity 'CN=Recycle Bin Feature, CN=Optional Features, CN=Directory Service, CN=Windows NT,CN=Services, CN=Configuration,DC=contoso,DC=com' -Scope ForestOrConfigurationSet -Target 'contoso.com'
注意:启用活动目录回收站不是一个可逆转的步骤。此外,启用活动目录回收站时已经被逻辑操作的对象无法再通过逻辑删除恢复来恢复。
你启用了活动目录回收站后,之后删除的任何对象都可以在活动目录林的删除对象生存时间内完全恢复。有许多办法来恢复删除对象,但最容易的办法是使用PowerShell的Restore-ADObject cmdlet。比如说,下面是恢复删除名为John Doe的用户的几个步骤:
1.从Start(开始)菜单的Administrative Tools(管理工具)部分启动Windows PowerShell活动目录模块。
2. 运行下列命令,搜索删除用户:
Get-ADObject -SearchBase "CN=Deleted Objects,DC=contoso,DC=com" -ldapFilter:"(msDs-lastKnownRDN=John Doe)" -IncludeDeletedObjects -Properties lastKnownParent
确保它是结果集中返回的唯一对象。
3. 用下列命令还原该对象:
Get-ADObject -SearchBase "CN=Deleted Objects,DC=contoso,DC=com" -ldapFilter:"(msDs-lastKnownRDN=John Doe)" -IncludeDeletedObjects -Properties lastKnownParent | Restore-ADObject
如果你删除了整个组织单元(OU),就要按正确的顺序来恢复对象(也就是说,某个对象在父对象恢复之前是无法恢复的),以便它们可以恢复到原来所属的位置。微软发布了恢复删除对象树的PowerShell脚本(http://technet.microsoft.com/en-us/library/dd379504%28WS.10%29.aspx),你可以用来执行这项任务。
复杂的任务
为活动目录灾难作规则是项复杂的任务,因为可能许多部分会出错。不过,如果你知道如何从出现故障的域控制器和不小心删除对象或整棵对象树(如OU)恢复过来,那么完全为灾难作好了防备。
【51CTO精选译文 转载请标明出处与作者】
【编辑推荐】