Todos conocemos, eso creo, que a las cuentas de usuario se les puede poner una fecha de expiración. Esto se usa fundamentalmente para usuarios temporarios para que luego de una fecha determinada la cuenta se desactive automáticamente
Pero en algunas ocasiones se necesita algo más específico, por ejemplo que una cuenta dure sólo unos minutos o algunas horas, o aún a una hora determinada sea eliminada
Inclusive esto que demostraré, se puede hacer sobre grupos, que no muestra cómo asignarle un día y hora determinados como límite de uso
Me he sorprendido, pues leo que está disponible desde Windows Server 2003. No lo conocía
Primero que nada veamos algunas de las características propias de estos Objetos Dinámicos (“Dynamic Objects”) como son identificados por Microsoft
- Un Objeto Dinámico, una vez expirado es definitivamente borrado, esto es, no queda como “tombstoned” como sucede con los objetos normales cuando son eliminados
- Esta clase de objetos está soportado en todas las particiones, excepto las de Configuración y Esquema, o sea sólo en la del Dominio o auxiliares que hubiéramos creado
- Active Directory no publica en ROOT-DSE el atributo “dynamicSubtrees como indica la RFC2589
- Estos Objetos Dinámicos se comportan en la forma normal durante los procesos de búsqueda, modificación, borrarado, etc.
- No hay forma de cambiar un “Objeto Normal” a Objeto Dinámico, o a la inversa
- Un Objeto Dinámico no puede tener una entrada “no dinámica”
La infraestructura que utilizaré, ya que es sólo para efectos demostrativos, y cada uno verá si le es de utilidad en su propio ambiente, consistirá sólo de una máquina, el Controlador de Dominio que uso para todas las notas (DC1.AD.GuillermoD.com.ar)
Por si alguien tuviera dudas muestro en las propiedades de usuario que podemos asignarle a la cuenta fecha de expiración (deshabilitar la cuenta), pero no la hora
Crearé una Unidad Organizativa llamada Temporales para ubicar las cuentas temporales, un usuario y un grupo, que usaré durante la demostración
También he creado en el disco una carpeta que llamé Prueba, donde crearé los archivos necesarios para la creación de estos “Dynamic Objects”, un usuario y un grupo
Para lograr este objetivo, aunque se puede hacer con PowerShell (dejo la búsqueda a cada uno) yo lo haré mediante el conocido LDIFDE.EXE
Para lo cual he creado dos archivos de texto en formato LDIF como muestro en las siguientes figuras
Uno para crear la cuenta de usuario
Y otro para crear la cuenta de grupo
Observen dos cosas en estos archivos
- El “dn” (“Distinguished Name”) debe indicar además del nombre, una Unidad organizativa existente
- El “entryTTL” corresponde a la cantidad de tiempo en segundos a contar desde la creación de la cuenta. Yo he usado tiempo muy corto a fin de no esperar durante esta nota :)
Luego mediante LDIFDE.EXE importamos ambos archivos
Aunque parece que no sucedió nada, debemos refrescar el contenido de la Unidad Organizativa
La cuenta de usuario, queda deshabilitada, así que le asigno una contraseña y luego habilito la cuenta en la forma habitual (botón derecho …)
Activando la opción “View / Advanced features” podemos ver los atributos de cada objeto creado
El atributo “entryTTL” es el tiempo de vida que le queda, que como podemos ver ya ha comenzado a disminuir
Y por otro lado, el atributo “msDS-Entry-Time-To-Die” muestra el momento en que la cuenta será borrada. Observen la diferencia entre tiempo local y tiempo UTC
A estas cuentas se les puede asignar permisos sobre carpetas. He creado una carpeta Permisos, a la cual he asignado permisos tanto al usuario como al grupo ya que quería ver qué sucedía una vez que las cuentas eran eliminadas
Y quedan rastros
Al ser sólo una demostración no me he tomado el trabajo de esperar las 12 horas del tiempo de «garbage collection» para ver si el sistema eliminaba ambas entradas, pero estoy casi seguro que no lo hará, y habrá que hacerlo manualmente
Esto ha sido sólo una demostración de una opción que personalmente no conocía y que seguramente a alguien le pueda servir en algún momento
Comentarios
Muy bueno Guille… en Windows 2016 se esperan mas novedades con este tema y para que una cuenta expire a una hora en particular… podes usar PowerShell !!! :)
Set-ADAccountExpiration -Identity NombreUsuario -DateTime ’15/05/2016 14:30:00′
Hola Esteban, sí, prácticamente todo se puede hacer con PowerShell, y más, a futuro todo se hará por PowerShell :)