Как преобразовать SID в имя пользователя/группы и пользователя в SID

SID (Идентификатор безопасности) — это уникальный идентификатор, который присваивается пользователям, группам, компьютерам или другим объектам безопасности при их создании в Windows или домене Active Directory. Windows использует SID, а не имя пользователя, для контроля доступа к различным ресурсам: общим сетевым папкам, ключам реестра, объектам файловой системы (разрешения NTFS), принтерам и т. д. В этой статье мы покажем вам несколько простых способов найти SID пользователя, группы или компьютера, а также обратную процедуру — как получить имя объекта по известному SID.

Что такое SID (идентификатор безопасности Windows)?

Как мы уже говорили, SID (идентификатор безопасности) позволяет однозначно идентифицировать пользователя, группу или компьютер в определенной области (домен или локальный компьютер). SID представляет собой строку вида:

S-1-5-21489056535-1467421822-25240996971231

  • 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 — Группа пользователей удаленного рабочего стола, которым разрешено входить в систему через RDP
  • S-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

wmic useraccount where name=

Эта команда может выдать ошибку, если репозиторий WMI поврежден. Используйте это руководство для восстановления репозитория WMI.

Команда выше вернула 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

В более новых версиях PowerShell Core 7.x необходимо использовать Get-CimInstance вместо Get-WmiObject команды.

Но еще проще получить SID локального пользователя с помощью PowerShell:

Get-LocalUser -Name 'test_user' | Select-Object Name, SID

powershell: получить идентификатор безопасности локального пользователя (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

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

Get-ADUser select SID

Получить SID группы AD можно с помощью команды Get-ADGroup:

Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID

get-adgroup получить 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

System.Security.Principal.SecurityIdentifier

Та же однострочная команда 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

get-adcomputer 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}$"

получить идентификатор локальной машины (компьютера) с помощью psgetsid или powershell

Каждый компьютер в домене должен иметь уникальный локальный (машинный) SID. Если вы клонируете компьютеры или виртуальные машины или создаете их из шаблона, необходимо выполнить команду 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

get-adgroup select group by SID

Вы также можете узнать имя группы или пользователя по 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

The IncludeDeletedObjects Параметр позволяет искать удаленные объекты в корзине Active Directory.

Get-ADObject поиск объекта Active Directory по SID

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *