Windows: zamiana SID na nazwę użytkownika, odczytanie nazwy użytkownika z SID

SID (ang. Security Identifier) to unikalny identyfikator bezpieczeństwa przypisywany użytkownikom, grupom, komputerom lub innym obiektom w systemach operacyjnych rodziny Windows. Jak uzyskać SID użytkownika? Jak zamienić SID na nazwę użytkownika i odwrotnie? Jak uzyskać nazwę użytkownika mając tylko SID?

W systemach Windows identyfikator zabezpieczeń (SID) jest używany do uzupełnienia identyfikatora użytkownika – stanowi swoisty numer seryjny obiektu (SID mają nie tylko użytkownicy ale również i SID jest generowany automatycznie podczas tworzenia konta użytkownika lub grupy i składa się z ciągu znaków w formacie numerycznym, np.

S-1-5-21-3057241026-172279735-1808821284-1108

Identyfikator składa się z kilku części:

  • S – oznacza, że jest to SID.
  • 1 – wersja formatu SID.
  • 5 – identyfikator organu wydającego (np. 5 oznacza Windows NT)
  • Dalsze liczby – określają domenę lub komputer oraz konkretny obiekt (np. użytkownika).

SID pojawia się zarówno w środowiskach lokalnych jak i domenowych, a jego dokładny opis i specyfikacje znajdziecie w dokumentacji Microsoft do której zawsze odsyłamy. Istnieją znane SIDy

  • SID użytkownika lokalnego może wyglądać tak: S-1-5-21-[unikalny ciąg]-1108.
  • znane SIDy, takie jak S-1-5-18, reprezentują konto systemowe (SYSTEM).

Sam SID jest kluczowy dla integralności systemu, ponieważ nawet jeśli nazwa użytkownika zostanie zmieniona, SID pozostaje niezmienny, co pozwala systemowi jednoznacznie identyfikować dany obiekt.

Wartość SID dla bieżącego użytkownika można sprawdzić na wiele sposobów najprościej i najszybciej zrobicie to za pomocą polecenia whoami

whoami /user

Identyfikatory pozostałych użytkowników można sprawdzić w rejestrze systemu np w kluczu HKEY_USERS

Możemy też wyświetlić też listę wszystkich identyfikatorów SID w danym środowisku – używając polecenia Get-WmiObject

Get-WmiObject win32_useraccount | Select domain,name,sid

Mamy już SID czas aby przetłumaczyć go na nazwę użytkownika.

Zacznijmy od sprawdzenia SID określonego użytkownika. Jeżeli mamy dostęp do kontrolera domeny lub modułu PowerShell Active Driectory, używamy w tym celu polecenia Get-AdUser i parametru Identity:

get-adUser —Identity "S-1-5-21-3057241026-172279735-1808821284-1108"

Nie mając dostępu do kontrolera domeny możemy odczytać wartość identyfikatora z użyciem obiektów systemowych:

$object = New-Object System.Security.Principal.NTAccount("domain","username")
$SID = $object.Translate([System.Security.Principal.SecurityIdentifier])
$SID.Value

w drugą stronę mamy SID i chcemy odczytać nazwę użytkownika:

$SID = New-Object System.Security.Principal.SecurityIdentifier `
("S-X-X-XX-XXXXXXXXXX-XXXXXXXXX-XXXXXXXXXX-XXXX")
$object = $SID.Translate( [System.Security.Principal.NTAccount])
$object.Value

O czym warto jeszcze pamiętać? Ostatni numer w naszym wypadku 1108 oznacza że użytkownik domenowy został utworzony jako 108 w kolejności (przy kreowaniu domeny tworzone są również konta domyślne). Konto administratora lokalnego ma SID o końcowym numerze 500.

Pakiet Sysinternals posiada narzędzie PsGetSID które pomaga w „tłumaczeniu” identyfikatorów na nazwy obiektów i odwrotnie.


Jeżeli mój wpis Ci się spodobał, pomógł w pracy? Chcesz mnie wspierać? Postaw kawę! To dzięki waszemu wsparciu nie ma reklam! Poniżej kod QR do płatności który jest jednocześnie linkiem do PayPal.

Obrazek posiada pusty atrybut alt; plik o nazwie Kod-QR.png