Listar usuarios, grupos y permisos desde línea de comandos en Windows
Cuando auditamos sistemas Windows Active Directory, necesitamos conocer listados de usuarios, grupos de usuarios y los permisos de cada usuario. Uno puede ver usuarios y grupos logueandose en un Domain Controller y utilizando la herramienta de gestión de usuarios. Los permisos los podemos ver con el clásico click derecho sobre la carpeta.
El problema está en que este mecanismo es muy ineficiente. Supongan que les piden los permisos asociados a 10 carpetas... debemos hacer click derecho sobre cada carpeta. Cómo guardamos esta información? si es con screenshots, con suerte necesitamos hacer dos screenshots por cada carpeta (no entran todos los permisos en un solo screenshot...), si es escribiendo los permisos en un archivo, también es muy ineficiente.
Lo mismo sucede con listar usuarios, listar los grupos de un usuario y listar los usuarios en un grupo. Todas son tareas que hacerlas gráficamente es extremadamente molesto.

Fue así como di (gracias a nuestro administrador de dominio), con el paquete "Resource Kit" para Windows. Este paquete incorpora todas las herramientas que un servidor Windows debería traer, pero que los ratas de MS no incorporaron y vendían aparte (si, el "Resource Kit" es de MS y lo vendían por separado)...
En fin, este set de herramientas es muy útil y permiten administrar el dominio de forma rápida y automatizada desde programitas de consola, volcar información en archivos de texto y varias cosas más.
Como dije en la introducción, me interesa la parte de listar permisos y usuarios, así que describiré cómo hacerlo con la herramienta correspondiente del "Resource Kit".


Listar permisos de un directorio

Para esto utilizamos el programa showacls. showacls muestra los permisos utilizando la siguiente terminología:
A Generic All
R Generic Read
W Generic Write
X Generic Execute
w File Write
fx File Execute
rE Read EA
l List Directory
d Read Data
S Synchronize
r File Read
a File Append
D Delete
rW Write EA
El uso de este programa es el siguiente:
showacls /s /u:domain\user filespec /?
donde:
/s incluye sub-directories.
/u especifica el usuario (y el dominio) del cual se mostrará la información
filespec especifica los archivos y directorios en los cuales el usuario tiene permisos
/? muestra la ayuda
Ej:
showacls \\servidor\C$


Listar miembros de un grupo

En este caso usamos el programa showmbrs. El uso es el siguiente:
showmbrs dominio\grupo o
showmbrs \\dominio\grupo o
showmbrs grupo
Ej:
showmbrs midominio\”Domain Admins”


Listar miembros de grupos locales de una máquina

Aca nos da una mano el programa "local" del paquete "Resource Kit". El uso es el siguiente:
local group_name domain_name | \\server

group_name el nombre del grupo local a listar los miembros
domain_name el nombre del dominio
\\server el nombre del servidor
Ej:
local Administrators \\192.168.1.1


Listar grupos a los que pertenece un usuario

Finalmente utilizando el programa showgrps podemos listar los grupos de un usuario. El uso es el siguiente:
showgrps [/A] dominio\usuario o
showgrps [/A] usuario

/A – checkear todos los dominios confiables
Ej:
showgrps midominio\miusuario


Flexibilidad

Utilizar programas desde consola nos brinda gran flexibilidad. Si bien la consola de Windows es asquerosamente limitada, nos permite funciones básicas que nos ayudan. Por un lado podemos redirigir la salida a archivos al igual que en Linux con el caracter ">". Por ej, podemos guardar en un archivo los permisos de una dada carpeta de la siguiente forma:
showacls \\servidor\C$ > permisos.txt
Además es posible crear scripts que realicen tareas programadas para cierto día. Tal vez listar los usuarios el último día del mes.
Por otra parte, por suerte MS creó una shell más completa que el clásico cmd.exe, llamada PowerShell. Igual no llega a los talones a ninguna de las shells *nix, como bash o ksh, pero bueno, algo es algo.


Trabajo Futuro

Mi idea inicial era utilizar herramientas de GNU/Linux como ldapsearch para obtener esta información, pero desgraciadamente no pude arreglar un problema de binding con el server ldap... seguiré buscando alguna alternativa que me sirva. Voy a probar un poco el paquete python-ldap y ver si puedo programar algo propio.
Si alguno conoce una alternativa GNU/Linux que cubra las necesidades planteadas en el artículo, por favor dejenme un comentario, o escriban en el "muro" de facebook

2 comentarios:

Julio Salas dijo...

Quisiera saber por qué mis libros no han sido anunciados, por lo menos en portada, por LITNAR.

Julio Salas dijo...

Quisiera saber por qué mis libros no han sido anunciados, por lo menos en portada, por LITNAR.

Publicar un comentario