SID (보안 식별자 )은 사용자, 그룹, 컴퓨터 또는 기타 보안 개체가 Windows 또는 Active Directory 도메인에서 생성될 때 할당되는 고유 식별자입니다. Windows는 네트워크 공유 폴더, 레지스트리 키, 파일 시스템 개체(NTFS 권한), 프린터 등 다양한 리소스에 대한 액세스를 제어하기 위해 사용자 이름이 아닌 SID를 사용합니다. 이 기사에서는 사용자, 그룹 또는 컴퓨터의 SID 및 역 절차 - 알려진 SID로 개체 이름을 얻는 방법.
SID(Windows 보안 식별자)란 무엇입니까?
앞서 말했듯이 SID(보안 식별자)를 사용하면 특정 범위(도메인 또는 로컬 컴퓨터) 내에서 사용자, 그룹 또는 컴퓨터를 고유하게 식별할 수 있습니다. SID는 다음 형식의 문자열입니다.
S-1-5-21–489056535-1467421822-2524099697–1231
- 489056535-1467421822-2524099697– SID를 발급한 도메인의 고유 식별자입니다(이 부분은 동일한 도메인의 모든 개체에 대해 동일함).
- 1231 – 개체의 상대 보안 식별자(RID)입니다. 1000에서 시작하여 새 개체마다 1씩 증가합니다. FSMO 역할 RID 마스터가 있는 도메인 컨트롤러에서 발급합니다.
Active Directory 개체의 SID는 ntds.dit
에 저장됩니다. 데이터베이스 및 HKEY_LOCAL_MACHINE\SAM\SAM
의 로컬 Windows 보안 계정 관리자(SAM) 데이터베이스에 있는 로컬 사용자 및 그룹의 SID 레지스트리 키.
소위 잘 알려진 SID가 있습니다. 윈도우에서. 이는 모든 Windows 컴퓨터의 기본 제공 사용자 및 그룹에 대한 SID입니다. 예:
S-1-5-32-544
– 기본 제공 관리자 그룹S-1-5-32-545
– 로컬 사용자S-1-5-32-555
– RDP를 통해 로그인할 수 있는 원격 데스크톱 사용자 그룹S-1-5-domainID-500
– 내장 Windows 관리자 계정- 기타
Windows에서는 다양한 도구를 사용하여 SID -> 이름 및 사용자 이름 -> SID:whoami 도구, wmic, WMI 클래스, PowerShell 또는 타사 유틸리티를 변환할 수 있습니다.
로컬 사용자 보안 식별자(SID)를 찾는 방법
로컬 사용자 계정의 SID를 얻으려면 wmic 도구를 사용하여 컴퓨터의 WMI 네임스페이스를 쿼리할 수 있습니다. 로컬 사용자 test_user의 SID를 얻으려면 WMIC 명령을 사용할 수 있습니다.
wmic useraccount where name='test_user' get sid
이 명령은 WMI 리포지토리가 손상된 경우 오류를 반환할 수 있습니다. 이 가이드를 사용하여 WMI 리포지토리를 복구하십시오.
위의 명령은 지정된 로컬 사용자의 SID를 반환했습니다. 이 예에서 – S-1-5-21-1175659216-1321616944-201305354-1005
.
모든 로컬 Windows 사용자의 SID를 나열하려면 다음을 실행하십시오.
wmic useraccount get name,sid
현재 사용자의 SID를 가져와야 하는 경우 다음 명령을 실행합니다.
wmic useraccount where name='%username%' get sid
PowerShell에서 직접 WMI를 쿼리할 수 있습니다.
(Get-WmiObject -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID
Get-CimInstance
를 사용해야 합니다. Get-WmiObject
대신 cmdlet.
그러나 로컬 사용자 및 그룹(Microsoft.PowerShell.LocalAccounts
)을 관리하기 위한 기본 제공 PowerShell 모듈을 사용하여 로컬 사용자의 SID를 얻는 것이 훨씬 더 쉽습니다. ).
Get-LocalUser -Name 'test_user' | Select-Object Name, SID
같은 방법으로 로컬 컴퓨터 그룹의 SID를 얻을 수 있습니다.
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
.NET 클래스 System.Security.Principal.SecurityIdentifier를 사용할 수도 있습니다. 및 System.Security.Principal.NTAccount PowerShell을 통해 사용자의 SID를 얻으려면:
$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Active Directory에서 사용자/그룹 SID를 가져오는 방법
다음 명령을 사용하여 현재 도메인 계정의 SID를 가져올 수 있습니다.
whoami /user
WMIC
를 사용하여 Active Directory 도메인 사용자의 SID를 찾을 수 있습니다. 도구. 다음 명령에서 도메인 이름을 지정해야 합니다.
wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid
AD 도메인 사용자의 SID를 찾으려면 Windows PowerShell용 Active Directory 모듈의 일부인 Get-ADUser cmdlet을 사용할 수 있습니다. jabrams의 SID를 알아봅시다. 도메인 사용자 계정:
Get-ADUser -Identity 'jabrams' | select SID
Get-ADGroup cmdlet을 사용하여 AD 그룹의 SID를 가져올 수 있습니다.
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
PowerShell AD 모듈이 컴퓨터에 설치되어 있지 않은 경우 앞에서 언급한 .Net 클래스를 사용하여 AD 도메인에서 사용자의 SID를 가져올 수 있습니다.
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
동일한 PowerShell 한 줄 명령:
(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])
컴퓨터의 도메인 및 로컬 컴퓨터 SID 확인
Windows 컴퓨터가 Active Directory 도메인에 가입되어 있으면 두 개의 다른 SID를 갖게 됩니다. 첫 번째 SID는 로컬 컴퓨터 식별자(Machine SID)이고 두 번째 SID는 AD의 고유한 컴퓨터 개체 식별자입니다.
다음 명령을 사용하여 Active Directory 도메인에 있는 컴퓨터의 SID를 가져올 수 있습니다.
Get-ADComputer mun-rds1 -properties sid|select name,sid
로컬 컴퓨터의 SID(머신 SID)는 PsGet을 사용하여 얻을 수 있습니다. SID 도구(https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid). 그러나 각 컴퓨터에 수동으로 도구를 다운로드하여 설치해야 합니다.
.\PsGetsid64.exe
또는 로컬 사용자의 SID에서 마지막 4자(RID)를 잘라내기만 하면 됩니다.
$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"
도메인의 각 컴퓨터에는 고유한 로컬(시스템) SID가 있어야 합니다. 컴퓨터 또는 가상 머신을 복제하거나 템플릿에서 생성하는 경우
sysprep
도메인에 가입하기 전에 유틸리티. 이 도구는 로컬 머신 SID를 재설정합니다. 이렇게 하면 일반적인 신뢰 관계 오류를 방지할 수 있습니다. SID를 사용자 또는 그룹 이름으로 변환하는 방법
SID로 사용자 계정의 이름을 찾으려면(역 절차) 다음 명령 중 하나를 사용할 수 있습니다.
wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name
RSAT-AD-PowerShell 모듈을 사용하여 SID로 도메인 사용자 이름을 가져올 수 있습니다.
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
알려진 SID로 도메인 그룹 이름을 찾으려면 다음 명령을 사용하십시오.
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
추가 모듈을 사용하지 않고 기본 제공 PowerShell 클래스를 사용하여 SID로 그룹 또는 사용자 이름을 찾을 수도 있습니다.
$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S S-1-3-12-12451234567-1234567890-1234567-1434")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
PowerShell을 사용하여 SID로 Active Directory 검색
특정 SID가 속한 AD 개체의 유형과 이를 찾는 데 사용해야 하는 정확한 PowerShell cmdlet(Get-AdUser, Get-ADComputer 또는 Get-ADGroup)을 모르는 경우 범용 방법을 사용할 수 있습니다. Get-ADObject를 사용하여 SID로 Active Directory 도메인에서 개체 검색 cmdlet.
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects
매개변수를 사용하면 Active Directory 휴지통에서 삭제된 개체를 검색할 수 있습니다.
우리의 경우 지정된 SID를 가진 AD 개체는 도메인 컴퓨터입니다(objectClass 속성 참조).