Як дізнатися SID користувача або групи AD по імені і навпаки?

У середовищі Windows кожному доменному і локальному користувачеві, групі та іншим об'єктам безпеки, присвоюється унікальний ідентифікатор - Security Identifier або SID. Саме SID, а не ім'я користувача використовується для контролю доступу до різних ресурсів: мережних папок, ключів реєстру, об'єктам файлової системи, принтерів і т.д. У цій статті ми покажемо кілька простих способів дізнатися SID користувача або групи (локальних або з Active Directory), і зворотну процедуру - Вкажіть користувача або групи Windows за відомим SID.

Для перетворення username в SID можна скористатися відмінностей утилітою з комплекту Sysinternals - PsGetSid. Але її доведеться завантажувати і встановлювати на кожен комп'ютер вручну. Приклад використання PsGetSID для SID користувача на ім'я облікового запису:

psgetsid PC1 \ jjsmith

Отримання учеткі по SID:

psgetsid S-1-5-21-1175651296-1316133944-203321314-1005

На мій погляд, найпростіше для перетворення SID -> Username і Username -> SID найпростіше скористатися командами командного рядка або нескладними Командлети PowerShell:

зміст:

  • Як отримати SID локального користувача?
  • Дізнатися SID користувача або групи в домені AD по імені
  • Як дізнатися ім'я облікового запису користувача або групи по SID?
  • Пошук об'єктів в Active Directory за SID

Як отримати SID локального користувача?

Щоб отримати SID локального облікового запису на даному комп'ютері, можна скористатися утилітою wmic, яка дозволяє звернеться до простору імен WMI комп'ютера. Для отримання SID локального користувача test_user можна використовувати утиліту WMIC:

wmic useraccount where name = "test_user" get sid

Команда повернула нам SID зазначеного користувача - S-1-5-21-1175651296-1316126944-203051354-1005.

Якщо потрібно дізнатися SID поточного користувача (під яким виконується команда), використовуйте таку команду:

wmic useraccount where name = "% username%" get sid

За допомогою двох .NET класів System.Security.Principal.SecurityIdentifier і System.Security.Principal.NTAccount ви можете отримати SID користувача за допомогою PowerShell:

$ ObjUser = New-Object System.Security.Principal.NTAccount ( "LOCAL_USER_NAME")
$ StrSID = $ objUser.Translate ([System.Security.Principal.SecurityIdentifier])
$ strSID.Value

Дізнатися SID користувача або групи в домені AD по імені

Ви можете дізнатися SID поточної доменної облікового запису командою:

whoami / user

Дізнатися SID доменного користувача можна за допомогою WMIC. В цьому випадку в команді потрібно вказати ім'я домену:

wmic useraccount where (name = 'jjsmith' and domain = "corp.winitpro.ru") get sid

Для отримання SID доменного користувача можна скористатися Командлети Get-ADUser, що входить до складу модуля Active Directory Module для Windows PowerShell. Отримаємо SID для облікового запису jjsmith:

Get-ADUser -Identity 'jjsmith' | select SID

Ви можете отримати SID групи AD за допомогою іншого командлета - Get-ADGroup:

Get-ADGroup -Filter Name -like "msk-admin *" | Select SID

Якщо на вашому комп'ютері не встановлено модуль AD для PowerShell, ви можете отримати SID користувача за допомогою згаданих раніше класів .Net:

$ ObjUser = New-Object System.Security.Principal.NTAccount ( "corp.wintpro.ru", "jjsmith")
$ StrSID = $ objUser.Translate ([System.Security.Principal.SecurityIdentifier])
$ strSID.Value

Ця ж команда PowerShell в один рядок:

(New-object security.principal.ntaccount "jjsmith"). Translate ([security.principal.securityidentifier])

Як дізнатися ім'я облікового запису користувача або групи по SID?

Щоб дізнатися ім'я облікового запису користувача з SID (зворотна процедура), можна скористатися однією з наступних команд:

wmic useraccount where sid = "S-1-3-12-12452343106-3544442455-30354867-1434" get name

На PowerShell отримати ім'я користувача за його SID можна за допомогою модуля AD для PowerShell:

Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Щоб знайти ім'я доменної групи по відомому SID використовуйте команду:

Get-ADGroup -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Також можна дізнатися SD групу і користувача за допомогою вбудованих класів PowerShell (без додаткових модулів):

$ ObjSID = New-Object System.Security.Principal.SecurityIdentifier ( "S-1-5-21-2470456651-3958312488-29145117-23345716")
$ ObjUser = $ objSID.Translate ([System.Security.Principal.NTAccount])
$ objUser.Value

Пошук об'єктів в Active Directory за SID

Якщо ви не знаєте до якого типу об'єкта AD відноситься якийсь SID і який точно командлет використовувати для його пошуку (Get-AdUser, Get-ADComputer або Get-ADGroup), ви можете використовувати універсальний метод пошуку об'єктів в Active Directory за SID за допомогою командлета Get -ADObject.

$ Sid = 'S-1-5-21-2470146651-3951111111-2989411117-11119501'
Get-ADObject -IncludeDeletedObjects -Filter "objectSid -eq '$ sid'" | Select-Object name, objectClass

SID

У нашому випадку об'єкт AD, який має даний SID, є комп'ютером (objectClass).