Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

使用回收站进行 Active Directory 对象恢复

使用回收站进行 Active Directory 对象恢复

Apr 11, 2023

The Active Directory 回收站使用户能够在无需从备份还原、无需重新启动 Active Directory 对象的情况下,恢复被删除的 Active Directory Domain 服务或无需重新启动域控制器(DC)。

让我们先深入了解回收站中的对象恢复究竟是如何工作的,然后再讨论它的局限性。

精选相关内容:

使用 AD 回收站进行 Active Directory 对象恢复

如果启用了 AD 回收站,当对象被删除时,其大部分属性会在一段时间内保留,以便在需要时能够恢复该对象。在此期间,对象处于 deleted object 状态。(此时间段由 msDS-DeletedObjectLifetime 属性定义。默认情况下,其值等于 tombstoneLifetime 属性的值。如果 msDS-deletedObjectLifetime 属性的值为 null,或该属性根本不存在,则会将其解释为 tombstoneLifetime 属性的值。如果也没有 tombstoneLifetime 值,则两项值都默认设置为 60 天。)

一旦对象在 deleted object 状态中的时间结束,该对象就会变成 recycled object。回收对象看起来非常像带有 isRecycled 属性、且将其设置为 TRUE 的 tombstone。和 tombstone 一样,它的大部分属性会被移除,并且会在 tombstoneLifetime 属性指定的时间段内保留在 Active Directory 中。随后,它会由 Active Directory 的垃圾回收机制清理掉。

启用回收站(Recycle Bin)后删除的对象,其生命周期如下所示:

Image

对象进入回收站(Recycle Bin)后会如何变化

虽然回收站(Recycle Bin)保留的对象属性比 tombstone(删除标记)更多,但还原后的对象并不与原始对象完全相同。让我们看看会怎样变化。下面是我计划删除的一个用户账户:

Image

下面是在回收站(Recycle Bin)中处于“已删除对象”状态的对象:

Image

尽管大多数对象属性会被保留,但仍有一些重要的差异:

  • 该对象已被移动。 该对象已移入分区的 Deleted Objects 容器。
  • 该对象已被重命名。 该对象的名称已使用 Common-Name DEL:Object-Guid. 进行更新。
  • 该对象具有一些新的属性。 isDeleted 属性的值为 TRUE,并且 lastKnownParent  属性已被填充。还新增了一个属性 msDS-LastKnownRDN ,该属性填入了对象最后已知的相对专有名称(该属性使回收站在还原对象时能够正确重置对象的 RDN,即使对象的重命名导致原始 RDN 被截断)。
  • 移除了两个属性。 两个属性:objectCategory 以及 sAMAccountType, 在对象被删除时始终会从对象中移除。若对象被恢复,则会将 objectCategory 的值自动设置为对象的 objectClass 属性中最具体的值;同时会根据 userAccountControl 的值(用于用户对象)或 groupType  属性(用于组对象)计算得到 sAMAccountType 的值。

细心的读者可能还会注意到:我的截图中也缺少了 managermemberOf 属性。其实它们只是被隐藏起来了。 这两个属性都属于 link-valued(即包含对其他对象的引用),而我使用的工具(LDP)在未设置“Return Deactivated Links”这一巧妙命名的控件时,不会返回已停用的链接。如果我启用了该控件,那么这些属性及其值就会在我的截图中可见,但我也就会错过这次值得学习的时刻。

在 Windows Server 2012 之前,从 AD 回收站恢复对象需要使用 LDAP 工具或 PowerShell 列出所有已删除的对象,然后在很长的列表中筛选找到所需对象,并使用另一个 PowerShell 命令将其恢复。好在 AD 回收站确实很有用,因为使用起来并不是一件让人愉快的事!

现在,可以在 Active Directory 管理中心中使用回收站功能:

Image

如您所见,使用搜索筛选器即可快速找到您感兴趣的已删除对象。

要恢复对象,只需在窗口右侧的“任务”列表中点击 恢复 。下面是已恢复对象的样子:

Image

Active Directory 回收站的缺点

尽管回收站大大简化了对象恢复,但我们也发现了一些限制:对象只会保留相当短的一段时间,而且其中一些属性会丢失。回收站还有几个额外的缺点:

  • 启用 Active Directory 回收站需要进行架构(schema)更改。因此,一旦你开启回收站,如果不进行完整林(full-forest)恢复,就无法关闭它。
  • Active Directory 将会变得更大一些。 启用 AD 回收站后,删除的对象将保留更多属性,并且比 tombstone(删除标记对象)持续更久。结果是,Active Directory 可能会比以前占用更多一点的空间。
  • 启用回收站会删除所有 tombstone。 启用回收站最重要的后果是:林中所有 tombstone 对象将立即停止存在。许多管理员都是“吃了亏”之后才意识到这一点的。

