
SID (Идентификатор безопасности) — это уникальный идентификатор, который присваивается пользователям, группам, компьютерам или другим объектам безопасности при их создании в Windows или домене Active Directory. Windows использует SID, а не имя пользователя, для контроля доступа к различным ресурсам: общим сетевым папкам, ключам реестра, объектам файловой системы (разрешения NTFS), принтерам и т. д. В этой статье мы покажем вам несколько простых способов найти SID пользователя, группы или компьютера, а также обратную процедуру — как получить имя объекта по известному SID.
- Что такое SID (идентификатор безопасности Windows)?
- Как найти идентификатор безопасности (SID) локального пользователя
- Как получить SID пользователя/группы в Active Directory
- Проверка SID домена и локальной машины компьютера
- Как преобразовать SID в имя пользователя или группы
- Поиск в Active Directory по SID с помощью PowerShell
Что такое SID (идентификатор безопасности Windows)?
Как мы уже говорили, SID (идентификатор безопасности) позволяет однозначно идентифицировать пользователя, группу или компьютер в определенной области (домен или локальный компьютер). SID представляет собой строку вида:
S-1-5-21—489056535-1467421822-2524099697—1231
- 489056535-1467421822-2524099697— это уникальный идентификатор домена, выдавшего SID (эта часть будет одинаковой для всех объектов в одном домене):
- 1231 — относительный идентификатор безопасности объекта (RID). Он начинается с 1000 и увеличивается на 1 для каждого нового объекта. Выдается контроллером домена с ролью FSMO RID Master.
Идентификаторы SID объектов Active Directory хранятся в ntds.dit
базе данных, а SID локальных пользователей и групп — в локальной базе данных Windows Security Account Manager (SAM) в HKEY_LOCAL_MACHINE\SAM\SAM
ключ реестра.
Существуют так называемые Известные идентификаторы в Windows. Это SID для встроенных пользователей и групп на любом компьютере Windows. Например:
S-1-5-32-544
— встроенная группа «АдминистраторыS-1-5-32-545
— локальные пользователиS-1-5-32-555
— Группа пользователей удаленного рабочего стола, которым разрешено входить в систему через RDPS-1-5-domainID-500
— встроенная учетная запись администратора Windows- И т. д.
В Windows для преобразования SID -> имени и имени пользователя -> SID можно использовать различные инструменты: whoami tool, wmic, классы WMI, PowerShell или утилиты сторонних производителей.
Как найти идентификатор безопасности (SID) локального пользователя
Чтобы получить SID учетной записи локального пользователя, вы можете воспользоваться командой wmic инструмент, который позволяет запрашивать пространство имен WMI компьютера. Чтобы получить SID локального пользователя test_user, можно воспользоваться командой WMIC:
wmic useraccount where name="test_user" get sid
Команда выше вернула SID указанного локального пользователя. В этом примере — S-1-5-21-1175659216-1321616944-201305354-1005
.
Чтобы перечислить SID всех локальных пользователей Windows, выполните команду:
wmic useraccount get name,sid
Если вам нужно получить SID текущего пользователя, выполните следующую команду:
wmic useraccount where name="%username%" get sid
Вы можете запрашивать WMI непосредственно из PowerShell:
(Get-WmiObject -Class win32_userAccount -Filter "name="test_user" and domain='$env:computername'").SID
Get-CimInstance
вместо Get-WmiObject
команды.Но еще проще получить SID локального пользователя с помощью PowerShell:
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.woshub.com′) get sid
Чтобы найти SID пользователя домена AD, можно использовать команду Get-ADUser, которая является частью модуля Active Directory Module для Windows PowerShell. Давайте получим SID для jabrams учетная запись пользователя домена:
Get-ADUser -Identity 'jabrams' | select SID
Получить SID группы AD можно с помощью команды Get-ADGroup:
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
Если модуль PowerShell AD не установлен на вашем компьютере, вы можете получить SID пользователя из домена AD с помощью классов .Net, упомянутых ранее:
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Та же однострочная команда PowerShell:
(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])
Проверка SID домена и локальной машины компьютера
Если компьютер Windows подключен к домену Active Directory, у него будет два разных SID. Первый SID — это идентификатор локального компьютера (Machine SID), а второй — уникальный идентификатор объекта компьютера в AD.
Получить SID компьютера в домене Active Directory можно с помощью команды:
Get-ADComputer mun-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}$"
sysprep
, прежде чем присоединять их к домену. Эта утилита сбрасывает идентификатор SID локальной машины. Это избавит вас от распространенных ошибок доверительных отношений.Как преобразовать SID в имя пользователя или группы
Чтобы узнать имя учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:
wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name
Получить имя пользователя домена по SID можно с помощью модуля RSAT-AD-PowerShell:
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
Чтобы найти имя доменной группы по известному SID, используйте команду:
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
Вы также можете узнать имя группы или пользователя по SID с помощью встроенных классов PowerShell (без использования дополнительных модулей):
$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
Поиск Active Directory по SID с помощью PowerShell
Если вы не знаете, к какому типу объектов AD относится определенный SID и какую именно команду PowerShell вам нужно использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup), вы можете воспользоваться универсальным методом поиска объектов в домене Active Directory по SID с помощью команды Get-ADObject команда.
$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjects
Параметр позволяет искать удаленные объекты в корзине Active Directory.В нашем случае объект AD с указанным SID является компьютером домена (см. атрибут objectClass).