Active Directory(AD)是一个数据库以及一组服务,可对 IT 基础设施资源进行集中管理。它将用户与完成工作所需的资源连接起来。因此,技术人员必须能够快速检查并恢复因硬件故障、网络攻击、脚本错误以及其他问题而被修改或删除的 AD 属性。否则,用户将无法访问与以前相同的资源,从而导致生产力损失、效率低下、不满意的客户以及品牌形象受损。
精选相关内容:
阅读本指南,了解如何将 Active Directory 属性恢复到最后保存的配置。本页还介绍用于回滚和恢复 AD 属性的 PowerShell 技巧与窍门。
何时需要回滚或恢复 AD 属性?
当出现以下情况时,您需要能够回滚或恢复 AD 属性:
- IT 团队中的某人犯了一个错误,导致一个或多个 AD 对象的属性受到影响。 例如,假设一名 IT 技术人员不小心使用了错误的 PowerShell 脚本。该脚本本应是为某些 AD 用户帐户添加邮寄地址信息,但却会将域中每个用户对象的 address 属性当前值替换为星号。您必须回滚这些更改以恢复正确的地址。
- 恶意行为者获得对 AD 网络的访问权限,并删除或编辑 AD 对象的属性。 您必须回滚或恢复这些属性,以确保一切都处于正常状态。
你可以使用 Active Directory 回收站来恢复 AD 属性吗?
简而言之,不行。
Active Directory Recycle Bin旨在在短时间内保留某些已删除的 Active Directory 对象。但 Active Directory 回收站不会存储已被修改的 AD 属性,因此无法帮助完成属性恢复过程。
从技术上讲,你可以尝试建立一个流程:寄希望于你能迅速察觉任何所有不良变更,找到尚未通过复制接收到这些变更的域控制器,并将其对象设为权威。但这样做是不现实的——就像用一张写着“中大奖(win lottery)”的餐巾纸来规划你的退休储蓄计划一样。
如何确保你拥有 AD 属性的备份?
由于 Active Directory 并不保存对象的属性值记录,确保你在需要时能够恢复或回滚属性的第一步,是找到能够保存这类信息的来源。幸运的是,在涉及 Active Directory 系统状态备份时,可用的备份工具并不少。
Windows Server Backup(WBAdmin)
一种选择是使用 Microsoft Windows Server Backup(WBAdmin)。在计算机上安装 Windows Server Backup 工具后,将会安装 wbadmin.exe 命令行工具。同时,它还提供对用于 Windows Server Backup 的 Windows PowerShell cmdlet 以及 Windows Server Backup MMC 管理单元(snap-in)的访问。这三种方式本质上只是利用同一个底层应用程序的不同方法,因此通过任意一种方式创建的备份,在其他所有方式中都可见。
你可以通过以管理员权限打开“提升权限”的命令提示符来访问 WBAdmin.exe。为此,请点击 开始,右键单击 命令提示符,然后选择 以管理员身份运行。
使用 WBAdmin 时需要注意一个重要的限制:如果将其配置为将备份存储在特定文件夹中,则只保留备份的最新副本;后续的备份会覆盖先前备份的内容。
为避免此问题,以下脚本将创建一个以当前日期(YYYYMMDD 格式)命名的文件夹,然后使用 WBAdmin 的 START BACKUP 命令将 Active Directory ntds.dit 文件备份到该文件夹中:
@echo off
set backupRoot=\FILESHARENtdsBackups
set backupFolder=%date:~-4,4%%date:~-10,2%%date:~7,2%
set backupPath=%backupRoot%%backupFolder%
mkdir %backupPath%
wbadmin start backup -backuptarget:%backupPath% -include:C:WindowsNTDSntds.dit -quiet
此操作的结果包括对 ntds.dit 文件的 Volume Shadow Copy Service(VSS)快照。
这种方法的缺点是,生成的文件会明显大于 ntds.dit 文件。例如,下方截图显示了一个 20MB 的 ntds.dit 文件的备份大小。这种额外的磁盘占用在某些实验室环境中可能不是什么大问题,但在生产环境中则很难很好地扩展。
Ntdsutil.exe
Microsoft 提供的另一个选项是 Ntdsutil.exe,它是一个用于访问和管理 Windows Active Directory database 的命令行工具。Ntdsutil 的功能非常强大,甚至可以说是“危险”的,因此在生产环境中学习如何使用它并不合适。不过,这主要是因为它包含了一套令人难以置信的有用命令。
例如,Ntdsutil 具有 SNAPSHOT 命令,可在执行时捕获 Active Directory 的状态:
这种方法的主要缺点在于,Ntdsutil 备份会写入托管 Active Directory 的卷,这并不理想。
如何使用 WBAdmin 和 Ntdsutil.exe 恢复属性?
现在,让我们一步步使用 WBAdmin 和 Ntdsutil.exe。我们将使用 Active Directory Domain Services Database Mounting Tool (DSAMAIN) 来挂载隐藏在备份中的 ntds.dit 文件,以便我们可以使用 LDAP 对其进行探索。
1. 首先,我们需要找到由 WBAdmin 创建的某个 VHD 映像,将其挂载,并为其主分区分配一个驱动器号。
2. 接下来,在已挂载的备份中找到 ntds.dit 文件的路径,使用管理员权限打开命令提示符,然后使用以下命令来挂载 ntds.dit 文件:
dsamain -dbpath “E:WindowsNTDSntds.dit” -ldapport 10389
关闭命令提示符将会停止 DSAMAIN,因此请确保在完成系统状态恢复之前一直保持其打开。
3. 现在 WBAdmin 备份已挂载,我们将挂载由 Ntdsutil 创建的快照。为此,请以管理员身份打开一个新的命令提示符,使用 snapshot 命令列出我们的备份,选择要挂载的一个备份,并复制 Ntdsutil 分配的驱动器路径位置:
4. 接下来,找到位于 Ntdsutil 分配路径下的 ntds.dit 文件路径,使用管理员身份再打开一个命令提示符,然后使用以下命令来挂载 ntds.dit 文件:
dsamain -dbpath “C:\$SNAP_201903261110_VOLUMEC$\Windows\NTDS\ntds.dit” -ldapport 20389
5. 之后,我们会更改我们可靠的测试用户的 Description 属性 Delete Q. Me。
6. 现在我们可以打开 PowerShell,并使用 Get-ADUser cmdlet 来查看我们的测试用户。Active Directory 默认监听 389 端口,而我们把备份挂载到了 10389 和 20389 端口。使用可选的 Server 参数,就能同时查看测试用户在实时环境以及两个已挂载备份中的样子。
如您所见,Description 属性的当前值是“Oops”,而两个备份中都包含先前的值“Demo User Account”。
7. 现在我们可以使用 PowerShell 的 Get-ADUser cmdlet,将此属性还原为我们备份之一中捕获到的值。如果我们从某个已挂载的备份中获取该对象的副本,那么就可以使用该对象副本中的属性副本来设置“实时对象”对应属性的值:
$UserBackup = Get-ADUser -Identity dqme -Properties Description -Server dc01:10389
Set-ADUser -Identity dqme -Description $UserBackup.Description -Server dc01:389
请注意,Description 属性的值已恢复为已挂载备份中捕获到的值。
看起来很简单,但那只是一个实验练习:只涉及对某一个特定对象进行一次特定属性的更改。我们还知道哪些备份包含了恢复操作所需的信息。在现实的恢复场景中,这个过程可能会变得很糟糕,尤其是在你赶着恢复服务的时候。
使用 Netwrix 解决方案恢复 Active Directory 属性
使用 WBAdmin 和 Ntdsutil.exe 等工具来恢复 AD 属性可能会非常耗费精力,尤其是在你没有太多资源、时间或精力的情况下。
幸运的是,还有一种快速且易于使用的方法可以恢复 AD 属性——Netwrix’s end-to-end Active Directory Security Solution。该工具功能强大、覆盖全面、功能丰富,能够对不需要的 AD 删除和更改进行快速回滚。这样,你就可以确保业务连续性和客户满意度。
常见问题解答
如何在保留所有属性的情况下恢复已删除的 Active Directory 用户?
当您需要在保留完整属性集的情况下恢复已删除的 AD 用户时,具体做法取决于 Active Directory Recycle Bin 是否已启用。如果已启用,请使用 PowerShell 将用户恢复为包含所有原始属性的状态:
Get-ADObject -Filter 'DisplayName -eq "Username"' -IncludeDeletedObjects | Restore-ADObject
此方法无需任何数据丢失,即可保留组成员身份、权限以及自定义属性。
当无法使用 AD Recycle Bin 时,您需要通过使用 Ntdsutil.exe 等工具,并结合最近的系统状态备份来执行“权威恢复(authoritative restore)”。该过程要求将域控制器离线,然后从备份进行还原,这意味着可能会丢失部分近期变更。关键在于定期备份,并理解“权威恢复”会影响整个目录,而不仅仅是单个对象。 Data security that starts with identity 意味着:在恢复过程中保持完整的用户属性一致性/完整性至关重要,这对于保留访问控制和安全边界非常关键。
当未启用 Active Directory Recycle Bin 时该怎么办?
如果未启用 AD Recycle Bin,您的恢复选项会变得更复杂,但并非不可能。主要做法是使用 Ntdsutil.exe 结合删除发生之前获取的系统状态备份执行权威恢复(authoritative restore)。这需要将域控制器启动到 Directory Services Restore Mode,并从备份中还原 AD 数据库。
权威恢复流程会用较早的备份数据覆盖较新的变更,因此您将丢失备份之后对目录所做的任何修改。这就是为什么主动的备份策略很重要——您无法管理看不见的内容,也无法恢复未备份的内容。为未来的保护,请使用 PowerShell 立即启用 AD Recycle Bin:
Enable-ADOptionalFeature -Identity "Recycle Bin Feature" -Scope ForestOrConfigurationSet
此步骤可将您的恢复能力从复杂的离线流程转变为直接明了的 PowerShell 命令,从而减少停机时间并保障业务连续性。
如何使用 PowerShell 命令还原 AD 属性?
当启用 Recycle Bin 时,PowerShell 提供了还原 AD 属性的最高效路径。首先识别已删除的对象:
Get-ADObject -Filter * -IncludeDeletedObjects | Where-Object {$_.Name -like "*username*"}
找到目标对象后,请将其完整恢复:
Restore-ADObject -Identity "ObjectGUID"
如果要对现有对象进行部分属性恢复,请使用 Set-ADUser 或 Set-ADObject 命令,根据文档或最近的导出结果重建特定属性。一个可行的做法是结合使用 Get-ADUser -Properties * 进行常规的 AD 导出,并配合能够快速重建属性集的恢复脚本。该方法可让你在不影响无关目录对象的情况下,对需要恢复的内容进行细粒度控制。
PowerShell 的优势在于精准——你可以在不引起连带变更的情况下,只恢复所需内容。创建用于复原的脚本,并记录你的处理流程;同时先在非生产环境中进行测试。有效的身份管理需要同时具备对变更内容的可视性,以及对如何响应这些变更的控制能力。
何时对 AD 对象使用权威恢复(authoritative)而非非权威恢复(non-authoritative)?
当你需要在所有域控制器上强制实施特定的 AD 变更,并覆盖较新的修改时,应选择权威恢复(authoritative restore)。该方法最适用于恢复意外删除的对象,或撤销未经授权的大规模更改。权威恢复流程会为已恢复的对象标记更高的版本号,从而确保复制将你恢复的数据传播到整个域。
非权威(Non-authoritative)还原适用于灾难恢复场景:在不更改现有目录数据的情况下,重新构建已失败的域控制器。该方法会从健康的域控制器获取当前 AD 信息,而不是将备份数据强行应用到整个域。
选择取决于范围和目的。权威(Authoritative)还原会影响整个林(forest),应尽量少用——它虽然功能强大,但也会带来较大的干扰。非权威(Non-authoritative)还原只影响本地域控制器,并且能与现有基础设施无缝集成。在这两种情况下,了解复制拓扑(replication topology)并拥有最新的备份都会决定恢复是否成功。Data security that starts with identity means having multiple recovery options and knowing exactly when to use each one.
如何在 Active Directory 中恢复计算机对象?
恢复计算机对象的原则与恢复用户类似,但还需要额外考虑机器身份验证以及域之间的关系。当启用 AD 回收站(AD Recycle Bin)时,请使用以下命令来恢复包含所有属性的计算机帐户:
Get-ADObject -Filter 'Name -eq "ComputerName"' -IncludeDeletedObjects | Restore-ADObject
没有回收站(Recycle Bin)时,计算机恢复会变得更复杂,因为必须重建机器信任关系(machine trust relationships)。在进行权威(Authoritative)还原后,受影响的计算机通常需要重新加入域,因为它们的计算机帐户密码可能无法正确同步。在从备份中恢复计算机对象时,请为这一步额外的操作做好计划。
实用的做法包括在问题发生之前先记录计算机对象的属性。使用 PowerShell 定期导出计算机帐户详细信息,并记录组成员关系、组织单位(OU)位置以及自定义属性。通过这些文档,在无法进行自动恢复时,就能更快地手动重建。计算机对象不仅仅是目录条目——它们是你机器身份基础架构的核心基础;如果恢复不正确,可能会破坏整个环境中的身份验证。
分享到
了解更多
关于作者
Joe Dibley
安全研究员
Netwrix 的安全研究员,并且是 Netwrix Security Research Team 的成员。Joe 是 Active Directory、Windows 以及各类企业软件平台与技术方面的专家;他/她研究新的安全风险、复杂的攻击技术,以及相应的缓解措施与检测方法。