La gestión de Active Directory es un asunto delicado y en el que los administradores tenemos que, por el propio impacto sobre el negocio, tener una especial atención y cuidado a la hora de realizar cualquier tarea. Aún y así es posible que en alguna ocasión ocurra un accidente y tengamos que deshacer acciones en el menor tiempo posible, para ello hoy vamos a ver cómo podemos recuperar objetos borrados en Active Directory.

gestionando active directory recuperación objetos borrados

 

Repasaremos hoy función de extrema importancia en Active Directory como es la recuperación de objetos borrados. En los posts anteriores de esta serie hemos visto cómo podíamos borrar cuentas de usuario, ordenadores, grupos...y aunque esperamos que no hayáis borrado por error ningún objeto de vuestro Active Directory (recordad que siempre tenéis que hacer pruebas en entornos creados para ello) vamos a introducir en esta tercera entrega esta opción que siempre conviene tener controlada.

En caso que no tengamos activada esta función en nuestro Active Directory, la podemos activar con unos sencillos pasos. Ante todo tendremos que asegurarnos que se cumplen un par de condiciones

  • Validar que las credenciales de usuario que utilizamos son, como mínimo, correspondientes a un miembro del grupo Administradores de esquema.
  • Nos tenemos que asegurar de que el cambio se produce en el maestro de esquema operaciones de maestro único flexible (FSMO) titular de la función controlador de dominio (DC).

Cumpliendo estos dos requisitos, en un Powershell ejecutado como administrador ejecutaremos los siguientes comandos, primero para cargar el módulo de Active Directory y segundo para activar la papelera de reciclaje

Get-module activedirectory

enable-adoptionalfeature -identity 'CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=cyberseguridad,DC=net' -Scope ForestOrConfigurationSet -Target 'cyberseguridad.net'

Si todo ha ido bien, no recibiremos ningún mensaje de error y podremos consultar su activación con por ejemplo el siguiente comando que nos devuelve los objetos borrados dentro de la misma

Get-adobject -searchBase "CN=deleted bbjects,DC=cyberseguridad,DC=net" -filter * -includedeletedobjects

Inicialmente no nos devolverá nada más que el propio container, pero si creamos rápidamente un usuario de prueba y lo borramos ya lo encontraremos allí

Ver objetos borrados

Con el cmdlet get-adobject y a través del parámetro -includedeletedobjects podremos obtener un listado de los objetos que hayan sido borrados. Para ello tendremos que indicar también a través del parámetro -searchbase la localización de nuestro contenedor a través de su DN. En el siguiente ejemplo vemos una búsqueda genérica contra la localización por defecto del contenedor.

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter * -includedeletedobjects | group-object -property objectclass

Como vemos, hemos indicado el -searchbase, añadido el -includedeletedobjects y agrupado posteriormente por tipo de objeto para ver más claramente lo que andamos buscando.

Alternativamente podemos buscar directamente por un tipo determinado de objeto con un filtro, por ejemplo para mostrar únicamente las cuentas de usuario como vemos a continuación

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter {objectClass -eq "user"} -includedeletedobjects

De la misma manera podríamos buscar por otros tipos de objetos como cuentas de ordenador (con computer), grupos (con group) o para unidades organizativas y/o contenedores (con container).

Otras propiedades interesantes por las que podríamos encauzar nuestra búsqueda podrían ser por ejemplo la propiedad msds-lastknownrdn que contiene el último valor de display name del objeto o la propiedad lastknownparent que contiene la localización de Active Directory en que se encontraba el objeto antes de ser borrado. Vamos a ver un ejemplo de cada

Con el siguiente comando buscamos un objeto borrado del tipo user, en el que su último display name fuese usuariotest y mostramos del mismo nombre, DN, el estado de borrado y el tipo de objeto.

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter { objectclass -eq "user" -and msds-lastknownrdn -eq "*usuariotest*"} -includedeletedobjects -properties * | select name, distinguishedName, deleted, objectclass

En el caso que tengamos que recuperar una serie de objetos borados de un mismo contenedor los podemos identificar rápidamente con el contenido de la propiedad lastknownparent como vemos en el siguiente ejemplo

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter { lastknownparent -eq "CN=test,DC=cyberseguridad,DC=net”} -includedeletedobjects -properties * | select name, distinguishedName, deleted, objectclass

Recuperar objetos borrados

Para recuperar objetos utilizaremos el cmdlet restore-adobject. Con este cmdlet podremos recuperar cualquier objeto ya sea a su localización original o a una nueva localización en caso que la anterior haya sido borrada. El objeto recuperado mantendrá todas sus propiedades y en el caso de un usuario su antigua contraseña.

Como vemos a continuación en el ejemplo ejecutamos una búsqueda del objeto borrado y se la pasamos tal cual al cmdlet restore-adobject.

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter { objectclass -eq "user" -and msDS-LastKnownRDN -eq "usuariotest"} -includedeletedobjects | restore-adobject

Ahora ya podríamos ver si se ha recuperado correctamente con

Get-aduser -identity usuariotest

Como decíamos es muy importante tener en cuenta si la localización desde la que el objeto fue borrado sigue existiendo, esto lo podemos ver en el contenido de la propiedad lastknowndn del objeto borrado. En caso que esta localización ya no existiera tenemos que indicar una nueva ruta de recuperación como vemos en el siguiente ejemplo

get-adobject -searchbase "CN=deleted objects,DC=cyberseguridad,DC=net" -filter { objectclass -eq "user" -and msDS-LastKnownRDN -eq "usuariotest"} -includedeletedobjects | restore-adobject -targetpath “OU=nuevaoficina,DC=cyberseguridad,DC=net”

Esperemos como siempre que estos ejemplos os sirvan de ayuda y sean solo la base de vuestros futuros scripts que os hagan trabajar mucho más eficientemente con el inmenso potencial de powershell. Nos vemos en el próximo cybertruco.