继上文Active Directory灾难恢复详解一和Active Directory灾难恢复详解二之后,本文接着介绍有关Active Directory进行灾难恢复的相关内容。
问题:域内的组成员身份未还原
权威还原用户对象不恢复用户的组成员身份。为什么?因为成员身份关系使用组对象的成员属性(前向链接)而非用户的 memberOf 属性(后向链接)进行存储和复制。问题是如何查找用户旧的组成员身份以及在得知其身份后如何正确恢复它们。
Microsoft 对恢复用户组成员身份的进程逐渐进行改良,因此您所使用的技术取决于运行的 Active Directory 版本。下一节主要适用于 Windows 2000 Active Directory。
确定用户旧的组成员身份非常简单:只需在还原的 DC 上检查后向链接属性 — 在这种情况下,是用户对象的 memberOf 属性。memberOf 属性将包含用户域中本地组和全局组的所有成员身份。可以使用 Active Directory 用户和计算机 MMC 管理单元 (ADUC) 或使用 LDIFDE 实用程序(该程序随 Windows Server 附带)列出还原用户的组成员身份。
以下 LDIFDE 命令行将列出 Molly Clark 所属的 DRNET 域中的组,将结果存储在 output.ldf 文件中:
C:\> ldifde –r “(distinguishedName=CN=Molly Clark,OU=Engineering,DC=DRNET,DC=Local)” –l memberOf –p Base –f output.ldf
请注意,必须使用任何 LDAP 工具启动 DC 进入正常模式,并且再次重申,必须禁用入站复制;否则还原的数据将被覆盖。禁用入站复制最简单的方式是使用 REPADMIN 命令:
REPADMIN /options <dcname>+DISABLE_INBOUND_REPL
此处,<dcname> 是正在向其还原的 DC 名称。完成后不要忘记使用 –DISABLE_INBOUND_REPL 重新启用复制。
如果只要恢复几个用户,方法很简单,只需使用 ADUC 手动将用户添加回组。如果要恢复的用户数量较多,可以使用一些工具使某些过程自动化。Microsoft GROUPADD 实用程序(可从 Microsoft 产品支持服务获得)可以接受您创建用来列出用户旧的组成员身份的 LDIF 文件,并依次生成一个重新创建这些成员身份的 LDIF 文件。例如,可以使用此 GROUPADD 命令处理我们在前文示例中为 Molly Clark 创建的 LDIF 文件:
C:\> groupadd /after_restore output.ldf
此命令将以名称 groupadd_<domain>.ldf(其中 <domain> 是将更新其组的域的完全限定域名)为 Molly Clark 在其中具有组成员身份的每个域创建一个新的 LDIF 文件。可以使用如下命令导入上面创建的 LDIF 文件:
C:\> ldifde –i –k –f groupadd_child.drnet.net.ldf
对于 Windows Server 2003,Microsoft 改进了 NTDSUTIL,利用成员属性中出现的其他元数据支持链接值复制 (LVR)。如果还原的用户对象曾经是域中任何组的成员,而用户的组成员身份使用 LVR 元数据存储,则 NTDSUTIL 将增加成员属性相应值的版本号,从而引起还原的成员身份复制。
Windows Server 2003 SP1 的 NTDSUTIL 版本集成了 GROUPADD 功能,可以在执行用户对象的权威还原时自动创建 LDIF 文件。图 5 所示为一个 NTDSUTIL 新版本,图 6 所示为自动创建的 LDIF 文件的内容。
图 5内置 GROUPADD 功能的新 NTDSUTIL (单击该图像获得较大视图)
如果要还原一个包含很多用户和组的整个 OU,手动将用户添加回其所在的组是很麻烦的。恢复还原的组成员身份的另一个方法是权威还原组本身。
但是权威还原组有两个问题。第一个问题是相当明显的:如果还原组,该组中的成员身份将恢复到其在备份时的状态。这意味着自从上一次备份以来所做的所有更改都必须重新应用于该组。第二个问题有些微妙,必须按 Active Directory 复制的方式处理。在权威还原用户和组后,无法确保它们复制的顺序。如果一个组对象在还原的用户对象之前复制到 DC,则复制的域控制器将自动从组删除该用户引用,因为该用户对象尚未存在于该 DC 上。当稍后用户对象复制时,不会将其添加到组。
解决此问题最简单的方法是再对组执行一次权威还原。执行首次权威还原后,重新启动进入正常模式并确保复制正确进行。然后重新启动返回到 DSRM 并运行 NTDSUTIL 执行用户所属组的权威还原。这是为了确保当启动返回到正常模式时,用户对象将在引用它的组对象复制之前完成复制。
问题:其他域内的组成员身份未还原
“此用户属于哪个组”问题实际上比我介绍的更困难。要还原的用户可能同时是本地域和其他域中通用组的成员,而进行非权威还原时,不会还原那些组成员身份。因此您如何得知用户属于其他域中的什么组呢?答案就在全局编录中。除自身域的数据外,全局编录还包含林中其他域数据的只读副本。
要利用全局编录的林范围数据,必须对全局编录执行非权威还原,这意味着您必须以备份全局编录开始。现在,当您运行 LDIFDE 标识用户的组成员身份时,就可以从其他域中找出用户的通用组成员身份。
当您列出要恢复的用户的组成员身份时,连接到全局编录端口 3268 而不是默认的 389,然后指定林的根域作为搜索基准。LDIFDE 将显示恢复的用户的组成员身份,包括其在林中所有域内的通用组中的成员身份。以下是操作方法:
C:\> ldifde –r “(distinguishedName=CN=Don Clark,OU=Engineering,DC=DRNET,DC=Local)” -t 3268 –l memberOf –p Base –f output.ldf
如果在全局编录上运行 GROUPADD 或新的 NTDSUTIL,将会生成一个用户域的 LDIF 文件,并为还原用户所属通用组所在的每个域生成一个 LDIF 文件。当导入这些 LDIF 文件时,将还原该用户所有的组成员身份。好了,差不多了 — 接着讨论下一个问题。
问题:恢复其他域中的域本地组成员身份
在 Windows Active Directory 环境中有三种组。全局组只能包含同一个域中的成员,但可以用作其自身域和林中其他域的域本地组内的成员。全局组的成员属性不出现在全局编录中,但这不是问题,因为全局组只能包含来自其自身域的成员。通用组可以包含来自任何域的成员,可以用作林中其他通用组的成员以及用作其自身域和林中其他域的域本地组的成员。通用组的成员属性复制到全局编录。域本地组可以包含来自林中任意域的成员,但不能用作其他域中组的成员。更重要的是,域本地组的成员属性和全局组的成员属性一样,不出现在全局编录中。结果导致恢复其他域中域本地组的用户成员身份很困难。
在 Windows Server 2003 SP1 之前,恢复外部域中域本地组成员身份的唯一方式是在每个域中还原 DC,手动搜索包含该还原用户的所有域本地组的域数据,然后将用户添加回标识的组。在一个拥有众多域的大型环境中,这样会耗时太多。
Windows Server 2003 SP1 版本的 NTDSUTIL 可以帮助处理。当在域控制器上运行 NTDSUTIL 时,该实用程序创建一个包含还原的用户对象的 DN 和 GUID 的文本文件。然后,对于每个外部域,可以非权威还原单个 DC,将该文本文件复制到 DC,然后运行 NTDSUTIL 生成特定于域的新 LDIF 文件,将恢复的用户添加回其所属的域本地组。
要做到这一点,请在每个外部域的 DC 上执行以下步骤:
启动外部域中的 DC 进入 DSRM。
使用 NTBACKUP 还原包含还原用户的组成员身份的 DIT 副本。
将 NTDSUTIL 创建的 .txt 文件复制到当前 DC。
打开命令窗口,键入 ntdsutil。
键入 authoritative restore。
键入 create LDIF file(s) from <file name>(其中,<file name> 是文本文件的名称)。
键入 quit 两次以退出 ntdsutil。
重新启动 DC 进入正常 Active Directory 模式。
键入 ldifde –i –f <ldif filename>(其中,<ldif filename> 是刚才创建的 LDIF 文件的名称)。
现在,您已经还原了所有删除用户的组成员身份。
循序渐进
恢复 Active Directory 用户及其组成员身份(尤其是在一个多域环境中)是很复杂的。正确恢复组成员身份所需的具体步骤取决于运行的 Windows 版本。
如果运行的是 Windows 2003 SP1,则需要采取如下步骤:
启动 GC 进入 DSRM 并使用包含删除用户的备份执行系统状态还原。
使用 NTDSUTIL 执行已删除用户的权威还原。NTDSUTIL 将创建一个包含还原对象 DN 和 GUID 的文本文件以及一个或多个 LDIF 文件来还原用户的组成员身份。
使用 LDIFDE –i –f <LDIF filename>(其中,<LDIF filename> 是步骤 2 中创建的 LDIF 文件的名称)将组成员身份导入当前域和其他域。
重新启动全局编录进入正常模式。
在每个外部域的 DC 上,启动进入 DSRM 并使用包含还原用户的组成员身份的备份执行系统状态还原。
使用创建 ldif 文件命令运行 NTDSUTIL。
重新启动 DC 进入正常模式。
使用 LDIFDE –i –f <filename>(其中,<filename> 是在步骤 6 中创建的 LDIF 文件的名称)还原外部域中的组成员身份。
此时可以选择使用 REPADMIN /syncall 强制复制。
如果运行的 Windows Server 2003 版本没有安装 SP1 或运行的是 Windows 2000,将涉及到其他一些步骤。由于 NTDSUTIL 的较旧版本不创建 LDIF 文件,因此可以使用 GROUPADD 实用程序来创建它们。步骤如下:
启动全局编录进入 DSRM 并使用包含删除用户的备份执行系统状态还原。
禁用 NIC 或拔掉电缆阻止入站复制。
重新启动全局编录进入正常模式。
使用 LDIFDE –r "(distinguishedName=<dn>)" -t 3268 -l memberOf –p Base -f membership.ldf 使用可分辨名称 <dn> 转储用户的成员身份。
使用 GROUPADD /after_restore membership.ldf 创建 LDIF 文件。
使用 LDIFDE –i –f <filename>(其中,<LDIF filename> 是步骤 5 中 GROUPADD 创建的 LDIF 文件的名称)将组成员身份导入当前域和其他域。
使用 REPADMIN /options <dcname> -DISABLE_INBOUND_REPL 重新启用入站复制。
在每个外部域的 DC 上,启动进入 DSRM 并使用包含还原用户的组成员身份的备份执行系统状态还原。
重新启动 DC 进入正常模式。
使用 LDIFDE –i –f <filename>(其中,<filename> 是步骤 5 中 GROUPADD 创建的 LDIF 文件的名称)还原外部域中的组成员身份。
此时可以选择使用 REPADMIN /syncall 强制复制。
现在,对早于 Windows Server 2003 SP1 的环境唯一剩下的事就是恢复还原用户的外部域本地组成员身份。唯一的选择就是手动还原域本地组成员身份或从备份还原 DC 并权威还原域本地组。
总结
虽然很容易从 Active Directory 意外删除用户甚至 OU,但正确恢复删除的用户及其组成员身份可能惊人地复杂、耗时并且容易出错。要确保从这类灾难中尽可能快地恢复,必须理解对象链接、复制、删除和权威还原的结构。
您认为您在产品环境中首次尝试此操作时能正确完成所有步骤吗?为了确保下一次不得不恢复 CEO 的用户对象时有所准备,最好制订恢复删除对象的书面计划。并确保在将该计划用于实际数据之前至少练习一两次。您的老板(和 CEO)将会对此非常感激。
希望本系列介绍的有关Active Directory灾难恢复的知识能够对读者有所帮助。
【编辑推荐】