Как узнать SID пользователя, группы или компьютера по имени?
02.12.2021
itpro
Active Directory, PowerShell, Windows 10, Windows Server 2019
комментариев 6
SID (Security IDentifier) – это уникальный идентификатор, который присваивается пользователям, группам, компьютерам или другим объектам безопасности при их создании в Windows или Active Directory. Windows использует SID, а не имя пользователя для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы (NTFS разрешения), принтерам и т.д. В этой статье мы покажем несколько простых способов получить SID пользователя, группы или компьютера, и обратную процедуру – получить объект по известному SID.
Что такое SID объекта в Windows?
Как мы уже сказали, SID (security identifier) позволяет уникально идентифицировать пользовали, группу или компьютер в пределах определенной области (домена или локального компьютера). SID представляет собой строку вида:
S-1-5-21- 2927053466-1818515551-2824591131 — 1103 .
В данном примере:
- 2927053466-1818515551-2824591131 – это уникальный идентификатор домена, выдавшего SID (у всего объекта в одном домене эта часть будет одинакова)
- 1103 – относительный идентификатор безопасности объекта (RID). Начинается с 1000 и увеличивается на 1 для каждого нового объекта. Выдается контроллером домена с FSMO ролью RID Master)
SIDы объектов Active Directory хранятся в базе ntds.dit, а SIDы локальных пользователей и групп в локальной базе диспетчера учетных записей Windows (SAM, Security Account Manager в ветке реестра HKEY_LOCAL_MACHINE\SAM\SAM).
В Windows есть так называемые известные идентификаторы безопасности (Well-known SID). Это SID встроенных (BuiltIn) пользователей и групп, которые есть на любых компьютерах Windows. Например:
- S-1-5-32-544 – встроенная группу Administrators
- S-1-5-32-545 – локальные пользователи
В Windows можно использовать различные средства для преобразования SID -> Name и 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 .
Чтобы вывести список SID всех локальных пользователей Windows, выполните:
wmic useraccount get name,sid.
Если нужно узнать SID текущего пользователя (под которым выполняется команда), используйте такую команду:
wmic useraccount where name=’%username%’ get sid
Можно обратится к WMI напрямую из PowerShell:
(Get-CimInstance -Class win32_userAccount -Filter «name=’test_user’ and domain=’$env:computername'»).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 для получения 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 своей доменной учетной записи командой:

Получить SID пользователя домена Active Directory можно с помощью 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

Если на вашем компьютере не установлен модуль AD для PowerShell, вы можете получить SID пользователя с помощью классов .Net:
$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)

Эта же команда 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): Но ее придется скачивать и устанавливать на каждый компьютер вручную.
Или просто, обрезав последние 4 символа RID и SID любого локального пользователя:
$user=(Get-LocalUser Administrator).sid
$user -replace «.<4>$»

Как узнать имя пользователя или группы по известному SID?
Чтобы узнать имя учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:
wmic useraccount where sid=’S-1-3-12-12452343106-3544442455-30354867-1434′ get name
Для поиска имени доменного пользователя по SID используйте командлеты из модуля RSAT-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

Также можно узнать получить 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
Поиск объектов в 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

В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass=computer).
Как узнать sid пользователя

Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.
Что такое Sid windows
Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:
- Группа безопасности
- Пользователь
- Компьютер
- Организационная единица
- Принтер
SID во время создания объекта, присваивается ему , в домене Active Directory за это отвечает мастер роль RID. В рамках домена, каждый SID должен быть уникален, в отличии от имени, так как Ивановых Иванов Ивановичей, может быть много, а вот отличаться они будут логином и SID. Для операционной системы Windows, важнее сиды объектов, она же их использует и для контроля прав доступа на различные корпоративные ресурсы:
- Папки и файлы
- Принтеры
- Доступ к внешним ресурсам
Структура SID
Давайте разбираться из каких частей состоит Security IDentifier.
Впереди идет версия сида, далее Генеральная область Authority — это ссылка на систему источник, которая его выпустила. В операционных системах Windows версия Security IDentifier сейчас одна и равна она 1, Генеральная область Authority имеет значения 1,3,5, для Microsoft Exchange она 9. Далее в сиде следует 1 или более идентификаторов Sub Authority, а за ними идет RID (Relative IDentificator) локальный для данного Sub Authority номер субъекта безопасности.

По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.

Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.
База Security Account Manager
Давайте посмотрим за, что отвечает Security Account Manager:
- Сопоставление имен с SID и обратно, некий такой DNS для учетных записей
- Проверяет пароли, авторизовывает (принимает участие в процессе входа пользователей в ОС)
- Ведет статистику, кто последний входил, количество входов, кто сколько раз ввел не тот пароль, короче аудит
- Контролирует политика паролей учетных записей, в случае чего может блокировать учетные записи.
- Ведет учет, кто в какие группы входит
- Производит защиты самого себя
- Дает программный интерфейс для управления базой учетных записей
Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.
Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.

SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.

1 способ узнать sid пользователя, команда WMIC
Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду
На выходе вы получите список локальных пользователей.

Чтобы выяснить все логины доменных пользователей вводим команду
Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое

Далее зная логин все просто вводим
Как видите все работает.

Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.
Еще с помощью WMI вы можете реализовать вот, что укажите имя компьютера (для локального) или домена (для доменного пользователя). Ниже пример получения SID локальной рабочей станции
Для доменной структуры

Получить логин по SID аналогично предыдущей команду.
2 способ узнать sid пользователя, команда Whoami
Тоже довольно старенькая команда из cmd.exe. Вводим
Получаем полный сид текущего залогиненного пользователя.

Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920
Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей

Так же вы увидите сведения о привилегиях.

На мой взгляд, данный метод, немного проще первого, так как требует ввода меньшего количества ключей.
3 способ узнать sid пользователя, ADUC и ADSIedit
В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.

После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.

Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.

Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.

4 способ узнать sid пользователя, утилита PsGetSid
Есть такая замечательная утилита от Microsoft од названием PsGetSid.
Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.

смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.
Вводим команду psgetsid имя компьютера\логин учетки
и наоборот, выясним имя по SID:

5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.

Для локального пользователя команда будет такой.

Обратная ситуация получаем по SID имя пользователя
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
получить наоборот логин по sid

Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.

В этом нам поможет скрипт PowerShell. Откройте ISE.
foreach ($line in (Get-Content $users_file))
<
$username = ($Line -split «\\»)[1]
$user = Get-ADUser $username -Server «DC4.root.pyatilistnik.org»
$Result = [ordered]@ <
user = $line
SID = $user.SID
>
New-Object PSObject -Property $Result
>
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.
Как узнать идентификатор безопасности (SID) пользователя в Windows 10

В данной статье рассмотрено несколько способов, с помощью которых можно узнать идентификатор безопасности (SID) пользователя в операционной системе Windows 10.
SID (Security Identifier) — идентификатор безопасности, это уникальный идентификатор (код) который присваивается любой создаваемой доменной или локальной учетным записям, а также группе и другим объектам безопасности.
Операционная система использует именно идентификаторы безопасности (SID) для контроля доступа к различным ресурсам, таким как объекты файловой системы, ключам реестра, сетевым каталогам, что означает, что даже если вы измените имя пользователя, то это не повлияет на какие-либо предварительные настройки для этой учетной записи, поскольку каждая конфигурация привязана к SID, который остается постоянным.
Идентификатор безопасности может быть полезен во время выполнения определенных команд, связанных с безопасностью компьютера.
Как узнать идентификатор безопасности (SID) пользователя в командной строке
Чтобы узнать SID текущего пользователя воспользуемся утилитой whoami, для этого откройте командную строку и выполните следующую команду:

Также узнать SID текущего пользователя можно выполнив следующую команду:
wmic useraccount where name=»%username%» get name,sid

Чтобы узнать все SID присутствующие в операционной системе, выполните команду:

Чтобы узнать SID определённого пользователя, выполните следующую команду:
wmic useraccount where name=»TestUser1″ get sid
Где TestUser1 — имя пользователя, SID которого нужно узнать.

Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду:
wmic useraccount where sid get name

Как узнать идентификатор безопасности (SID) пользователя в Windows PowerSell
Также узнать идентификатор безопасности можно используя консоль Windows PowerShell.
Чтобы узнать все идентификаторы безопасности (SID) в консоли Windows PowerShell, выполните команду:
Get-WmiObject Win32_UserAccount | Select Name,SID

Чтобы узнать SID определённого пользователя, выполните следующую команду:
(gwmi win32_useraccount -Filter «name = \’TestUser1\'»).sid
Где TestUser1 — имя пользователя, SID которого нужно узнать.

Также узнать SID определённого пользователя, можно выполнив команду:
Get-WmiObject -Class Win32_UserAccount -Filter «name=\’TestUser1\'»
Где TestUser1 — имя пользователя, SID которого нужно узнать.

Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду следующего вида:
(gwmi win32_useraccount -Filter «sid = \’SID\'»).name
Где вместо SID укажите нужный идентификатор безопасности.
В данном примере команда выглядит так:
(gwmi win32_useraccount -Filter «sid = \’ S-1-5-21-3210479907-464018182-414762983-1002 \'»).name

Как узнать идентификатор безопасности (SID) в редакторе реестра
Используя редактор реестра, также можно узнать идентификатор безопасности (SID), для этого откройте редактор реестра нажав сочетание клавиш
+ R и в открывшемся окне Выполнить введите regedit и нажмите клавишу Enter ↵.

В открывшемся окне редактора реестра, скопируйте/вставьте или перейдите по следующему пути:
В разделе ProfileList вы увидите всех пользователей и их идентификаторы SID.