2016-08-01 15 views
2

Теперь, прежде чем я начну, я дам вам секрет: это на контроллере домена. *Группа SID для администраторов не отображается в учетной записи участника

* Вышеуказанное заявление пострадавшего из-за ненужности, как единственным существенным изменением, которое происходит в локальной учетной записи администратора и группы Local Administrator (в пределах контекста и рамки данного вопроса) минимальна и не изменяет результат достаточно, чтобы требовать дифференциации.


у меня не было такого рода проблемы на любом из других серверов и я готов ставку, что причина это потому, что он находится на DC. *

* По той же причине, что и указано выше. Принятый ответ объясняет несогласованность и был надзором с моей стороны, а не архитектурой (см. функции) контроллеров безопасности 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 и lo, и вот, reserved на самом деле участник!

Итак, резюме:

  1. Введя net user reserved, я был в состоянии проверить это было частью группы локальных администраторов

  2. Я посмотрел в ADUC и проверены зарезервирован был членом встроенной группы администраторов

  3. Я гарантировал, что зарезервированная действительно была учетной записью локального администратора, подтвердив, что SID началось с S-1-5... и закончилась ...-500

  4. Чтобы сделать шаг дальше, я убедился, что SID соответствовал группы Active Directory с именем «Администраторы», набрав Get-ADGroup -Identity "Administrators". Затем я набрал Get-ADGroupMember -Identity "Administrators" и удостоверился, что был указан reserved (это был И SID соответствовал!).

  5. Когда я проверяю, обнаружен ли в группе этой учетной записи известный идентификатор группы администраторов (путем получения текущей идентификационной информации Windows), он говорит, что это не так.

Что дает?

Почему у меня есть все признаки того, что он фактически является членом группы локальных администраторов, но этот SID не найден в группах учетной записи?

+0

Вы проверили, что значение '[Security.Principal.WindowsIdentity] :: GetCurrent()' и '[Security.Principal.WindowsIdentity] :: GetCurrent(). Группы - это то, что вы думаете? –

+0

@AnsgarWiechers Это то, что происходило, когда я делал '[bool] (([System.Security.Principal.WindowsIdentity] :: GetCurrent()). Группы -match« S-1-5-32-544 »). Это поиск текущего идентификатора Windows (зарезервированный), поиск идентификаторов SID групп и просмотр найденного известного SID для администраторов (S-1-5-32-544). Он возвратил 'false'. – Rincewind

ответ

0

я случайно наткнуться на что-то, и я понял, что ответ на этот вопрос. Ради тех, кто приходит сюда в поисках помощи, вот ответ на мой вопрос:

Очень просто - в отношении Powershell - , если группа администраторов SID (S-1-5-32-544) не отображается в группах пользователя, это указание первой строки, что сценарий не запущен с административными учетными данными.

Например, когда я впечатать:

([Security.Principal.WindowsIdentity]::GetCurrent()).Groups 

, и я не вижу, администратор группы SID в списке , хотя я знаю, за то, что учетная запись я подписал является членом Группа администратора, это означает, что текущий процесс Powershell не имеет административных учетных данных.

Если вы нажмете Run As Administrator и наберете то же, что указано выше, вы увидите, что в нем перечислены идентификатор SID группы администратора в Groups.

Причина, по которой я столкнулся с непоследовательностью, - это просто потому, что я не запускал процесс Powershell в качестве администратора.

Итак, вы можете проверить несколько способов проверить, имеет ли ваш текущий сеанс PowerShell учетные данные администратора.Первый из них можно найти в многочисленных сайтах по всему Интернету и очень часто (я не писать это одно):

$myWindowsID = [Security.Principal.WindowsIdentity]::GetCurrent() 
$myWindowsPrincipal = New-Object Security.Principal.WindowsPrincipal($myWindowsID) 
$adminRole = [Security.Principal.WindowsBuiltInRole]::Administrator 
if($myWindowsPrincipal.IsInRole($adminRole)) { 
    \\ TODO: Process is running as Administrator 
    Clear-Host 
    } else { 
     $newProcess = New-Object System.Diagnostics.ProcessStartInfo "Powershell" 
     $newProcess.Arguments = "& '" + $script:MyInvocation.MyCommand.Path + "'" 
     $newProcess.Verb = "runas" 
     [System.Diagnostics.Process]::Start($newProcess) 
     exit 
     } 

Вот еще один способ (я сделал писать это один):

[Security.Principal.WindowsIdentity]::GetCurrent() | %{ 
    if($_.Groups -contains "S-1-5-32-544") { 
     \\ TODO: Process is running as Administrator 
     Clear-Host 
     } else { 
      Start Powershell -ArgumentList "& '$MyInvocation.MyCommand.Path'" -Verb runas 
      exit 
      } 
     } 

# The Foreach-Object (%) could be replaced with another pipeline filter 

Я вижу много людей, задающих этот вопрос, и из-за того, что Powershell обращается ко многим системным администраторам (особенно к тем, у кого нет фона в программировании), я действительно думаю, что это будет полезно для других людей.

1

Когда компьютер продвигается до контроллера домена, на нем больше нет локальных пользователей или групп. Пользовательские компьютеры имеют локальные пользователи и группы, а также могут использовать пользователей и группы пользователей для аутентификации, но в DC есть только объекты домена.

Смотрите также: https://serverfault.com/a/264327/236470

+0

Данг, избил меня на минуту. –

+0

Правильно, но это не соответствует # 4 в списке. – Rincewind

+0

@ Rincewind, что является основной группой пользователя 'reserved'? – briantist

 Смежные вопросы

  • Нет связанных вопросов^_^