Теперь, прежде чем я начну, я открою вам секрет: это на контроллере домена. *
* Вышеупомянутое утверждение неуместно, поскольку единственное существенное изменение, которое происходит с учетной записью локального администратора и группой локальных администраторов (в контексте и объеме этого вопроса), является минимальным и не меняет результат в достаточной степени, чтобы требовать дифференциации.
У меня не было таких проблем ни на одном из других серверов, и я готов держать пари, что причина этого в том, что он находится на DC. strong > *
* Причина та же, что указана выше. Принятый ответ объясняет несоответствие и был оплошностью с моей стороны, а не архитектуры (см. функции) безопасности Windows или контроллеров домена.
Я поигрался с несколькими идеями о том, как проверить, был ли вызван сценарий из учетной записи, которая является либо локальным администратором, либо, по крайней мере, вызвана учетной записью, которая является частью группы локальных администраторов.
Я переименовал локальную учетную запись администратора, однако я знаю, что могу увидеть, был ли сценарий вызван локальной учетной записью администратора, набрав:
(New-Object System.Security.Principal.NTAccount('reserved')).Translate([System.Security.Principal.SecurityIdentifier]).Value
и я могу видеть, заканчивается ли SID на -500
.
Проблема возникает, когда я запускаю условие, чтобы узнать, входит ли вызывающая учетная запись в группу администраторов (что является более обширной областью), набрав:
PS> [bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
PS> False
Быстрая проверка, чтобы узнать, какую учетную запись он использовал:
PS> $env:username
PS> reserved
или излишне сложный способ (хотя иногда я предпочитаю его):
PS> Write-Host ((Get-WmiObject Win32_Account | ?{$_.SID.Substring($_.SID.Length-4,4) -eq '-500'}).Caption).Split("\",2)[1] -fore GREEN
PS> reserved
и я даже печатаю:
PS> net user reserved
где он мне говорит Local Group Memberships *Administrators
.
Я открываю ADUC (dsa.msc
), смотрю в контейнер Builtin
и дважды щелкаю группу «Администраторы». Я выбираю тег Members, и вот, reserved
на самом деле является участником!
Итак, резюме:
Набрав
net user reserved
, я смог убедиться, что он входит в группу локальных администраторов.Я посмотрел в ADUC и подтвердил, что зарезервирован был членом встроенной группы администраторов
Я убедился, что зарезервированная действительно была учетная запись локального администратора, проверив, что SID начинается с
S-1-5...
и заканчивается...-500
.Чтобы сделать еще один шаг вперед, я убедился, что SID соответствует группе Active Directory с именем «Администраторы», набрав
Get-ADGroup -Identity "Administrators"
. Затем я набралGet-ADGroupMember -Identity "Administrators"
и удостоверился, что в списке естьreserved
(совпадение И SID!).Когда я проверяю, находится ли известный SID группы администраторов в группах этой учетной записи (путем получения текущего идентификатора Windows), он говорит, что это не так.
Что дает?
Почему я получаю все признаки того, что он действительно является членом группы локальных администраторов, но этот SID не найден в группах учетной записи?
[Security.Principal.WindowsIdentity]::GetCurrent()
и[Security.Principal.WindowsIdentity]::GetCurrent().Groups
соответствует вашему мнению? - person Ansgar Wiechers   schedule 02.08.2016[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups -match "S-1-5-32-544")
. Это искал текущий идентификатор Windows (зарезервирован), находил идентификаторы безопасности групп и проверял, был ли найден известный идентификатор безопасности для администраторов (S-1-5-32-544). Вернулfalse
. - person Rincewind   schedule 02.08.2016