V prostředí Windows je každé doméně a místnímu uživateli, skupině a dalším objektům zabezpečení přiřazen jedinečný identifikátor - Zabezpečení Identifikátor nebo SID. K řízení přístupu k různým prostředkům: síťovým složkám, klíčům registru, objektům systému souborů, tiskárnám atd. Se používá SID, nikoli uživatelské jméno. V tomto článku si ukážeme několik jednoduchých způsobů, jak zjistit SID uživatele nebo skupiny (místní nebo ze služby Active Directory) a opačným postupem je zjistit jméno uživatele nebo skupiny Windows ze známého SID.
Chcete-li převést uživatelské jméno na SID, můžete použít rozdíly v obslužném programu ze sady Sysinternals - PsGetSid. Bude však muset být stažen a nainstalován na každém počítači ručně. Příklad použití PsGetSID pro uživatelské SID podle názvu účtu:psgetsid pc1 \ jjsmith
Získání účtu pomocí SID:
psgetsid S-1-5-21-1175651296-1316133944-203321314-1005
Podle mého názoru je nejjednodušší způsob, jak převést SID -> Uživatelské jméno a Uživatelské jméno -> SID, nejjednodušší použití příkazů příkazového řádku nebo jednoduchých rutin PowerShell:
Obsah:
- Jak získat SID místního uživatele?
- Vyhledejte SID uživatele nebo skupiny v doméně AD podle názvu
- Jak zjistit název uživatelského účtu nebo skupiny pomocí SID?
- Hledejte objekty ve službě Active Directory podle SID
Jak získat SID místního uživatele?
Chcete-li získat SID místního účtu v tomto počítači, můžete použít tento nástroj wmic, což vám umožňuje přístup k oboru názvů WMI počítače. Chcete-li získat SID místního uživatele test_user, můžete použít nástroj WMIC:
wmic useraccount kde name = "test_user" get sid
Tým nám vrátil SID zadaného uživatele - S-1-5-21-1175651296-1316126944-203051354-1005.
Pokud potřebujete zjistit SID aktuálního uživatele (pod kterým je příkaz spuštěn), použijte následující příkaz:
wmic useraccount kde name = "% username%" get sid
Pomocí dvou .NET tříd System.Security.Principal.SecurityIdentifier a System.Security.Principal.NTAccount můžete získat SID uživatele pomocí PowerShell:
$ objUser = New-Object System.Security.Principal.NTAccount ("LOCAL_USER_NAME")
$ strSID = $ objUser.Translate ([System.Security.Principal.SecurityIdentifier])
$ strSID.Value
Vyhledejte SID uživatele nebo skupiny v doméně AD podle názvu
SID aktuálního účtu domény můžete zjistit příkazem:
whoami / uživatel
SID uživatele domény můžete zjistit pomocí WMIC. V tomto případě musí příkaz specifikovat název domény:
wmic useraccount kde (name = 'jjsmith' a domain = "corp.winitpro.ru") get sid
Chcete-li získat identifikátor SID uživatele domény, můžete použít rutinu Get-ADUser, která je součástí modulu Active Directory pro Windows PowerShell. Získejte SID pro účet jjsmith:
Get-ADUser - Identita 'jjsmith' |. vyberte SID
SID skupiny AD můžete získat pomocí jiného rutina, Get-ADGroup:
Get-ADGroup -Filter Name-like "msk-admin *" | Vyberte SID
Pokud ve vašem počítači není nainstalován AD modul pro PowerShell, můžete získat SID uživatele pomocí výše zmíněných tříd .Net:
$ objUser = New-Object System.Security.Principal.NTAccount ("corp.wintpro.ru", "jjsmith")
$ strSID = $ objUser.Translate ([System.Security.Principal.SecurityIdentifier])
$ strSID.Value
Stejný příkaz PowerShell na jednom řádku:
(new-object security.principal.ntaccount “jjsmith”). translate ([security.principal.securityidentifier])
Jak zjistit název uživatelského účtu nebo skupiny pomocí SID?
Chcete-li zjistit název uživatelského účtu pomocí SID (reverzní postup), můžete použít jeden z následujících příkazů:
wmic useraccount where sid = "S-1-3-12-12452343106-3544442455-30354867-1434" získat jméno
V PowerShell můžete uživatelské jméno získat podle jeho SID pomocí AD modulu pro PowerShell:
Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
Chcete-li najít název skupiny domén podle známého SID, použijte příkaz:
Get-ADGroup -Identity S-1-5-21-247647651-3952524288-2944781117-23711116
Skupinu SD a uživatele můžete také zjistit pomocí vestavěných tříd PowerShell (bez dalších modulů):
$ objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2470456651-3958312488-29145117-23345716")
$ objUser = $ objSID.Translate ([System.Security.Principal.NTAccount])
$ objUser.Value
Hledejte objekty ve službě Active Directory podle SID
Pokud nevíte, jaký typ objektu AD patří k určitému SID a do kterého přesného rutina cmdlet se má najít (Get-AdUser, Get-ADComputer nebo Get-ADGroup), můžete použít univerzální metodu pro nalezení objektů ve službě Active Directory pomocí SID pomocí Get cmdlet -ADObjekt.
$ sid = 'S-1-5-21-2470146651-3951111111-2989411117-11119501'
Get-ADObject --IncludeDeletedObjects -Filter "objectSid -eq '$ sid'" | Vyberte název objektu, objectClass
SID
V našem případě je objekt AD, který má dané SID, počítač (objectClass).