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)后删除的对象,其生命周期如下所示:
对象进入回收站(Recycle Bin)后会如何变化
虽然回收站(Recycle Bin)保留的对象属性比 tombstone(删除标记)更多,但还原后的对象并不与原始对象完全相同。让我们看看会怎样变化。下面是我计划删除的一个用户账户:
下面是在回收站(Recycle Bin)中处于“已删除对象”状态的对象:
尽管大多数对象属性会被保留,但仍有一些重要的差异:
- 该对象已被移动。 该对象已移入分区的 Deleted Objects 容器。
- 该对象已被重命名。 该对象的名称已使用 Common-Name DEL:Object-Guid. 进行更新。
- 该对象具有一些新的属性。 isDeleted 属性的值为 TRUE,并且 lastKnownParent 属性已被填充。还新增了一个属性 msDS-LastKnownRDN ,该属性填入了对象最后已知的相对专有名称(该属性使回收站在还原对象时能够正确重置对象的 RDN,即使对象的重命名导致原始 RDN 被截断)。
- 移除了两个属性。 两个属性:objectCategory 以及 sAMAccountType, 在对象被删除时始终会从对象中移除。若对象被恢复,则会将 objectCategory 的值自动设置为对象的 objectClass 属性中最具体的值;同时会根据 userAccountControl 的值(用于用户对象)或 groupType 属性(用于组对象)计算得到 sAMAccountType 的值。
细心的读者可能还会注意到:我的截图中也缺少了 manager 和 memberOf 属性。其实它们只是被隐藏起来了。 这两个属性都属于 link-valued(即包含对其他对象的引用),而我使用的工具(LDP)在未设置“Return Deactivated Links”这一巧妙命名的控件时,不会返回已停用的链接。如果我启用了该控件,那么这些属性及其值就会在我的截图中可见,但我也就会错过这次值得学习的时刻。
如何从 AD 回收站恢复对象
在 Windows Server 2012 之前,从 AD 回收站恢复对象需要使用 LDAP 工具或 PowerShell 列出所有已删除的对象,然后在很长的列表中筛选找到所需对象,并使用另一个 PowerShell 命令将其恢复。好在 AD 回收站确实很有用,因为使用起来并不是一件让人愉快的事!
现在,可以在 Active Directory 管理中心中使用回收站功能:
如您所见,使用搜索筛选器即可快速找到您感兴趣的已删除对象。
要恢复对象,只需在窗口右侧的“任务”列表中点击 恢复 。下面是已恢复对象的样子:
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 的值,对象就会被垃圾回收并从系统中消失。下面说明该生命周期:
下面我们来看看如何使用 LDP 实用程序的“修改(Modify)”功能来重新激活该 tombstone:
- 右键单击 tombstone,然后选择 Modify 选项。
- 在 Edit Entry 部分中,在 Attribute 字段中输入值 “isDeleted”,选择位于 Delete 单选按钮(在 Operation 下),然后单击 Enter 按钮将该条目添加到 Entry List。
- 在 Edit Entry 部分中,在 Attribute 字段中输入值 “distinguishedName”,在 Values 字段中输入对象在删除之前的 distinguished name,然后选择位于 Replace 的单选按钮(在 Operation 下),并点击 Enter 按钮,将该条目添加到 Entry List。
还记得我提到 lastKnownParent 属性可能会派上用场吗?好吧,如果你不知道对象在删除之前的 dn 是什么,你可以试试这个技巧:获取当前的 dn,然后用 lastKnownParent 属性的当前值替换 NULL 终止字符(“A”)以及其右侧的所有内容。 - 在面板左下角选择 Extended 选项。
- 单击 Run 按钮。
然后我们就可以再次找到被“复活”的对象,并查看它看起来是什么样子:
如您所见,我们从技术上确实恢复了已删除的用户对象。不过,它缺少了删除之前所拥有的绝大部分信息。
(从理论上讲)您可以通过对 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 回收站恢复。
分享到
了解更多
关于作者
Kevin Joyce
产品管理总监
Netwrix 产品管理总监。Kevin 对网络安全充满热情,尤其致力于理解攻击者为利用组织环境所采用的策略与技术。凭借八年的产品管理经验,并专注于 Active Directory 和 Windows 安全,他将这种热情投入到帮助构建解决方案中,助力组织保护其身份、基础设施和数据。