¿Cómo convertir SID a nombre de usuario / grupo y usuario a SID?

En el entorno de Windows, a cada dominio y usuario local, grupo y otros objetos de seguridad se les asigna un identificador único: Identificador de seguridad o SID. Es un SID, pero no el nombre de usuario, que se utiliza para controlar el acceso a diferentes recursos: carpetas compartidas de red, claves de registro, objetos del sistema de archivos, impresoras, etc. En este artículo, le mostraremos algunas formas sencillas de encontrar el SID de un usuario o grupo (Active Directory o local) y el procedimiento inverso: cómo obtener el nombre de un usuario o grupo de Windows mediante un SID conocido.

Para convertir el nombre de usuario a SID, puede utilizar la excelente herramienta del conjunto de herramientas Sysinternals: PsGetSid. Pero tienes que descargar e instalar esta herramienta en cada computadora manualmente. Un ejemplo de uso PsGetSID para obtener un SID por un nombre de cuenta de usuario:

PsGetSid PC1jjsmith

Para obtener el nombre de usuario por SID, use el comando:

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

En mi opinión, la forma más fácil de convertir SID -> Nombre de usuario y nombre de usuario -> SID es usar las herramientas CLI internas de Windows o los cmdlets de PowerShell simples:

¿Cómo encontrar un SID de usuario local?

Para obtener el SID de la cuenta de usuario local en una computadora actual, puede usar el wmic , que le permite consultar el espacio de nombres WMI de la computadora. Para obtener el SID del usuario local test_user, puede usar el comando WMIC:

wmic useraccount where name="test_user" get sid

wmic useraccount donde nombre =

El comando anterior devolvió el SID del usuario local especificado. En este ejemplo – S-1-5-21-1175659216-1321616944-201305354-1005.

Si necesita obtener el SID del usuario actual (bajo el cual se está ejecutando el comando), ejecute el siguiente comando:

wmic useraccount where name="%username%" get sid

Usando las dos clases .NET System.Security.Principal.SecurityIdentifier y Cuenta.Sistema.Seguridad.Principal.NTAccount puede obtener el SID del usuario local con PowerShell:

$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

¿Cómo obtener SID para un usuario / grupo de Active Directory?

El siguiente comando se puede utilizar para obtener un SID de la cuenta de dominio actual:

whoami /user

whoami / usuario

Puede averiguar el SID del usuario de dominio utilizando la herramienta WMIC. Debe especificar su nombre de dominio en el siguiente comando:

wmic useraccount where (name="jjsmith" and domain=′corp.woshub.com′) get sid

Para encontrar el SID de un usuario de dominio de AD, puede usar el cmdlet Get-ADUser que forma parte del módulo de Active Directory para Windows PowerShell. Obtenga el SID para el jjsmith cuenta:

Get-ADUser -Identity 'jabrams' | select SID

Get-ADUser seleccione SID

Puede obtener el SID de un grupo de AD mediante el cmdlet Get-ADGroup:

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

get-adgroup obtiene SID por nombre de grupo

Si el módulo AD de PowerShell no está instalado en su computadora, puede obtener el SID del usuario del dominio AD utilizando las clases .Net mencionadas anteriormente:

$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value

System.Security.Principal.SecurityIdentifier

El mismo comando de una sola línea de PowerShell:

(new-object security.principal.ntaccount “jabrams").translate([security.principal.securityidentifier])

¿Cómo convertir un SID en nombre de usuario / grupo?

Para obtener el nombre de la cuenta de usuario mediante el SID (un procedimiento inverso), puede utilizar uno de los siguientes comandos:

wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name

Puede obtener el nombre de usuario mediante un SID mediante el módulo AD para PowerShell:

Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434

Para encontrar el nombre del grupo de dominio por un SID conocido, use el comando:

Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222

get-adgroup seleccionar grupo por SID

También puede averiguar el nombre de grupo o usuario por SID con las clases de PowerShell integradas (sin módulos adicionales):

$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

Búsqueda de Active Directory por SID

Si no sabe a qué tipo de objeto AD pertenece un determinado SID y qué cmdlet PoSh exacto usar para encontrarlo (Get-AdUser, Get-ADComputer o Get-ADGroup), puede usar el método universal de búsqueda de objetos en Dominio de Active Directory mediante un SID mediante el cmdlet Get-ADObject.

$sid = ‘S-1-5-21-2412346651-123456789-123456789-12345678’
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass

Get-ADObject busca el objeto de Active Directory por SID

En nuestro caso, el objeto AD con el SID especificado es una computadora de dominio (ver el atributo objectClass).

 

Artículos Interesantes