Как да разберете SID на потребител или AD група по име и обратно?

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

За да конвертирате потребителско име в SID, можете да използвате разликите в полезността от пакета Sysinternals - PsGetSid. Но ще трябва да се изтегли и инсталира на всеки компютър ръчно. Пример за използване на PsGetSID за SID на потребителя по име на акаунта:

psgetsid pc1 \ jjsmith

Получаване на акаунт от SID:

psgetsid S-1-5-21-1175651296-1316133944-203321314-1005

Според мен най-лесният начин за конвертиране на SID -> потребителско име и потребителско име -> SID е най-лесният за използване команди от командния ред или прости командлети PowerShell:

Съдържание:

  • Как да получите SID на местния потребител?
  • Намерете SID на потребител или група в AD домейна по име
  • Как да разберете името на потребителски акаунт или група по SID?
  • Търсене на обекти в Active Directory от SID

Как да получите SID на местния потребител?

За да получите SID на локалния акаунт на този компютър, можете да използвате помощната програма WMIC, което ви позволява да получите достъп до пространството от имена на WMI на компютъра. За да получите SID на локалния потребител test_user, можете да използвате помощната програма WMIC:

wmic useraccount, където name = "test_user" се sid

Екипът ни върна SID на посочения потребител - S-1-5-21-1175651296-1316126944-203051354-1005.

Ако трябва да откриете SID на текущия потребител (под който се изпълнява командата), използвайте следната команда:

wmic useraccount, където name = "% username%" получите 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 на текущия акаунт в домейна с командата:

whoami / потребител

Можете да разберете SID на потребител на домейн, като използвате WMIC. В този случай командата трябва да посочи името на домейна:

wmic useraccount където (име = 'jjsmith' и домейн = "corp.winitpro.ru") се sid

За да получите потребителя SID на домейна, можете да използвате командлета Get-ADUser, който е част от модула Active Directory за Windows PowerShell. Вземете SID за jjsmith акаунта:

Get-ADUser -Identity 'jjsmith' | изберете SID

Можете да получите SID на AD група с помощта на друг командлет, Get-ADGroup:

Get-ADGroup -Filter Име -подобно "msk-admin *" | Изберете 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?

За да разберете името на потребителския акаунт чрез SID (обратна процедура), можете да използвате една от следните команди:

wmic useraccount, където sid = "S-1-3-12-12452343106-3544442455-30354867-1434" получите име

В PowerShell можете да получите потребителското име от неговия SID, използвайки AD модула за PowerShell:

Вземете ADUser -Идентичност S-1-5-21-247647651-3952524288-2944781117-23711116

За да намерите името на групата домейни от известния SID, използвайте командата:

Get-ADGroup -Идентичност 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.

$ sid = 'S-1-5-21-2470146651-3951111111-2989411117-11119501'
Get-ADObject -IncludeDeletedObjects -Filter "objectSid -eq '$ sid'" | Select-Object name, objectClass

SID

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