SID (Security IDentifier) – это уникальный идентификатор, который присваивается пользователям, группам, компьютерам и другим объектам безопасности при их создании в Windows, Active Directory или Entra ID (Azure). Windows использует SID, а не имена пользователей/групп для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы (NTFS разрешения), принтерам и т.д. В этой статье рассмотрены простые способы узнать SID пользователя, группы или компьютера по имени, и обратную процедуру – получить имя объекта по известному SID.
Что такое SID объекта в Windows?
SID (security identifier) позволяет уникально идентифицировать пользователя, группу или компьютер в пределах определенной области безопасности (домена AD или локального компьютера). SID представляет собой строку в следующем формате:
S-1-5-21—2927053466-1818515551-2824591131—1103.
В данном примере:
- S – указывает, что данная строка содержит SID.
- 1 – номер версии идентфикатора (всегда 1)
- 5 – идентфикатор полномочий (5 для NT Authority, 12 для Entra ID, 1- группа Everyone)
- 21-2927053466-1818515551-2824591131 – это уникальный идентификатор домена, выдавшего SID (у всех объектов в одном домене эта часть будет одинакова)
- 1103 – относительный идентификатор безопасности объекта (Relative ID, RID). Начинается с 1000 и увеличивается на 1 для каждого нового объекта. Выдается контроллером домена с FSMO ролью RID Master)
SIDы объектов Active Directory хранятся в базе ntds.dit, а SIDы локальных пользователей и групп в локальной базе диспетчера учетных записей Windows (SAM, Security Account Manager в ветке реестра HKEY_LOCAL_MACHINESAMSAM). SID является уникальным значением в пределах среды, в которой он выдан ( SID локального пользователя уникален в пределах компьютера, а SID доменного – в пределах домена).
В Windows есть так называемые стандартных (известные) идентификаторы безопасности (Well-known SID). Это SID встроенных (BuiltIn) пользователей и групп, которые есть на любых компьютерах Windows. Например:
-
S-1-5-32-544– встроенная группу Administrators -
S-1-5-32-545– локальные пользователи -
S-1-5-32-555– группа Remote Desktop Users, которым разрешен вход по RDP -
S-1-5-21-<domain>-500– учетная запись встроенного администратора Windows (администратора домена) -
S-1-5-21-<domain>-513— Domain Users, пользователи домена -
S-1-5-21-<domain>-512— Domain Admins, администраторы домена - И т.д.
В Windows есть несколько средств для преобразования SID в имя объекта или обратно (Username -> SID): утилита whoami , команда wmic , WMI, команды PowerShell и сторонние утилиты.
Как получить SID локального пользователя?
Для получения SIDа локальной учетной записи, можно использовать встроенную утилиту wmic, которая обращается к пространству имен WMI (Windows Management Instrumentation) компьютера.
wmic useraccount where name='test_user' get sid
Команда вернула SID указанного пользователя — S-1-5-21-1175651296-1316126944-203051354-1005 .
Однако, начиная с Windows 11 24H2 и Windows Server 2025, команда wmic по умолчанию не установлена, поэтому вместо нее нужно использовать команды PowerShell.
Получить SID пользователя test_user из пространства имен WMI (в качестве альтернативы команды wmic ):
(Get-CimInstance -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID
Или (проще) узнать SID локального пользователя с помощью встроенного PowerShell модуля управления локальными пользователями и группами (Microsoft.PowerShell.LocalAccounts)
Get-LocalUser -Name 'test_user' | Select-Object Name, SID

Вывести список локальных пользователей Windows и их SID:
Get-LocalUser | Select-Object name,sid

Получить SID текущего пользователя (под которым выполняется команда):
Get-LocalUser -Name $env:USERNAME | Select-Object name,sid
Обратите внимание, что информация о локальных профилях пользователей на компьютере в реестре хранится в ветке ProfileList с SID (вместо имени пользователя). Таким образом, имя пользователя по его SID можно извлечь из реестра:
reg query "HKLMSoftwareMicrosoftWindows NTCurrentVersionProfileListS-1-5-21-3414967564-454070197-2746421142-1006" /v ProfileImagePath

По аналогии можно получить SID локальной группы:
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
В старых версиях Windows можно использовать.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 пользователя или группы в домене Active Directory
Команда для получения SID вашей (текущей) доменной учетной записи:
whoami /user
Также можно посмотреть SID пользователя из графического интерфейса оснастки ADUC (dsa.msc) на вкладке редактора атрибутов в свойствах пользователя (свойство objectSid).

Можно получить SID пользователя домена Active Directory с помощью утилиты WMIC. В этом случае в команде нужно указать имя домена:
wmic useraccount where (name='jjsmith' and domain=′corp.winitpro.ru′) get sid
Однако эта утилита считается устаревшей, поэтому лучше использовать для получения SID доменного пользователя командлету Get-ADUser (из модуля Active Directory Module для 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 компьютера
Если компьютер с Windows добавлен в домен Active Directory, у него будет два разных SID. Первый SID – идентификатор локального компьютера (Machine SID), а второй – уникальный идентификатор компьютера в AD.
SID компьютера в домене Active Directory можно получить с помощью команды:
Get-ADComputer srv-rds1 -properties sid|select name,sid

SID локального компьютера (Machine SID) можно получить с помощью утилиты PsGetsid (https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid):
.PsGetsid64.exe
Или (еще проще), обрезав последние 4 символа RID и SID любого локального пользователя:
$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"

Как узнать имя пользователя или группы по известному SID?
Другая частая ситуация, когда вам нужно узнать имя пользователя или группы по известному SID (обратная процедура). В следующем примере в списке членов группы отображаются SID объектов вместо их имен.

Получить имя пользователя по известному SID можно с помощью одной из следующих команд:
wmic useraccount where sid='S-1-3-12-12452343106-3544442455-30354867-1434' get name
Также можно узнать получить SID группы и пользователя с помощью встроенных классов 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
В домене AD для поиска объектов по известному SID лучше использовать командлет Get-ADObject. Это универсальный метод поиска объектов в Active Directory по SID, когда вы не знаете к какому типу объекта AD относится SID и какой точно командлет нужно использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup):
$sid = 'S-1-5-21-2470146651-3951111111-2989411117-11119501'
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects позволяет искать по удаленным объектам в корзине Active Directory.
В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass=computer).




Добавить комментарий