Obtener una idea clara de quién tiene permisos de administrador en tus equipos Windows puede ser un poco complicado a veces, sobre todo si gestionas varios o intentas auditar permisos. Esta guía trata sobre cómo crear una lista de usuarios y grupos del grupo local de administradores, ya sea en un solo PC o en toda una red de servidores y equipos de escritorio. Es útil saber dónde están las posibles vulnerabilidades de seguridad o simplemente para controlar quién tiene acceso de administrador. Y sí, es sorprendentemente fácil una vez que dominas los comandos y las herramientas.¿La verdadera ventaja? Puedes automatizarlo todo si es necesario, así que se acabaron las comprobaciones manuales que tardan una eternidad. Así, sabrás si algún usuario o grupo se ha colado en el grupo de administradores y podrás actuar en consecuencia.
Cómo encontrar quién está en el grupo de administradores locales en Windows
Buscar administradores locales en la computadora local
Windows tiene una forma integrada de ver quién está en el grupo de administradores: el complemento Administración de equipos ( compmgmt.msc).Simplemente ábralo, vaya a Usuarios y grupos locales, luego a Grupos y haga doble clic en Administradores. Fácil. Pero para scripts o comprobaciones rápidas, PowerShell es la mejor opción. Puede ejecutar:
Get-LocalGroupMember -Group "Administrators"
Esto muestra todos los miembros (usuarios, grupos o cuentas de servicio) con derechos de administrador. Resulta útil ver la lista completa, sobre todo si se está solucionando un problema o se están habilitando permisos. A veces, en algunas máquinas, este comando podría no ejecutarse al instante, ya sea porque la cuenta no está completamente actualizada o por algún problema con el plan de energía. Ejecutarlo de nuevo o reiniciar suele ser útil.
Si desea restringirlo solo a usuarios locales (no a dominios ni grupos de Azure AD), puede filtrar más:
Get-LocalGroupMember -Group "Administrators" | Where-Object { (Get-LocalUser $_. SID -ErrorAction SilentlyContinue).Enabled }
De esta forma, solo verás a aquellos con cuentas habilitadas en el sistema local. Advertencia: Si tu entorno usa Active Directory (lo cual probablemente ocurra si estás en equipos unidos a un dominio), muchos de los derechos de administrador estarán vinculados a grupos de AD, y el filtrado de SID ayuda a separar a los usuarios locales de los administrados por AD.
Porque, claro, Windows tiene que complicarle la vida de más. Aun así, si instala las herramientas RSAT (Herramientas de Administración Remota del Servidor), obtendrá mejores opciones, especialmente al intentar acceder a grupos de AD y sus miembros desde un script. También puede consultar AD directamente, pero eso es otro rollo.
Obtener información sobre usuarios o grupos de AD en los administradores locales
En algunas configuraciones, necesitará más detalles sobre los usuarios de AD que pertenecen al grupo de administradores locales, como su estado o nombre de cuenta. Para ello, son útiles las herramientas Get-ADGroupMember y Get-ADUser de PowerShell. Aquí tiene una herramienta compleja que he usado:
$admins = Get-LocalGroupMember -Group "Administrators" | Where-Object { $_. PrincipalSource -eq "ActiveDirectory" } foreach ($admin in $admins) { if ($admin.objectclass -eq "User") { Get-ADUser $admin. SID | Select-Object SamAccountName, Enabled } elseif ($admin.objectclass -eq "Group") { Get-ADGroupMember $admin. SID | ForEach-Object { Get-ADUser $_ | Select-Object SamAccountName, Enabled } } }
Esto analiza el AD, extrayendo nombres de usuario y verificando si sus cuentas están activas. No todos los entornos tienen tantos permisos, pero en algunos dominios, es la única forma de ver quién tiene acceso de administrador.
Obtener miembros administradores desde una máquina remota
Si intentas ver quién está en el grupo de administración en un PC o servidor remoto, PowerShell lo simplifica bastante una vez configurada la comunicación remota. Necesitarás habilitar WinRM y asegurarte de que el puerto TCP 5985 esté abierto en tu firewall, lo cual puede ser un poco complicado. Una vez hecho esto, ejecuta comandos como:
Invoke-Command -ComputerName wsk-m2211 -ScriptBlock { Get-LocalGroupMember -Group "Administrators" | Select Name, ObjectClass, PrincipalSource }
Esto devuelve la lista directamente desde la máquina remota. Para comprobar varios destinos a la vez, simplemente pase una lista:
$computers = @("wsk-m2211", "srv-sql01", "srv-rds02") Invoke-Command -ComputerName $computers -ScriptBlock { Get-LocalGroupMember -Group "Administrators" | Where-Object { $_. Name -notlike "*Domain Admins*" } | Select-Object Name, ObjectClass, PrincipalSource }
Exporte esta información a CSV mediante la conexión a Export-Csv. Por ejemplo:
$results | Export-Csv -Path "C:\PS\admins.csv" -NoTypeInformation -Encoding UTF8
Si administra un dominio completo con Active Directory, puede incluso usar Get-ADComputer para listar los servidores en todas las máquinas Windows Server, recorrer sus nombres y ejecutar estos comandos remotamente. Tenga en cuenta que podría recibir errores si algunos servidores están desconectados o tienen permisos diferentes, por lo que a veces deberá integrar esto en la gestión de errores o ignorar los fallos de forma silenciosa.
Cómo eliminar usuarios del grupo de administradores locales
Mantener un número reducido de administradores locales es una gran satisfacción para el personal de seguridad. La limpieza manual está bien si solo se realiza una vez, pero para auditorías regulares, las Preferencias de directiva de grupo o los Grupos restringidos son una excelente opción: administran automáticamente quién está en el grupo de administradores. Si necesita hacerlo sobre la marcha, PowerShell es la solución:
Remove-LocalGroupMember -Group "Administrators" -Member "username"
Y para computadoras remotas, simplemente colóquelo dentro de un comando Invoke-Command. Por ejemplo:
Invoke-Command -ComputerName wsk-m2211 -ScriptBlock { Remove-LocalGroupMember -Group "Administrators" -Member "username" }
Es un poco tedioso seleccionar manualmente a los usuarios que quieres expulsar. Una forma más inteligente es reunir a todos los administradores actuales y luego seleccionar visualmente a los no deseados. Puedes enviar la salida a Out-GridView para seleccionar de una lista:
$results = Invoke-Command wsk-m2211, wsk-m2233 { Get-LocalGroupMember -Group "Administrators" | Where-Object { $_. Name -notlike "*Domain Admins*" } | Select-Object Name, ObjectClass, PrincipalSource, SID } $prinolsToRemove = $results | Out-GridView -Title "Select users to remove" -OutputMode Multiple foreach ($pr in $prinolsToRemove) { Invoke-Command -ComputerName $pr. PSComputerName -ScriptBlock { Remove-LocalGroupMember -Group "Administrators" -Member $using:pr. Name } }
De esta forma, eliges a quién eliminar y el script lo expulsa de todas las máquinas remotas. No es perfecto, pero es mejor que hacerlo manualmente una y otra vez. Recuerda que la $using:construcción te permite pasar variables locales a tus sesiones remotas; es un pequeño detalle, pero te ahorra muchos dolores de cabeza.
Con suerte, esto ofrece un buen punto de partida para administrar los derechos de administrador local en todas las máquinas. No es infalible, y a veces las cosas no funcionan a la primera, así que prepárate para un poco de prueba y error. Pero una vez que los scripts se ejecutan, ahorra mucho tiempo y ayuda a mantener la seguridad.
Resumen
- Utilice Get-LocalGroupMember para enumerar administradores localmente
- Consultar grupos de AD con Get-ADGroupMember
- Ejecute comprobaciones remotas con Invoke-Command después de configurar WinRM
- Automatice la limpieza con scripts de PowerShell y Out-GridView
Resumen
Descubrir quién tiene acceso de administrador no tiene por qué ser una pesadilla. Una vez instalados los scripts, puedes controlar los permisos, eliminar usuarios no deseados y evitar sorpresas. Es un poco engorroso de configurar al principio, pero sin duda merece la pena si la seguridad o el cumplimiento normativo son importantes. Intenta no romper nada mientras lo haces, y recuerda que a veces Windows se complica un poco más de lo necesario. Ojalá esto ayude a alguien a ahorrarse unas horas; al menos a mí me funcionó.