SID (Security IDentifier) – это уникальный идентификатор, который присваивается пользователям, группам, компьютерам или другим объектам безопасности при их создании в Windows или Active Directory. Windows использует SID, а не имя пользователя для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы (NTFS разрешения), принтерам и т.д. В этой статье мы покажем несколько простых способов получить SID пользователя, группы или компьютера, и обратную процедуру – получить объект по известному SID.
Содержание:
- Что такое SID объекта в Windows?
- Как получить SID локального пользователя?
- Узнать SID пользователя или группы в домене Active Directory
- Получить SID компьютера
- Как узнать имя пользователя или группы по известному SID?
- Поиск объектов в Active Directory по 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_MACHINESAMSAM).
В 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-domainID-500
– учетная запись встроенного администратора Windows - И т.д.
В Windows можно использовать различные средства для преобразования SID -> Name и Username -> SID: утилиту whoami, wmic, WMI, классы PowerShell или сторонние утилиты.
Как получить SID локального пользователя?
Чтобы получить SID локальной учетной записи, можно воспользоваться утилитой wmic, которая позволяет обратится к пространству имен WMI (Windows Management Instrumentation) компьютера.
wmic useraccount where name='test_user' get sid
Команда может вернуть ошибку, если репозиторий WMI поврежден. Воспользуйтесь этой инструкцией для восстановления WMI репозитория.
Команда вернула 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
В новых версиях PowerShell Core 7.x вместо команды Get-WmiObject нужно использовать Get-CimInstance.
Но еще проще получить SID локального пользователя с помощью встроенного PowerShell модуля управления локальными пользователями и группами (Microsoft.PowerShell.LocalAccounts).
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 своей доменной учетной записи командой:
whoami /user
Получить 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 {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. Если вы клонируете компьютеры или виртуальные машины, или создаете их из одного шаблона, то перед тем как добавить их в домен нужно выполнить команду sysprep. Эта утилита сбрасывает локальный Machine SID. Это избавит вас от частых ошибок “Не удалось восстановить доверительные отношения между рабочей станцией и доменом”.
Как узнать имя пользователя или группы по известному 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).
Операционная система Windows для идентификации использует специальный идентификатор безопасности (Security Identifier, SID), который присваивается каждой учетной записи пользователя (а также компьютера или группы) при ее создании. В отличие от имени каждый SID уникален, что позволяет системе однозначно идентифицировать пользователя. Поэтому операционная система оперирует именно SID-ами и использует их для контроля доступа к различным ресурсам — принтерам, файлам и папкам и т.п.
Примечание. Говоря об уникальности SID, надо сделать одну оговорку. В Windows существуют так называемые встроенные (BuiltIn) учетные записи, такие как Administrator или Guest. SID-ы этих записей одинаковы в каждом экземпляре Windows вне зависимости от версии ОС. Это дает администратору возможность более-менее централизованно управлять доступом при отсутствии доменной структуры.
SID для локальных учетных записей храниться базе данных диспетчера учетных записей (Security Account Manager, SAM) на локальном компьютере, для доменных — в базе Active Directory. И сегодня речь пойдет о том, как можно узнать SID пользователя по его имени и наоборот, как выяснить имя пользователя по его SID.
Whoami
Когда требуется посмотреть SID текущего пользователя, то проще всего воспользоваться утилитой whoami. Для этого надо открыть консоль cmd и выполнить команду:
whoami /user
WMIC
В том случае, когда необходимо узнать SID произвольного пользователя, можно воспользоваться Windows Management Instrumentation (WMI). Один из инструментов для работы с WMI — утилита WMIC. Так например, узнать SID пользователя Kirill можно такой командой:
wmic useraccount where name=′Kirill′ get sid
А можно и наоборот, выяснить имя пользователя по его SID:
wmic useraccount where sid=′S-1-5-21-4178654016-3479515840-607560339-1000′ get name
Дополнительно в WMI-запросе можно указать имя компьютера (для локального) или домена (для доменного пользователя). Например эта команда выведет SID локального администратора:
wmic useraccount where (name=′administrator′ and domain=′%computername%′) get sid
а эта — доменного:
wmic useraccount where (name=′administrator′ and domain=′contoso′) get sid
Для обычного пользователя все также, узнаем SID по имени:
wmic useraccount where (name=′kirill′ and domain=′contoso′) get sid
и имя по SID:
wmic useraccount where (sid=′S-1-5-21-2404695605-4156858507-746700462-1001′ and domain=′contoso′) get name
Примечание. В запросе вместо имени компьютерадомена можно использовать переменные %computername% и %userdomain%.
PowerShell и WMI
PowerShell также позволяет работать с WMI. Для примера обратимся к классу win32_userAccount и выведем SID доменного:
([wmi]″win32_userAccount.Domain=′contoso′, Name=′Kirill′″).sid
и локального пользователя:
([wmi]″win32_userAccount.Domain=′wks1′, Name=′Petya′″).sid
Также вместо имени компьютера и домена можно указывать переменные окружения $env:computername и $env:userdomain, например:
([wmi]″win32_userAccount.Domain=$env:computername, Name=′Petya′″).sid
Для обратной операции (узнать имя пользователя по SID) нам потребуется использовать свойство SID класса win32_SID. Например:
[wmi]″win32_SID.SID=′S-1-5-21-4178654016-3479515840-607560339-1002′″).AccountName
Как вариант, для работы с WMI можно использовать командлет Get-WmiObject (или Get-CimInstance). Например так мы узнаем SID пользователя:
(Get-WmiObject -Class win32_userAccount -Filter ″name=′Kirill′ and domain=′Contoso′″).SID
а так его имя:
(Get-WmiObject -Class win32_userAccount -Filter ″SID=′S-1-5-21-2404695905-416858507-746700462-1001′″).Name
PowerShell и .NET
Также узнать SID пользователя можно с помощью .NET класса System.Security.Principal.NTAccount. Этот класс используется для представления пользователя или группы. Для получения SID локального пользователя надо создать новый объект этого класса и передать ему в виде параметра имя пользователя, а затем с помощью метода Translate перевести объект пользователя в объект класса System.Security.Principal.SecurityIdentifier, который предназначен для представления SID пользователя или группы:
$User = New-Object System.Security.Principal.NTAccount(″Kirill″)
$SID = $User.Translate([System.Security.Principal.SecurityIdentifier])
$SID.Value
Для доменного пользователя процедура идентична, только в виде параметра передаются имя пользователя и имя домена:
$User = New-Object System.Security.Principal.NTAccount(″Contoso″,″Kirill″)
$SID = $User.Translate([System.Security.Principal.SecurityIdentifier])
$SID.Value
Для обратной процедуры получения имени по SID делаем наоборот — сначала создаем объект класса System.Security.Principal.SecurityIdentifier и передаем ему в виде параметра SID пользователя, а затем переводим его в объект класса System.Security.Principal.NTAccount и выводим свойство Value, содержащее имя пользователя:
$SID = New-Object System.Security.Principal.NTAccount(″S-1-5-21-4178654016-3479515840-607560339-1000″)
$User = $SID.Translate([System.Security.Principal.NTAccount])
$User.Value
PsGetSid
Как видите, встроенных средств для выяснения SID в Windows предостаточно, но для полноты картины возьмем еще одно, от стороннего разработчика.
PsGetSid — утилита командной строки от Sysinternals, входящая в состав пакета PsTools. PsGetSid умеет получать SID пользователя по его имени и наоборот, работает как с локальными, так и с доменными аккаунтами. Утилита не требует установки, ее достаточно скопировать на нужный компьютер и запустить.
Для примера запросим SID пользователя по его имени:
psgetsid wks10Kirill
и наоборот, выясним имя по SID:
psgetsid S-1-5-21-438167859-634674341-1098546566-1001
Обновлено 10.03.2021
Добрый день уважаемые читатели, сегодня мы продолжим изучение 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, я уже описывал не однократно, переходим в ветку.
HKEY_LOCAL_MACHINESAMSAM
Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.
SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.
1 способ узнать sid пользователя, команда WMIC
Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду
На выходе вы получите список локальных пользователей.
Чтобы выяснить все логины доменных пользователей вводим команду
Net user «пользователи домена» /domain
Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое
Далее зная логин все просто вводим
wmic useraccount where name=»admdc» get sid
Как видите все работает.
Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.
wmic useraccount where sid=»S-1-5-21-2071342971-2054724104-2057240633-1001″ get name
Еще с помощью WMI вы можете реализовать вот, что укажите имя компьютера (для локального) или домена (для доменного пользователя). Ниже пример получения SID локальной рабочей станции
wmic useraccount where (name=»Администратор» and domain=»%computername%») get sid
Для доменной структуры
wmic useraccount where (name=»Администратор» and domain=»aetp») get sid
Получить логин по SID аналогично предыдущей команду.
wmic useraccount where (sid=»S-1-5-21-613421863-3366779934-4260147692-500″ and domain=»aetp») get name
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 можно по ссылке https://technet.microsoft.com/en-us/sysinternals/bb897417.aspx
Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.
смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.
Вводим команду psgetsid имя компьютералогин учетки
psgetsid adm999admdc
и наоборот, выясним имя по SID:
psgetsid S-1-5-21-613421863-3366779934-4260147692-1312
5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.
$objUser = New-Object System.Security.Principal.NTAccount(«домен», «логин учетки»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Для локального пользователя команда будет такой.
$objUser = New-Object System.Security.Principal.NTAccount(«логин»)
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Обратная ситуация получаем по SID имя пользователя
$objSID = New-Object System.Security.Principal.SecurityIdentifier («S-1-5-21-613421863-3366779934-4260147692-1312»)
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
Get-ADUser -Identity ‘логин’ | select SID
получить наоборот логин по sid
Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.
В этом нам поможет скрипт PowerShell. Откройте ISE.
$users_file = «C:scriptsusers.txt»
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
}
$Result
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.
На этом у меня все с вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.
В процессе работы с учётными записями пользователям Windows гораздо удобнее иметь дело с осмысленными именами, компьютеры же, привыкшие «мыслить» на языке цифр вместо имён учётных записей оперируют их SID — уникальными идентификаторами безопасности. В Windows SID могут иметь не только пользователи, свои идентификаторы присваиваются группам, доменам, различным системным объектам и т.д.
При выполнении некоторых трюков и тонких настроек вам может понадобиться этот самый SID. Покопавшись в системном реестре, его можно извлечь оттуда вручную, но есть и более простой способ. Если у вас на компьютере завалялся пакет Sysinternals Suite, можете воспользоваться входящей в его состав утилитой PsGetSid, она то как раз и нужна, чтобы вытаскивать SID из системы. А можно извлечь SID и безо всяких сторонних средств. Для этого в Windows есть командная строка CMD и консоль PowerShell.
Чтобы получить SID текущего пользователя, выполните в запущенной от имени администратора командной строке такую команду:
wmic useraccount where name='%username%' get sid
Этой же командой можно извлечь SID любого локального пользователя, подставив на место переменной %username% его имя.
Аналогичный результат можно получить с помощью консоли PowerShell, только на этот раз придётся выполнить целых три команды, заменив предварительно USERNAME именем реального пользователя. Вот так:
$objUser = New-Object System.Security.Principal.NTAccount("USERNAME") $strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier]) $strSID.Valueимя
Точно также просто можно узнать идентификатор безопасности текущего доменного пользователя. В командной строке он извлекается командой whoami /user
А вот как быть, если вам нужно проделать всё наоборот, то есть по имеющемуся SID узнать имя пользователя? И тут всё очень просто. Для этого в запущенной с повышенными привилегиями командной строке выполняем команду wmic useraccount where sid=’S-XXXXXXXXX’ get name, где S-XXXXXXXXX — известный вам идентификатор.
Загрузка…
Вы наверняка пытались управлять разрешениями определенных файлов, папок или часто просматриваете реестр Windows, то может показаться, что вы видели некоторые строковые значения типа S-1-5-21-281723897-98365329832-7382047462- 600. Эти значения известны как идентификаторы безопасности или SID. Давайте разберем, что такое SID пользователя в Windows 10 и какие способы его узнать.
Что такое SID пользователя в Windows?
Идентификатор безопасности или SID пользователя в Windows 10 является единственным значащим значением, которое служит для идентификации принципа безопасности или группы безопасности в Windows. Поэтому можно сказать, что SID пользователя в Windows 10 похож на паспорт, который присваивается каждому компьютеру во время установки операционной системы. Кроме того, этот идентификатор может быть полезен во время выполнения определенных команд, связанных с безопасностью нашего компьютера, поэтому давайте разберем, как узнать SID пользователя в Windows 10.
Как узнать SID пользователя в Windows с помощью cmd
Одним из самых быстрых способов узнать идентификатор пользователя SID в Windows 10, — это воспользоваться командной строкой. Откройте командную строку и введите ниже команды, которые соответствуют вашим требованиям.
- Имя SID используемое в настоящее время: введите команду
whoami /user
и нажмите Enter. - Имя SID определенного пользователя: введите в командую строку
wmic useraccount where name="хомячок" get name,sid
. Где «хомячок» — это фактическое имя пользователя. - Все SID пользователей в Windows: введите
wmic useraccount get name,sid
.
Узнать идентификатор SID пользователя в Windows через реестр
- Нажмите Win + R и введите в диалоговое окно regedit, затем нажмите Enter.
- В реестре скопируйте/вставьте или перейдите по пути
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
. - Ниже значения ProfileList, Вы увидите всех пользователей и их идентификаторы SID.
Смотрите еще:
- Служба профилей пользователей не удалось войти в систему windows 10
- Как создать локальную учетную запись Пользователя В Windows 10
- Как включить или отключить учетную запись пользователя в Windows 10
- Как переименовать локальную учетную запись пользователя в Windows 10
- Изменить пароль пользователя Windows с помощью командной строки
[ Telegram | Поддержать ]
Если заголовок поста сразу вселил недоумение в вашу голову, его можно смело пропускать — так как тема весьма специфичная. Для оставшихся любопытствующих, чуть позже дам краткую справку, чтобы стало понятнее, но для начала расскажу что же меня сподвигло всё это написать.
Сюжет, наверное, знаком многим админам… в какой-то момент тебе говорят что на сервере пропала какая-то папка, а возможно и не одна, причем пропала сама собой, никто не трогал. В чудесные исчезновения я давно не верю, и начинаются поиски пропажи. Алгоритм уже отработан — для начала смотрим на наличие скрытых файлов в каталоге, где жила потеряшка, проходим там прогой R-Studio и если ничего не находится, то скорее всего и не удалялось, а просто перемещено… и возможно в корзину. Круг подозреваемых обычно ограничен, но иногда быстрее в мусорках пользователей порыться тем же Total Commander, включив отображение системных файлов. Корзины пользователей имеют уникальный идентификатор и лежат в общем каталоге $RECYCLE.BIN на дисках. Вот мы и подобрались к главной теме…
Итак, в Windows, любой учетной записи пользователя присваивается уникальный идентификатор безопасности SID (Security Identifier). По сути, операционная система оперирует именно SID-ами, а не именами пользователей. Если вы когда-либо назначали права доступа к папкам или файлам разным пользователям, а потом какого-то пользователя удаляли из системы, то могли видеть оставшиеся SID в свойства ресурса.
Стоит заметить, что, на самом деле, не все SID уникальны, и у встроенных учетных записей (Администратор, Гость), они постоянны. SID-ы локальных учёток хранятся в базе данных диспетчера учетных записей SAM (Security Account Manager), для доменных, соответсвенно в Active Directory.
Как узнать SID пользователя или по известному SID определить его имя?
Есть несколько способов это сделать. Проще всего посмотреть SID текущего пользователя с помощью утилиты whoami. Для этого в консоли cmd и выполним команду:
whoami /user
Сведения о пользователе ---------------- Пользователь SID ================= =========================================== srvадминистратор S-1-5-21-1717474732-638561625-496602587-500
Как видите, я выполнил вход под админом, но это не интересно. Гораздо полезнее узнать SID произвольного пользователя. Для этого воспользуемся утилитой WMIC из Windows Management Instrumentation (WMI).
Посмотрим SID пользователя Kirill можно такой командой:
wmic useraccount where name='test_user' get sid
SID S-1-5-21-1717474732-638561625-496602587-1004
Определение имени пользователя по SID (обратная процедура) будет выглядеть так:
wmic useraccount where sid='S-1-5-21-1717474732-638561625-496602587-1004' get name
Аналогичные действия можно проводить и на PowerShell, но я в нём не силён, инфа есть в сети, кто заинтересовался данной темой почитает, для моей задачи было достаточно и этого. Как и предполагалось, потерянная папка нашлась у одного из пользователей в корзине.
Подписывайтесь на канал
Яндекс.Дзен
и узнавайте первыми о новых материалах, опубликованных на сайте.
Содержание
- Как узнать SID пользователя по имени и наоборот
- Получить SID локального пользователя
- Получить SID доменного пользователя
- Определить имя пользователя по SID
- Как узнать uid пользователя windows
- Что такое Sid windows
- База Security Account Manager
- 1 способ узнать sid пользователя, команда WMIC
- 2 способ узнать sid пользователя, команда Whoami
- 3 способ узнать sid пользователя, ADUC и ADSIedit
- 4 способ узнать sid пользователя, утилита PsGetSid
- 5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
- 6 способ узнать sid пользователя, Get-ADUser
- Как массово определить SID пользователя
- Как узнать идентификатор безопасности (SID) пользователя в Windows 10
- Как узнать идентификатор безопасности (SID) пользователя в командной строке
- Как узнать идентификатор безопасности (SID) пользователя в Windows PowerSell
- Как узнать идентификатор безопасности (SID) в редакторе реестра
- Как узнать SID пользователя
- Whoami
- PowerShell и WMI
- PsGetSid
- Как узнать SID пользователя или группы AD по имени и наоборот?
- Как получить SID локального пользователя?
- Узнать SID пользователя или группы в домене AD по имени
- Как узнать имя учетной записи пользователя или группы по SID?
- Поиск объектов в Active Directory по SID
Как узнать SID пользователя по имени и наоборот
В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым каталогам, ключам реестра, объектам файловой системы и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя и обратной процедуры – определения имени пользователя Windows по его SID.
Для преобразования username в SID можно воспользоваться отличий утилитой из комплекта Sysinternals — PsGetSid. Но ее придется выкачивать и устанавливать на каждую систему вручную.
Гораздо проще воспользоваться утилитой командной строки или скриптом Powershell
Получить SID локального пользователя
Чтобы получить SID локальной учетной записи на данной машине, можно воспользоваться утилитой wmic, обращающейся к WMI хранилищу. Для локального пользователя test_user команда будет такой:
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
На PowerShell скрипт, выдающий тот же результат можно реализовать с помощью двух классов SecurityIdentifier и NTAccount.
Получить SID доменного пользователя
Узнать SID текущей доменной учетной записи можно командой:
Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell.
Если модуль AD для PowerShell отсутствует, через 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 при помощи модуля AD для Powershell:
Попробуйте наши услуги обслуживания и получите третий месяц обслуживания в подарок!
Источник
Как узнать uid пользователя windows
Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.
Что такое Sid windows
Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:
Структура SID
Давайте разбираться из каких частей состоит Security IDentifier.
По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.
Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.
База Security Account Manager
Давайте посмотрим за, что отвечает Security Account Manager:
Хранится 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.
Для локального пользователя команда будет такой.
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
получить наоборот логин по sid
Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.
В этом нам поможет скрипт PowerShell. Откройте ISE.
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.
Источник
Как узнать идентификатор безопасности (SID) пользователя в Windows 10
В данной статье рассмотрено несколько способов, с помощью которых можно узнать идентификатор безопасности (SID) пользователя в операционной системе Windows 10.
Операционная система использует именно идентификаторы безопасности (SID) для контроля доступа к различным ресурсам, таким как объекты файловой системы, ключам реестра, сетевым каталогам, что означает, что даже если вы измените имя пользователя, то это не повлияет на какие-либо предварительные настройки для этой учетной записи, поскольку каждая конфигурация привязана к SID, который остается постоянным.
Идентификатор безопасности может быть полезен во время выполнения определенных команд, связанных с безопасностью компьютера.
Как узнать идентификатор безопасности (SID) пользователя в командной строке
Чтобы узнать SID текущего пользователя воспользуемся утилитой whoami, для этого откройте командную строку и выполните следующую команду:
Также узнать SID текущего пользователя можно выполнив следующую команду:
wmic useraccount where name=»%username%» get name,sid
Чтобы узнать все SID присутствующие в операционной системе, выполните команду:
Чтобы узнать SID определённого пользователя, выполните следующую команду:
wmic useraccount where name=»TestUser1″ get sid
Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду:
wmic useraccount where sid=» S-1-5-21-3210479907-464018182-414762983-1002 » get name
Как узнать идентификатор безопасности (SID) пользователя в Windows PowerSell
Также узнать идентификатор безопасности можно используя консоль Windows PowerShell.
Чтобы узнать все идентификаторы безопасности (SID) в консоли Windows PowerShell, выполните команду:
Get-WmiObject Win32_UserAccount | Select Name,SID
Чтобы узнать SID определённого пользователя, выполните следующую команду:
Также узнать SID определённого пользователя, можно выполнив команду:
Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду следующего вида:
Где вместо SID укажите нужный идентификатор безопасности.
В данном примере команда выглядит так:
Как узнать идентификатор безопасности (SID) в редакторе реестра
Используя редактор реестра, также можно узнать идентификатор безопасности (SID), для этого откройте редактор реестра нажав сочетание клавиш + R и в открывшемся окне Выполнить введите regedit и нажмите клавишу Enter ↵.
В открывшемся окне редактора реестра, скопируйте/вставьте или перейдите по следующему пути:
В разделе ProfileList вы увидите всех пользователей и их идентификаторы SID.
Источник
Как узнать SID пользователя
Операционная система Windows для идентификации использует специальный идентификатор безопасности (Security Identifier, SID), который присваивается каждой учетной записи пользователя (а также компьютера или группы) при ее создании. В отличие от имени каждый SID уникален, что позволяет системе однозначно идентифицировать пользователя. Поэтому операционная система оперирует именно SID-ами и использует их для контроля доступа к различным ресурсам — принтерам, файлам и папкам и т.п.
Примечание. Говоря об уникальности SID, надо сделать одну оговорку. В Windows существуют так называемые встроенные (BuiltIn) учетные записи, такие как Administrator или Guest. SID-ы этих записей одинаковы в каждом экземпляре Windows вне зависимости от версии ОС. Это дает администратору возможность более-менее централизованно управлять доступом при отсутствии доменной структуры.
SID для локальных учетных записей храниться базе данных диспетчера учетных записей (Security Account Manager, SAM) на локальном компьютере, для доменных — в базе Active Directory. И сегодня речь пойдет о том, как можно узнать SID пользователя по его имени и наоборот, как выяснить имя пользователя по его SID.
Whoami
Когда требуется посмотреть SID текущего пользователя, то проще всего воспользоваться утилитой whoami. Для этого надо открыть консоль cmd и выполнить команду:
В том случае, когда необходимо узнать SID произвольного пользователя, можно воспользоваться Windows Management Instrumentation (WMI). Один из инструментов для работы с WMI — утилита WMIC. Так например, узнать SID пользователя Kirill можно такой командой:
wmic useraccount where name=′Kirill′ get sid
А можно и наоборот, выяснить имя пользователя по его SID:
wmic useraccount where sid=′S-1-5-21-4178654016-3479515840-607560339-1000′ get name
Дополнительно в WMI-запросе можно указать имя компьютера (для локального) или домена (для доменного пользователя). Например эта команда выведет SID локального администратора:
wmic useraccount where (name=′administrator′ and domain=′%computername%′) get sid
wmic useraccount where (name=′administrator′ and domain=′contoso′) get sid
Для обычного пользователя все также, узнаем SID по имени:
wmic useraccount where (name=′kirill′ and domain=′contoso′) get sid
wmic useraccount where (sid=′S-1-5-21-2404695605-4156858507-746700462-1001′ and domain=′contoso′) get name
Примечание. В запросе вместо имени компьютерадомена можно использовать переменные %computername% и %userdomain%.
PowerShell и WMI
PowerShell также позволяет работать с WMI. Для примера обратимся к классу win32_userAccount и выведем SID доменного:
и локального пользователя:
Также вместо имени компьютера и домена можно указывать переменные окружения $env:computername и $env:userdomain, например:
Для обратной операции (узнать имя пользователя по SID) нам потребуется использовать свойство SID класса win32_SID. Например:
Как вариант, для работы с WMI можно использовать командлет Get-WmiObject (или Get-CimInstance). Например так мы узнаем SID пользователя:
Для доменного пользователя процедура идентична, только в виде параметра передаются имя пользователя и имя домена:
Для обратной процедуры получения имени по SID делаем наоборот — сначала создаем объект класса System.Security.Principal.SecurityIdentifier и передаем ему в виде параметра SID пользователя, а затем переводим его в объект класса System.Security.Principal.NTAccount и выводим свойство Value, содержащее имя пользователя:
PsGetSid
Как видите, встроенных средств для выяснения SID в Windows предостаточно, но для полноты картины возьмем еще одно, от стороннего разработчика.
PsGetSid — утилита командной строки от Sysinternals, входящая в состав пакета PsTools. PsGetSid умеет получать SID пользователя по его имени и наоборот, работает как с локальными, так и с доменными аккаунтами. Утилита не требует установки, ее достаточно скопировать на нужный компьютер и запустить.
Для примера запросим SID пользователя по его имени:
Источник
Как узнать SID пользователя или группы AD по имени и наоборот?
В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы, принтерам и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя или группы (локальных или из Active Directory), и обратную процедуру – определение имени пользователя или группы Windows по известному SID.
Получение учетки по 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
Узнать 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:
Вы можете получить SID группы AD с помощью другого командлета — Get-ADGroup:
Эта же команда 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:
Чтобы найти имя доменной группы по известному SID используйте команду:
Также можно узнать SD группу и пользователя с помощью встроенных классов PowerShell (без дополнительных модулей):
Поиск объектов в Active Directory по SID
Если вы не знаете к какому типу объекта AD относится некий SID и какой точно командлет использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup), вы можете использовать универсальный метод поиска объектов в Active Directory по SID с помощью командлета Get-ADObject (параметр IncludeDeletedObjects позволяет искать по удаленным объектам AD в корзине).
SID
В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass).
Источник
Is there a way to connect between the values under HKEY_USERS to the actual username?
I saw some similar questions, but most (if not all) talks about C# code, and my need is in VBScript.
asked May 27, 2010 at 7:40
If you look at either of the following keys:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlhivelist
You can find a list of the SIDs there with various values, including where their «home paths» which includes their usernames.
I’m not sure how dependable this is and I wouldn’t recommend messing about with this unless you’re really sure what you’re doing.
answered May 27, 2010 at 7:57
Hans OlssonHans Olsson
53.7k14 gold badges92 silver badges114 bronze badges
2
It is possible to query this information from WMI. The following command will output a table with a row for every user along with the SID for each user.
wmic useraccount get name,sid
You can also export this information to CSV:
wmic useraccount get name,sid /format:csv > output.csv
I have used this on Vista and 7. For more information see WMIC — Take Command-line Control over WMI.
answered Jun 8, 2011 at 20:10
dcharlesdcharles
4,7722 gold badges30 silver badges29 bronze badges
4
-
Open Reg HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
-
make a loop to get all subkeys
-
the subkeys you are interested with are those started with [S-1-5-21-] which means user (see key name [ProfileImagePath] they are always started with a path c:Users)
-
Those starting with [S-1-5-21-12] are all local users
-
Those starting with [S-1-5-21-13] are all network users [if joined to Domained network] that are previously logged on the machine.
answered Apr 25, 2012 at 7:26
StoneStone
1711 silver badge2 bronze badges
1
By searching for my userid in the registry, I found
HKEY_CURRENT_USERVolatile EnvironmentUsername
answered Sep 12, 2016 at 21:13
Alan FrankAlan Frank
891 silver badge2 bronze badges
2
You can use the command PSGetSid from Microsoft’s SysInternals team.
Download URL: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx
Usage:
psgetsid [\computer[,computer[,...] | @file] [-u username [-p password]]] [account|SID]
-u Specifies optional user name for login to remote computer.
-p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
Account PsGetSid will report the SID for the specified user account rather than the computer.
SID PsGetSid will report the account for the specified SID.
Computer Direct PsGetSid to perform the command on the remote computer or computers specified. If you omit the computer name PsGetSid runs the command on the local system, and if you specify a wildcard (\*), PsGetSid runs the command on all computers in the current domain.
@file PsGetSid will execute the command on each of the computers listed in the file.
Example:
psgetsid S-1-5-21-583907252-682003330-839522115-63941
NB:
- Where the user is a domain/AD(LDAP) user, running this on any computer on the domain should give the same results.
- Where the user is local to the machine the command should either be run on that machine, or you should specify the computer via the optional parameter.
Update
If you use PowerShell, the following may be useful for resolving any AD users listed:
#create a drive for HKEY USERS:
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue
#List all immediate subfolders
#where they're a folder (not a key)
#and they's an SID (i.e. exclude .DEFAULT and SID_Classes entries)
#return the SID
#and return the related AD entry (should one exist).
Get-ChildItem -Path 'HKU:' `
| ?{($_.PSIsContainer -eq $true) `
-and ($_.PSChildName -match '^S-[d-]+$')} `
| select @{N='SID';E={$_.PSChildName}} `
, @{N='Name';E={Get-ADUser $_.PSChildName | select -expand Name}}
You could also refine the SID filter further to only pull back those SIDs which will resolve to an AD account if you wished; more on the SID structure here: https://technet.microsoft.com/en-us/library/cc962011.aspx
answered Jun 13, 2014 at 13:51
JohnLBevanJohnLBevan
21.9k11 gold badges93 silver badges173 bronze badges
In the HKEY_USERSoneyouwanttoknow
you can look at SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders
and it will reveal their profile paths. c:userswhothisisDesktop
, etc.
Kingsley
14.2k5 gold badges32 silver badges52 bronze badges
answered Dec 2, 2018 at 22:29
1
Done it, by a bit of creative programming,
-
Enum the Keys in HKEY_USERS for those funny number keys…
-
Enum the keys in HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
and you will find the same numbers…. Now in those keys look at the String value:
ProfileImagePath = «SomeValue» where the values are either:
«%systemroot%system32configsystemprofile»… not interested in this one… as its not a
directory path…
%SystemDrive%Documents and SettingsLocalService — «Local Services»
%SystemDrive%Documents and SettingsNetworkService «NETWORK SERVICE»
or
%SystemDrive%Documents and SettingsUSER_NAME, which translates directly to the «USERNAME» values in most un-tampered systems, ie. where the user has not changed the their user name after a few weeks or altered the paths explicitly…
answered Mar 7, 2012 at 15:41
1
for /f "tokens=8 delims=" %a in ('reg query "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlhivelist" ^| find "UsrClass.dat"') do echo %a
alecxe
455k116 gold badges1061 silver badges1179 bronze badges
answered May 21, 2013 at 19:16
DaLuaDaLua
91 bronze badge
1
The proper way to do this requires leveraging the SAM registry hive (on Windows 10, this requires NT AUTHORITYSYSTEM
privileges). The information you require is in the the key: HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsersNames
.
Each subkey is the username, and the default value in each subkey is a binary integer. This value (converted to decimal) actually corresponds to the last chunk of the of the SID.
Take «Administrator» for example, by default it is associated with the integer 0x1f4 (or 500).
So, in theory you could take the build a list of SIDS based on the subkey names of the HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionProfileList
key and/or HKEY_USERS
key, parse out the the value after the last hyphen (-), and compare that to the info from the SAM hive.
If you don’t have NT AUTHORITYSYSTEM
privileges, the next best way to approach this may be to follow the other method described in the answers here.
reference: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/81d92bba-d22b-4a8c-908a-554ab29148ab
answered Oct 27, 2019 at 2:38
Is there a way to connect between the values under HKEY_USERS to the actual username?
I saw some similar questions, but most (if not all) talks about C# code, and my need is in VBScript.
asked May 27, 2010 at 7:40
If you look at either of the following keys:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlhivelist
You can find a list of the SIDs there with various values, including where their «home paths» which includes their usernames.
I’m not sure how dependable this is and I wouldn’t recommend messing about with this unless you’re really sure what you’re doing.
answered May 27, 2010 at 7:57
Hans OlssonHans Olsson
53.7k14 gold badges92 silver badges114 bronze badges
2
It is possible to query this information from WMI. The following command will output a table with a row for every user along with the SID for each user.
wmic useraccount get name,sid
You can also export this information to CSV:
wmic useraccount get name,sid /format:csv > output.csv
I have used this on Vista and 7. For more information see WMIC — Take Command-line Control over WMI.
answered Jun 8, 2011 at 20:10
dcharlesdcharles
4,7722 gold badges30 silver badges29 bronze badges
4
-
Open Reg HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
-
make a loop to get all subkeys
-
the subkeys you are interested with are those started with [S-1-5-21-] which means user (see key name [ProfileImagePath] they are always started with a path c:Users)
-
Those starting with [S-1-5-21-12] are all local users
-
Those starting with [S-1-5-21-13] are all network users [if joined to Domained network] that are previously logged on the machine.
answered Apr 25, 2012 at 7:26
StoneStone
1711 silver badge2 bronze badges
1
By searching for my userid in the registry, I found
HKEY_CURRENT_USERVolatile EnvironmentUsername
answered Sep 12, 2016 at 21:13
Alan FrankAlan Frank
891 silver badge2 bronze badges
2
You can use the command PSGetSid from Microsoft’s SysInternals team.
Download URL: http://technet.microsoft.com/en-gb/sysinternals/bb897417.aspx
Usage:
psgetsid [\computer[,computer[,...] | @file] [-u username [-p password]]] [account|SID]
-u Specifies optional user name for login to remote computer.
-p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
Account PsGetSid will report the SID for the specified user account rather than the computer.
SID PsGetSid will report the account for the specified SID.
Computer Direct PsGetSid to perform the command on the remote computer or computers specified. If you omit the computer name PsGetSid runs the command on the local system, and if you specify a wildcard (\*), PsGetSid runs the command on all computers in the current domain.
@file PsGetSid will execute the command on each of the computers listed in the file.
Example:
psgetsid S-1-5-21-583907252-682003330-839522115-63941
NB:
- Where the user is a domain/AD(LDAP) user, running this on any computer on the domain should give the same results.
- Where the user is local to the machine the command should either be run on that machine, or you should specify the computer via the optional parameter.
Update
If you use PowerShell, the following may be useful for resolving any AD users listed:
#create a drive for HKEY USERS:
New-PSDrive -PSProvider Registry -Name HKU -Root HKEY_USERS -ErrorAction SilentlyContinue
#List all immediate subfolders
#where they're a folder (not a key)
#and they's an SID (i.e. exclude .DEFAULT and SID_Classes entries)
#return the SID
#and return the related AD entry (should one exist).
Get-ChildItem -Path 'HKU:' `
| ?{($_.PSIsContainer -eq $true) `
-and ($_.PSChildName -match '^S-[d-]+$')} `
| select @{N='SID';E={$_.PSChildName}} `
, @{N='Name';E={Get-ADUser $_.PSChildName | select -expand Name}}
You could also refine the SID filter further to only pull back those SIDs which will resolve to an AD account if you wished; more on the SID structure here: https://technet.microsoft.com/en-us/library/cc962011.aspx
answered Jun 13, 2014 at 13:51
JohnLBevanJohnLBevan
21.9k11 gold badges93 silver badges173 bronze badges
In the HKEY_USERSoneyouwanttoknow
you can look at SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders
and it will reveal their profile paths. c:userswhothisisDesktop
, etc.
Kingsley
14.2k5 gold badges32 silver badges52 bronze badges
answered Dec 2, 2018 at 22:29
1
Done it, by a bit of creative programming,
-
Enum the Keys in HKEY_USERS for those funny number keys…
-
Enum the keys in HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
and you will find the same numbers…. Now in those keys look at the String value:
ProfileImagePath = «SomeValue» where the values are either:
«%systemroot%system32configsystemprofile»… not interested in this one… as its not a
directory path…
%SystemDrive%Documents and SettingsLocalService — «Local Services»
%SystemDrive%Documents and SettingsNetworkService «NETWORK SERVICE»
or
%SystemDrive%Documents and SettingsUSER_NAME, which translates directly to the «USERNAME» values in most un-tampered systems, ie. where the user has not changed the their user name after a few weeks or altered the paths explicitly…
answered Mar 7, 2012 at 15:41
1
for /f "tokens=8 delims=" %a in ('reg query "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlhivelist" ^| find "UsrClass.dat"') do echo %a
alecxe
455k116 gold badges1061 silver badges1179 bronze badges
answered May 21, 2013 at 19:16
DaLuaDaLua
91 bronze badge
1
The proper way to do this requires leveraging the SAM registry hive (on Windows 10, this requires NT AUTHORITYSYSTEM
privileges). The information you require is in the the key: HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsersNames
.
Each subkey is the username, and the default value in each subkey is a binary integer. This value (converted to decimal) actually corresponds to the last chunk of the of the SID.
Take «Administrator» for example, by default it is associated with the integer 0x1f4 (or 500).
So, in theory you could take the build a list of SIDS based on the subkey names of the HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionProfileList
key and/or HKEY_USERS
key, parse out the the value after the last hyphen (-), and compare that to the info from the SAM hive.
If you don’t have NT AUTHORITYSYSTEM
privileges, the next best way to approach this may be to follow the other method described in the answers here.
reference: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/81d92bba-d22b-4a8c-908a-554ab29148ab
answered Oct 27, 2019 at 2:38