- How to Convert SID to User/Group Name and User to SID?
- How to Find a Local User SID?
- How to Get SID for an Active Directory User/Group?
- How to Convert a SID to User/Group Name?
- Searching Active Directory by SID
- Как узнать SID пользователя или группы AD по имени и наоборот?
- Как получить SID локального пользователя?
- Узнать SID пользователя или группы в домене AD по имени
- Как узнать имя учетной записи пользователя или группы по SID?
- Поиск объектов в Active Directory по SID
- Sid to name windows
- Сколько у компьютера SID-ов?
- Существует два типа SID у компьютера:
- Нюансы идентификаторов безопасности на рабочих станциях
- Методы определения сида компьютера
How to Convert SID to User/Group Name and User to SID?
In Windows environment, each domain and local user, group and other security objects are assigned a unique identifier — Security Identifier or SID. It is a SID, but not the username, that is used to control access to different resources: network shared folders, registry keys, file system objects, printers, etc. In this article, we’ll show you some simple ways to find the SID of a user or group (Active Directory or local), and the reverse procedure – how to get the name of a Windows user or group by a known SID.
To get username by SID use the command:
In my opinion, the easiest way to convert SID -> Username and Username -> SID is to use the internal Windows CLI tools or simple PowerShell cmdlets:
How to Find a Local User SID?
To get the SID of the local user account on a current computer, you can use the wmic tool, which allows you to query the computer’s WMI namespace. To get the SID of the local user test_user, you can use the WMIC command:
wmic useraccount where name=’test_user’ get sid
The command above returned the SID of the specified local user. In this example – S-1-5-21-1175659216-1321616944-201305354-1005 .
If you need to get the SID of the current user (under which the command is being executed), run the following command:
wmic useraccount where name=’%username%’ get sid
Using the two .NET classes System.Security.Principal.SecurityIdentifier and System.Security.Principal.NTAccount you can get the SID of the local user with PowerShell:
$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
How to Get SID for an Active Directory User/Group?
The following command can be used to get a SID of the current domain account:
You can find out the domain user SID using WMIC tool. You must specify your domain name in the following command:
wmic useraccount where (name=’jjsmith’ and domain=′corp.woshub.com′) get sid
To find the SID of an AD domain user, you can use the Get-ADUser cmdlet that is a part of the Active Directory Module for Windows PowerShell. Get the SID for the jjsmith account:
Get-ADUser -Identity ‘jabrams’ | select SID
You can get the SID of an AD group using the Get-ADGroup cmdlet:
Get-ADGroup -Filter
If the PowerShell AD module is not installed on your computer, you can get the user’s SID from AD domain using the .Net classes mentioned earlier:
$objUser = New-Object System.Security.Principal.NTAccount(«corp.woshub.com»,»jabrams»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
The same PowerShell one-liner command:
(new-object security.principal.ntaccount “jabrams»).translate([security.principal.securityidentifier])
How to Convert a SID to User/Group Name?
To get the name of the user account by the SID (a reverse procedure), you can use one of the following commands:
wmic useraccount where sid=’S-1-3-12-12451234567-1234567890-1234567-1434′ get name
You can get the user name by a SID using the AD module for PowerShell:
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
To find the domain group name by a known SID, use the command:
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
You can also find out the group or user name by SID with the built-in PowerShell classes (without additional modules):
$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
Searching Active Directory by SID
If you don’t know what type of AD object a certain SID belongs to and what exact PoSh cmdlet to use to find it (Get-AdUser, Get-ADComputer or Get-ADGroup), you can use the universal method of searching objects in Active Directory domain by a SID using the Get-ADObject cmdlet.
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter «objectSid -eq ‘$sid'» | Select-Object name, objectClass
In our case, the AD object with the specified SID is a domain computer (see the objectClass attribute).
Как узнать SID пользователя или группы AD по имени и наоборот?
В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы, принтерам и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя или группы (локальных или из Active Directory), и обратную процедуру – определение имени пользователя или группы Windows по известному SID.
Получение учетки по SID:
На мой взгляд, проще всего для преобразования SID -> Username и Username -> SID проще всего воспользоваться командами командной строки или несложными командлетами PowerShell:
Как получить 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 текущей доменной учетной записи командой:
Узнать 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
Если на вашем компьютере не установлен модуль 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 (параметр IncludeDeletedObjects позволяет искать по удаленным объектам AD в корзине).
$sid = ‘S-1-5-21-2470146651-3951111111-2989411117-11119501’
Get-ADObject –IncludeDeletedObjects -Filter «objectSid -eq ‘$sid'» | Select-Object name, objectClass
SID
В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass).
Sid to name windows
Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами установили домен Active Directory на Windows Server 2019. Одним из краеугольных понятий в AD является идентификатор безопасности компьютера SID, о нем и пойдет речь. Мы разберем, какие они бывают у сервера и рабочей станции, а так же научимся определять SID компьютера, буквально за минуту.
Сколько у компьютера SID-ов?
О том, что такое SID у пользователя, я уже рассказывал. SID — это уникальное имя (буквенно-цифровая символьная строка), которое используется для идентификации объекта, такого как пользователь или компьютер в сети систем NT. Windows предоставляет или запрещает доступ и права доступа к ресурсам на основе ACL, которые используют SID для уникальной идентификации компьютеров и их членства в группах. Когда компьютер запрашивает доступ к ресурсу, его ACL проверяет SID компьютера, чтобы определить, разрешено ли этому компьютеру выполнять это действие или нет. Схематично выглядит вот так.
Существует два типа SID у компьютера:
- Первый тип, это когда рабочая станция или сервер не являются членом домена Active Directory
- Второй тип, это когда компьютер входит в домен Active Directory
В обоих случаях у вас будет два абсолютно разных SID. Первый дескриптор безопасности у вас генерируется при установке системы, второй если вы вводите его в домен AD. И так, у меня есть тестовый домен root.pyatilistnik.org. Есть клиентская станция с Windows 10 1803. Для того, чтобы вам показать разницу и оба SID идентификатора на моей тестовой Windows 10, мы воспользуемся утилитой Марка Русиновича PsGetSid из инструментария Sysinternals (Скачать PsGetSid можно по ссылке https://docs.microsoft.com/en-us/sysinternals/downloads/psgetsid). Распаковываете архив с утилитой, открываете командную строку от имени администратора и переходите с помощью cd в каталог с утилитой PsGetSid.
Первым делом я выведу имя компьютера, через команду hostname. В моем примере, это W10-CL01.
Далее я выведу локальный SID компьютера, через утилиту PsGetSid:
В итоге я получил SID for W10-CL01\w10-cl01:S-1-5-21-7706586-876249769-275126362. Обратите внимание, что перед идентификатором безопасности идет имя компьютера, это сразу говорит, что он локальный.
И команда указанная выше, показывает вам доменный SID рабочей станции. SID for ROOT\w10-cl01$:S-1-5-21-233550040-578987154-4094747311-1602. Обратите внимание, что перед идентификаторам идет имя домена ROOT\.
Нюансы идентификаторов безопасности на рабочих станциях
Некоторое время назад, Марк Руссинович, очень известный человек в мире Microsoft, написал замечательную статью, про мифы дублирования SID, где показал на практике свои мысли, но после прочтения статьи у некоторых людей оставалась в голове путаница или вопросы, \ бы хотел немного уточнить по статье (Ссылка на нее https://blogs.technet.microsoft.com/mark_russinovich/2009/11/15/sid/).
Предположим, что вы клонируете нужную вам виртуальную машину или хост. Если вы не обезличиваете систему, с помощью Sysprep, то у вас все полученные клоны систем, будут иметь один локальный SID компьютера. Если мы говорим про окружение в виде рабочей группы в локальной сети, то ни каких проблем с доступом или конфликтом с доступом к ресурсам вы не увидите. Но вот в случае с доменным SID, такое не получится, он должен быть уникальным в пределах Active Directory, в противном случае, у вас будут конфликты между двумя объектами. Убедитесь, что после клонирования и обезличивания у вас разные SID, полученные от мастера RID.
Например, если вы попытаетесь восстановить безопасный канал между контроллером домена и клонированной машиной у которой дублирующий идентификатор безопасности, то она в домен попадет, но выкинет из него первую рабочую станцию и еще кучу различного и разного, глючного поведения.
Методы определения сида компьютера
- Первый метод я вам уже показал. он заключается в использовании утилиты PsGetSid
- Второй метод, это использование командной строки, с помощью утилиты dsquery. Получать мы таким методом будем доменный SID у сервера или рабочей станции:
dsquery computer — name «Имя компьютер» | dsget computer — SID
Хочу отметить, что данную команду вы должны выполнять либо на контроллере домена или же на рабочей станции, где установлены консоли администрирования и утилиты из пакета RSAT.
- Через скриптик VBS. Вы копируете код представленный ниже или скачиваете уже готовый файл у меня, только лишь потом отредактировав его и изменив имя на свое. После чего у вас будет запрошен локальный SID компьютера. Напоминаю, что у всех встроенных групп или учетных записей, начало их идентификатора безопасности состоит из полного SID компьютера с добавлением своего дополнительного номера.
- Куда же без PowerShell в нем можно делать, что угодно. Вот пример кода дающего локальный идентификатор безопасности у рабочей станции:
тут так же будет запрошен SID учетной записи «Администратор». Если компьютер доменный, то нам поможет командлет Get-ADComputer. Запускаем оснастку PowerShell и вводим команду:
Get-ADComputer W10-CL01 -prop sid
Как видите методов очень много. Видел я метод и получения сида из реестра Windows, в ветке