2016-08-01 15 views
2

시작하기 전에 비밀로 알려 드리겠습니다. 이것은 도메인 컨트롤러에 있습니다. *Administrators 그룹의 SID가 구성원 계정에 표시되지 않습니다.

* 위의 문은 로컬 관리자 계정과 로컬 관리자 그룹 (이 질문의 컨텍스트와 범위 내에서)에서만 발생하는 유일한 중대한 변경으로 인해 부주의로 인해 치명적이며 변경되지 않습니다 차별화가 필요한 정도의 결과.


나는 다른 서버의 나는 그것이 DC에 있기 때문에 그 뒤에 이유는 내기에 기꺼이 에 문제가 이런 종류의를 가지고 있지 않았다. *

* 상기와 같은 이유. 수락 된 대답은 불일치를 설명하고 Windows 보안 또는 도메인 컨트롤러의 아키텍처 (기능 읽기)가 아니라 내 부분에 대한 감독이었습니다.

저는 로컬 관리자이거나 최소한 자신이 속한 계정에서 호출 한 계정에서 스크립트가 호출되었는지 확인하는 방법에 대해 몇 가지 아이디어를 가지고 놀았습니다. 로컬 관리자 그룹.

내가 로컬 관리자 계정을 이름을 변경 한

그러나, 나는 스크립트가 로컬 관리자 계정에 의해 호출 된 경우 I 입력하여 볼 수 있다는 사실을 알고 :

(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 
0 123,414,나는 심지어 유형 :

PS> net user reserved 

그것은 나를 Local Group Memberships *Administrators을 알려줍니다.

ADUC (dsa.msc)를 당기고 Builtin 컨테이너를보고 관리자 그룹을 두 번 클릭합니다. Members tag와 lo를 선택하고, 보라, reserved가 실제로 회원이다!

그래서, 정리 해보 : 나는 ADUC에 보니 예약 확인하는 일원이었다

    1. net user reserved를 입력하여, 나는 그것이 로컬 관리자 그룹의 일부 확인할 수 있었다 기본 제공 관리자 그룹

    2. 예약 된 SID가인 로컬 계정이 실제로 예약되었습니다.로 끝나고 ...-500

    3. 으로 끝났습니다. 더 나아가서 SID가 Get-ADGroup -Identity "Administrators"을 입력하여 "Administrators"라는 Active Directory 그룹과 일치하는지 확인했습니다. 그런 다음 Get-ADGroupMember -Identity "Administrators"을 입력하고 reserved이 나열되었는지 확인했습니다 (SID가 일치했고 AND!).

    4. 잘 알려진 관리자 그룹 SID가 (현재 Windows ID를 가져옴으로써) 해당 계정 그룹에서 발견되는지 여부를 확인하면 표시되지 않습니다.

    무엇을 제공합니까?

    실제로 로컬 Administrators 그룹의 구성원이지만 계정 그룹에서 SID를 찾을 수 없다는 표시가 나타나는 이유는 무엇입니까?

  • +0

    '[Security.Principal.WindowsIdentity] :: GetCurrent()'와'[Security.Principal.WindowsIdentity] :: GetCurrent(). Groups '의 값이 당신이 생각하는 값인지 확인 했습니까? –

    +0

    @AnsgarWiechers 그것은 [bool] (([System.Security.Principal.WindowsIdentity] :: GetCurrent()). Groups -match "S-1-5-32-544")를 실행했을 때 일어난 일입니다. 현재 Windows ID (예약 됨)를 검색하고 그룹 SID를 찾고 관리자 (S-1-5-32-544)의 잘 알려진 SID가 있는지 확인했습니다. 그것은'false'를 반환했습니다. – Rincewind

    답변

    0

    뭔가 우연히 발견 우연히이 질문에 대한 답을 깨달았다. 도움을 청하는 사람들을 위해 여기에 제 질문에 대한 대답이 있습니다 :

    매우 간단합니다 - Powershell에 관해서는 관리자 그룹 SID (S-1-5-32-544)가 사용자의 그룹에 나타나지 않습니다. 즉 스크립트가 관리 자격 증명으로 실행되고 있지 않음을 나타내는 첫 번째 줄입니다. 예를 들어

    , 내가 밖으로 입력 :

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

    을 내가 관리자 그룹 SID가 나는에 로그인하고있는 계정의 구성원인지 사실 알고에도 불구하고 를 나열하지 않습니다 관리자 그룹은 현재 Powershell 프로세스에 관리 자격 증명이 없음을 의미합니다.

    Run As Administrator을 클릭하고 위와 동일하게 입력하면 Groups에 관리자 그룹 SID가 나열됩니다.

    필자가 불일치를 경험 한 이유는 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 
         } 
    

    다른 방법을 (I 쓰기이 한 짓) :

    [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

    Dang, 1 분만 이길. –

    +0

    그건 맞지만 목록에서 4 번을 차지하지 않습니다. – Rincewind

    +0

    @Rincewind '예약 된'사용자의 기본 그룹은 무엇입니까? – briantist