Как получить список разрешений для объекта компьютера Active Directory для "Проверенная запись в имя участника службы" и "Имя участника службы записи"

Может кто-нибудь, пожалуйста, помогите мне со следующим

Я пытаюсь сделать что-то очень похожее на этот пост

Powershell: как установить разрешения AD для имени участника службы чтения / записи?

В принципе мне не нужно устанавливать / изменять права, а права на чтение

На объекте "Компьютер" в AD (Active Directory) вы "разрешаете" объекту "Пользователь", "Группа" или "Компьютер" (тому же компьютеру или другому объекту компьютера) право "Запись" на следующее свойство / атрибут объекта "компьютер"

Проверенная запись в имя участника службы и запись имени участника службы

Итак, допустим, что на объекте "Компьютер" Server01 пользователь "Домен \ Фред" имеет "Разрешено" для "Проверенная запись в имя субъекта службы", а также "Разрешено" "Имя субъекта службы записи"

И Пол, Джон и Сьюзан имеют те же права, что и Фред

Теперь допустим, у меня есть 500 компьютеров в домене AD с комбинацией вышеуказанных прав

Я хочу получить компьютерные объекты (я знаю, как это сделать с помощью PowerShell или ADSI, .NET)

затем я хочу перечислить, кто обладает вышеуказанными правами на эти компьютерные объекты (и это бит, на котором я застрял), как перечислить права (точнее, проверяя каждого пользователя, группу и компьютер по одному, чтобы увидеть, если они иметь эти права или нет), чтобы узнать, кто может устанавливать эти значения, связанные с SPN, для компьютеров в моем домене.

Большое спасибо заранее __Anotheruser

1 ответ

Чтобы выяснить, какие записи контроля доступа (ACE) предоставляют права, о которых вы говорите, сначала вам нужно знать GUID ObjectType, который нужно искать. Свойство servicePrincipalName имеет GUID f3a64788-5306-11d1-a9c5-0000f80367c1, Проверенные записи используют GUID своего свойства, поэтому мы все еще ищем его. Поскольку имя участника-службы является членом набора свойств "Публичная информация", вы должны также отметить, что это GUID: e48d0154-bcf8-11d1-8702-00c04fb96050

Итак, вы ищете ACE, которые удовлетворяют одному из следующих условий:

  • AccessMask для WriteProperty и без ObjectType или с пустым типом объекта GUID, так как это означает, что ACE предоставляет возможность записи всех свойств и наборов свойств
  • AccessMask WriteProperty и GUID ObjectType f3a64788-5306-11d1-a9c5-0000f80367c1
  • AccessMask WriteProperty и GUID ObjectType для e48d0154-bcf8-11d1-8702-00c04fb96050
  • AccessMask of Self (что означает проверенную запись) и GUID ObjectType для f3a64788-5306-11d1-a9c5-0000f80367c1

Кроме того, GenericWrite может использоваться вместо WriteProperty выше. Может быть, что-то подобное в PowerShell:

$ServicePrincipalNameProperty = [guid] 'f3a64788-5306-11d1-a9c5-0000f80367c1'
$PublicInformationPropertySet = [guid] 'e48d0154-bcf8-11d1-8702-00c04fb96050'
$ValidatedWrite = [System.DirectoryServices.ActiveDirectoryRights]::Self
$WriteProperty = [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty
$GenericWrite = [System.DirectoryServices.ActiveDirectoryRights]::GenericWrite

Get-ADComputer ComputerName -Properties ntSecurityDescriptor | ForEach-Object {
    $SD = $_.ntSecurityDescriptor

    $SD.Access | where {
        # Look for the access rights that would grant write capabilities
        ($_.ActiveDirectoryRights -band $ValidatedWrite) -eq $ValidatedWrite -or
        ($_.ActiveDirectoryRights -band $WriteProperty) -eq $WriteProperty -or
        ($_.ActiveDirectoryRights -band $GenericWrite) -eq $GenericWrite
    } | where ObjectType -in $null, ([guid]::Empty), $ServicePrincipalNameProperty, $PublicInformationPropertySet
}

Я думаю, что это сработало бы, чтобы показать вам интересующие вас ACE. Если вы заботитесь только о IdentityReference, вы можете извлечь это и выбросить все остальное. Если вы измените вызов Get-ADComputer на использование -Filter, это должно сработать для более чем одного компьютера (вы можете использовать Add-Member, чтобы добавить samAccountName к каждому ACE, чтобы вы могли различить их).

Еще одна вещь: это не учитывает флаги наследования и распространения или InheritedObjectTypes, поэтому вы можете увидеть некоторые ACE, которые технически не предоставят права, которые вы ищете...

Другие вопросы по тегам