viernes, 27 de noviembre de 2009

Sacar el listado de usuarios de AD y la fecha de su último logon

Esto parece una tontería, porque si viene la baja de RRHH se debe desactivar inmediatamente la cuenta y luego borrarla, después de un tiempo prudencial, pero ¿nos acordamos siempre de borrarla?. Pasa saber el estado de los usuarios del Active directory lo mejor es sacar la información directamente de él, ¿no?.

Lo más sencillo es exportar la información del AD a un formato que podamos posteriormente manipular. Para eso MS tiene una herramienta llamada CSVDE que, como su nombre indica, Exporta el Dominio en formato CSV (me lo acabo de inventar)

Podemos exportar todo el dominio usando simplemente CSVDE -f MiDominio.csv o concretar un poco más con el listado de lo que queremos exportar. En mi caso quiero que exporte todos los usuarios con su nombre, apellido, clase, fecha de su último logon y el estado en el que se encuentra la cuenta. Para ello vamos a ejecutar el siguiente comando:

> csvde -r "(objectClass=user)" -f usuarios.csv -l cn,givenName,sn,n,ou,objectClass,lastLogon,UserAccountControl

Abrimos el fichero generado con Excel y cuando miramos la columna 'lastLogon' nos llevamos la primera sorpresa. El número que aparece es completamente ininteligible, ¿por qué?. La explicación es que Microsoft ha utilizado el 'timestamp' para marcar el tiempo, pero no el típico y normal de los segundos que han transcurrido desde la media noche del 1/1/1970, no, tenía que ser más original y crear un time stamp que se basa en un número de 64 bits que toma la fecha desde el 1/1/1601. Además lo cuenta en nanosegundos que luego divide entre 100. Fácil ¿no?. Pues resulta que lo metemos al Excel y este programita solo reconoce fechas desde el 1/1/1900, con lo que ya tenemos el lío otra vez formado. ¿Y ahora qué?. Por suerte el Excel es una hoja de cálculo y podemos aplicar una fórmula para sacarlo:

=IF(G2>0,G2/(8.64*10^11) - 109205,"")

NOTA: Excel 2010 me ha dado problemas con la fórmula de arriba. He utilizado esta otra:

=IF(G2>0; (G2/(8,64*10^11)) - 109205; "")


Digamos que G2 es la celda que contiene el 'timestamp'
Digamos que (8.64*10^11) es el número de nanosegundos de un día y dividido entre 100
Digamos que 109205 es el número de días desde 1601 hasta 1900
Digamos que hay que poner la columna de Excel que contiene este resultado en modo fecha

y de paso os pongo lo que significa cada 'UserAccountControl'

UserAccountControl_Num,Account_Status
512,Account: Enabled
514,Account: ACCOUNTDISABLE
528,Account: Enabled - LOCKOUT
530,Account: ACCOUNTDISABLE - LOCKOUT
544,Account: Enabled - PASSWD_NOTREQD
546,Account: ACCOUNTDISABLE - PASSWD_NOTREQD
560,Account: Enabled - PASSWD_NOTREQD - LOCKOUT
640,Account: Enabled - ENCRYPTED_TEXT_PWD_ALLOWED
2048,Account: INTERDOMAIN_TRUST_ACCOUNT
2080,Account: INTERDOMAIN_TRUST_ACCOUNT - PASSWD_NOTREQD
4096,Account: WORKSTATION_TRUST_ACCOUNT
8192,Account: SERVER_TRUST_ACCOUNT
66048,Account: Enabled - DONT_EXPIRE_PASSWORD
66050,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD
66064,Account: Enabled - DONT_EXPIRE_PASSWORD - LOCKOUT
66066,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD - LOCKOUT
66080,Account: Enabled - DONT_EXPIRE_PASSWORD - PASSWD_NOTREQD
66082,Account: ACCOUNTDISABLE - DONT_EXPIRE_PASSWORD - PASSWD_NOTREQD
66176,Account: Enabled - DONT_EXPIRE_PASSWORD - ENCRYPTED_TEXT_PWD_ALLOWED
131584,Account: Enabled - MNS_LOGON_ACCOUNT
131586,Account: ACCOUNTDISABLE - MNS_LOGON_ACCOUNT
131600,Account: Enabled - MNS_LOGON_ACCOUNT - LOCKOUT
197120,Account: Enabled - MNS_LOGON_ACCOUNT - DONT_EXPIRE_PASSWORD
532480,Account: SERVER_TRUST_ACCOUNT - TRUSTED_FOR_DELEGATION (Domain
Controller)
1049088,Account: Enabled - NOT_DELEGATED
1049090,Account: ACCOUNTDISABLE - NOT_DELEGATED
2097664,Account: Enabled - USE_DES_KEY_ONLY
2687488,Account: Enabled - DONT_EXPIRE_PASSWORD - TRUSTED_FOR_DELEGATION -
USE_DES_KEY_ONLY
4194816,Account: Enabled - DONT_REQ_PREAUTH
 
