После того, как я настроил нашу Active Directory так, чтобы возможность перемещать компьютеры была делегирована персоналу службы поддержки, я начал слышать сообщения о том, что компьютеры «застревают» в определенных OU. Они могут переместить компьютер, но при попытке переместить компьютер получают сообщение «доступ запрещен». Проблема на 100% воспроизводима и присутствует только в небольшом количестве OU в нашем домене.
Оба OU имеют Protect object from accidental deletion
включен.
Проверка ACL с помощью ldp.exe
действительно обнаруживает одно крошечное, но важное отличие. По какой-то причине только ОДНО из подразделений имеет атрибут ACTRL_DS_DELETE_CHILD, запрещенный для Everyone
.
Переключение Protect object
включение и выключение флажка на любом из подразделений не решает проблему. Он действительно изменяет ACL, как и ожидалось, но ACTRL_DS_DELETE_CHILD
flag в любом случае полностью не изменяется.
Я могу использовать это решение, чтобы «исправить» конкретное подразделение:
Protect object
флагProtect object
назад наМожет быть, разные версии Active Directory или инструментов удаленного администрирования сервера могут вести себя по-разному с тем, как Protect object
flag действительно представлен в OU?
Что могло вызвать эту разницу, и что я могу сделать, чтобы убедиться, что она исправлена во всех подразделениях в домене Active Directory?
Унифицированный diff выглядит так:
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
Когда вы включаете Protect object from accidental deletion
флаг организационной единицы, он влияет на ACL этого объекта и его родитель.
Запись управления доступом в родительском элементе необходима для обеспечения защиты, но дает неожиданные результаты, подобные тем, что здесь наблюдаются. И независимо от того, сколько раз вы переключаете protect
флаг, Отрицать запись управления доступом для родительского объекта никогда не будет автоматически удалена.
Таким образом, в Active Directory, с которой я работал, любое подразделение, которое когда-либо содержало защищенное подразделение (в основном, любое нелистовое подразделение), имело Отрицать DeleteChild ACE на нем, таким образом "захватывая" компьютерные объекты в этом OU с точки зрения пользователей с делегированными разрешениями.
Через: Защитить объект от случайного удаления на форумах Technet
Эту проблему легко решить, убедившись, что базовое подразделение, используемое для делегирования разрешений, имеет эти две записи управления доступом в ACL.
Я уже настроил первую запись управления доступом для соответствующего подразделения в моем каталоге, но теперь я знаю, что этого было недостаточно. Первое правило отменяется автоматическим Отрицать ACE настраивается всякий раз, когда создается защищенное OU. Второе правило позволяет удалить объект напрямую, минуя Отрицать запись устанавливается, когда дочерняя OU защищена.
* (Возможно, первое правило теперь избыточно. Кто-нибудь может подтвердить?)