背景
在配置了 Active Directory 以便将移动计算机的权限委托给帮助台人员之后,我开始听到报告称计算机会“卡”在特定的 OU 中。他们可以将计算机移入,但在尝试将计算机移出时会收到“访问被拒绝”消息。该问题 100% 可重现,并且仅出现在我们域中的少数 OU 中。
两个 OU 均已Protect object from accidental deletion
启用。
我已经知道
检查 ACLldp.exe
确实发现了一个微小但重要的区别。出于某种原因,只有一个 OU 具有被拒绝的 ACTRL_DS_DELETE_CHILD 属性Everyone
。
在任一 OU 上打开或关闭该Protect object
标志都无法解决问题。它确实按预期修改了 ACL,但ACTRL_DS_DELETE_CHILD
无论哪种情况,该标志都完全没有被修改。
我可以使用此解决方案来“修复”特定的 OU:
- 关闭
Protect object
标志 - 删除与 Everyone 关联的拒绝 ACE。
Protect object
重新开启- 现在是 ACL 的比赛。
难道不同版本的 Active Directory 或远程服务器管理工具Protect object
在 OU 上实际表示标志的方式会有所不同吗?
问题
什么可能导致这种差异?我该怎么做才能确保在 Active Directory 域中的所有 OU 上纠正此差异?
细节
统一的差异如下所示:
18c18
< Ace Mask: 0x00010042
---
> Ace Mask: 0x00010040
20d19
< ACTRL_DS_DELETE_CHILD
如何识别受影响的组织部门
编辑:我编写了一个 PowerShell 脚本来定位设置了此标志的组织单位。
$Base = "OU=MyOU,DC=your,DC=domain,DC=com"
Import-Module ActiveDirectory
Set-Location AD:
Get-ADOrganizationalUnit -SearchBase $Base -filter * |
ForEach-Object {
$matches = @(
(Get-ACL $_.DistinguishedName).access |
Where-Object {
$_.IdentityReference -eq "Everyone"
} |
Where-Object {
$_.ActiveDirectoryRights -like "*DeleteChild*"
}
)
if ($matches.length -gt 0) {
Write-Output $_
}
} |
Format-Table DistinguishedName
答案1
解释
在组织单位上启用该Protect object from accidental deletion
标志时,它会影响该对象的 ACL及其父类。
- 受保护的 OU 获得 {Deny, Everyone, Delete+DeleteSubtree}
- 父 OU 获得 {Deny, Everyone, DeleteChildObjects}
父级上的访问控制条目对于实施保护是必要的,但确实会产生意想不到的结果,就像这里观察到的那样。而且无论你切换标志多少次protect
,否定父级的访问控制条目永远不会被自动删除。
因此,在我使用的 Active Directory 中,任何包含受保护 OU(基本上是任何非叶 OU)的 OU 都具有否定DeleteChild ACE,从而从具有委派权限的用户的角度“捕获”该 OU 中的计算机对象。
解决方案
通过确保用于委派权限的基本 OU 在 ACL 中具有这两个访问控制条目,可以轻松解决此问题。
- {允许、分组、创建/删除计算机对象、此对象及其所有后代}*
- {允许、组、删除+删除子树、后代计算机对象}
我已经在目录中的相关 OU 上配置了第一个访问控制条目,但现在我知道这还不够。第一条规则被自动否定ACE 是每次创建受保护的 OU 时设置的。第二条规则允许直接删除对象,从而绕过否定当子 OU 受到保护时设置的条目。
*(第一条规则现在可能已经是多余的了。有人可以证实吗?
答案2
以下是我在测试中移动计算机对象所需的最低权限。
Allow Descendant Computer objects Write name
Allow Descendant Computer objects Write Name
Allow Descendant Computer objects Delete
Allow This object and all descendant objects Create Computer objects
必须将权限Delete
(第三行)设置为Descendant Computer objects
开启,以覆盖可能在要将计算机移出的 OU 的子级上设置的意外删除预防。将权限设置为开启Write Computer objects
则This object and all descendant objects
不会不是有效。有两个name
权限,一个小写,一个大写,两个都必须设置