不过,这些问题并不能抵消启用 AD Recycle Bin 带来的好处。

未启用 AD Recycle Bin 的 Active Directory 对象恢复

为了说明启用 AD Recycle Bin 的价值,我们来回顾一下:当未启用 AD Recycle Bin 时,恢复 AD 对象需要涉及哪些内容。

在未启用 AD Recycle Bin 的域中,当删除 Active Directory 对象时,该对象会变成 tombstone。该对象会被剥离大部分属性,并在分区的 Deleted Objects 容器中保留一段时间,这段时间由域中的 tombstoneLifetime 参数指定。在此期间,该对象在技术上仍可恢复,但丢失的属性通常可以认为不可恢复。一旦达到 tombstoneLifetime 的值,对象就会被垃圾回收并从系统中消失。下面说明该生命周期:

Image

下面我们来看看如何使用 LDP 实用程序的“修改(Modify)”功能来重新激活该 tombstone:

Image
  1. 右键单击 tombstone,然后选择 Modify 选项。
  2. Edit Entry 部分中,在 Attribute 字段中输入值 “isDeleted”,选择位于 Delete 单选按钮(在 Operation 下),然后单击 Enter 按钮将该条目添加到 Entry List。
  3. Edit Entry 部分中,在 Attribute 字段中输入值 “distinguishedName”,在 Values 字段中输入对象在删除之前的 distinguished name,然后选择位于 Replace 的单选按钮(在 Operation 下),并点击 Enter 按钮,将该条目添加到 Entry List。
    还记得我提到 lastKnownParent 属性可能会派上用场吗?好吧,如果你不知道对象在删除之前的 dn 是什么,你可以试试这个技巧:获取当前的 dn,然后用 lastKnownParent 属性的当前值替换 NULL 终止字符(“A”)以及其右侧的所有内容。
  4. 在面板左下角选择 Extended 选项。
  5. 单击 Run 按钮。

然后我们就可以再次找到被“复活”的对象,并查看它看起来是什么样子:

Image

如您所见,我们从技术上确实恢复了已删除的用户对象。不过,它缺少了删除之前所拥有的绝大部分信息。

(从理论上讲)您可以通过对 Active Directory 定期创建 VSS 快照来绕开这个问题。然后,如果您需要恢复已删除的对象,您就可以“简单地”找到在对象删除之前创建的备份,使用 NTDSUTIL 挂载快照,用 LDAP 工具连接到挂载后的快照,定位对象,将其导出到……算了。

不过等等,情况会更糟。

“已删除对象(Deleted Objects)”容器并不是永远存在的东西。顾名思义的 tombstoneLifetime 属性位于 CN=Directory Service,CN=Windows NT,CN-Services,CN=Configuration, ForestDistinguishedName 对象中,用于定义已删除对象在从 Active Directory 中被永久移除之前,会保留多少天。

的值取决于 tombstoneLifetime 参与创建域的林(forest)的 Windows Server 版本。默认情况下,在使用 2003 年之后的 Windows Server 版本创建的林中,该值被设置为 180 天(Microsoft 目前推荐的设置)。更早的实现默认值为 60 天。 tombstoneLifetime 属性的行为实际上很值得关注,而且还挺酷的。如果该值存在,则 tombstone 的生存期就是指定的值。除非该值小于 2;在这种情况下,tombstone 生存期会默认设置为 60 天(Windows 2000 Server 到 Windows Server 2008)或 2 天(Windows Server 2008 R2 或更高版本)。如果未指定任何值,则该值为 60 天。

如果你想了解你环境中 tombstoneLifetime 的值,这段 PowerShell 脚本会为你返回该值(需要 AD DS 和 AD LDS 工具):

      (Get-ADObject -Identity "CN=Directory Service,CN=Windows NT,CN=Services,$((Get-ADRootDSE).configurationNamingContext)" -Properties *).tombstoneLifetime
      

一旦对象在“Deleted Objects”容器中经历了 tombstoneLifetime,Active Directory 的垃圾回收就会将其从逻辑上删除。此时该对象已不复存在,也永远无法恢复。

Netwrix 如何提供帮助

AD 回收站(AD Recycle Bin)是恢复最近删除对象的有用工具。若想要更全面的解决方案,请考虑 Netwrix Identity Recovery。它可以让你恢复已超过林(forest) 的 mdDS-DeletedObjectLifetime 的备份对象,因此这些对象已无法通过 AD 回收站恢复。

分享到

了解更多

关于作者

Asset Not Found

Kevin Joyce

产品管理总监

Netwrix 产品管理总监。Kevin 对网络安全充满热情,尤其致力于理解攻击者为利用组织环境所采用的策略与技术。凭借八年的产品管理经验,并专注于 Active Directory 和 Windows 安全,他将这种热情投入到帮助构建解决方案中,助力组织保护其身份、基础设施和数据。