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
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
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
Puede obtener el SID de un grupo de AD mediante el cmdlet Get-ADGroup:
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
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
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
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
En nuestro caso, el objeto AD con el SID especificado es una computadora de dominio (ver el atributo objectClass).
Artículos Interesantes
Relacionados:
Contenido