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

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

psgetsid PC1jjsmith

Отримання облікового запису через SID:

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

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

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

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

wmic useraccount where name="test_user" get sid

Дізнатися SID користувача через WMI

Команда повернула нам 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

користувач whoami отримує

Дізнатися 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

get-aduser виберіть sid

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

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

Get-ADGroup отримати 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 - отримати SID через SecurityIdentifier та NTAccountЦя ж команда 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

Get-ADGroup знайти групу по SID

Також можна дізнатися 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 (параметр IncludeDeletedObjects дозволяє шукати по віддаленим об’єктам AD в кошику).

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

SIDGet-ADObject пошук об'єктів в AD за відомим SID

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

Leave a Reply

Your email address will not be published. Required fields are marked *