Digamos que ya he acabado esta entrada en el Blog ;-)





jueves, 26 de noviembre de 2009

Instalar Windows 7 / Server 2008 desde USB y sin herramientas

Hoy por casualidad, me han pasado una maravillosa herramienta para crear pendrives USB de instalación de Windows 7. Y digo yo, ¿Y si no tengo conexión a Internet para bajarme la herramienta?, ¿Son tan maravillosas como cuentan?. Os voy a poner el procedimiento manual para que podáis comparar.

1.- Busca un USB de al menos 4 GB y pínchalo en el ordenador.

2.- Si tienes un equipo con Vista o superior ejecuta CMD como administrador. Si no, puedes arrancar con el DVD 'original' y pulsar Shift + F10 para salir al Prompt del Windows PE.

3.- Ejecuta los siguientes comandos desde la ventana negra:

> diskpart (Utilidad de manejo de discos y particiones)
> list disk (Para ver los discos conectados y su número asociado)
> select disk X (X es el número asociado al USB)
> clean (Elimina el contenido del disco)
> create partition primary (Crea la partición primaria)
> select partition 1 (Seleccionamos la partición primaria)
> active (Activamos la partición para que arranque)
> format fs=fat32 (Formateamos en FAT32)
> assign (Asignar el punto de montaje)
> exit (Salir de la utilidad DISKPART)

NOTA: Si queréis conocer algo más de la utilidad DISKPART, puedes consultar el KB300415 de Microsoft.

4.- Como ya tenemos el USB formateado y con la partición activa, solo nos falta el paso más importante de todos, copiar el contenido del DVD al pendrive USB.

5.- Asegúrate en la BIOS del ordenador que tienes permitido arrancar desde dispositivos USB.

Es sencillo, ¿no?. En fin, que podéis usar una herramienta externa o simplemente comandos. Vosotros mismos.





miércoles, 25 de noviembre de 2009

Cómo saber qué equipos ya no se encuentran en la red

Algo muy habitual cuando tenemos una red un poco grande, es que con el tiempo instalamos máquinas nuevas y no eliminamos las antiguas. Esto produce un número elevado de máquinas fantasmas que ya no existen y que siguen registradas en el AD. Para saber qué máquinas podemos eliminar de la red podemos utilizar una herramienta llamada DSQUERY, que como su propio nombre indica, realiza consultas al servicio de directorio.

En este caso vamos a ver un par de formas que he encontrado en el blog http://blogs.technet.com/opineda cuando estaba buscando documentación sobre DSQUERY y que he mirado por encima y me ha gustado bastante.

1ª Opción, desde la última vez que se ha iniciado la sesión con el PC:

- dsquery computer -inactive (número de semanas)
Por ejemplo, podemos buscar los equipos que hace 6 meses que no inician sesión. Puesto que un año tiene 54 semanas, vamos a ejecutar: dsquery computer -inactive 27
2ª Opción, desde la última vez que se cambió la contraseña de red desde el equipo:
- dsquery computer -stalepwd (número de días)
Por ejemplo, podemos buscar los equipos desde los que no se han actualizado las contraseñas de usuario de dominio en los últimos 6 meses. Puesto que un año tiene 365/366 días, vamos a ejecutar: dsquery computer -stalepwd 183
Depende de cómo tengamos diseñado el dominio se nos adaptará mejor una opción u otra. Por ejemplo, si las contraseñas de usuario no caducan (para mí uno de los peores fallos de seguridad), pues la segunda opción no tiene sentido. En cambio, si tenemos unas buenas políticas de cambio de contraseña cualquiera de las dos nos podría funcionar.
NOTA: Si cambiamos el objeto de la búsqueda de computer a user, encontraremos usuarios inactivos en el domino, pero supongo que es un caso raro, porque tener usuarios activos con acceso al dominio y sin control es un riesgo enorme de seguridad y no creo que ninguno de vosotros lo tengáis así, ¿no?