Active Directory Recycle Bin
Pour ce billet, un sujet que j’ai eu à traiter plusieurs fois : La restauration d’objets AD. La mise en œuvre d’un annuaire Active Directory ne pose pas de problème particulier en terme de conception. Par contre quand un exploitant viens vous demander comment on peut restaurer un utilisateur supprimé, là, cela devient sportif.
Pour ceux qui n’ont pas pratiqué ce sport au moins une fois, il faut savoir que :
-
L’objet supprimé reste dans l’annuaire Active Directory pendant un certain temps (dépend du système d’exploitation et du niveau de Service Pack), c’est la notion de TombStone
-
L’objet est dépouillé d’un certain nombre de ces attributs, donc en particulier l’appartenance aux groupes
La restauration d’un utilisateur ne pose pas de problème particulier, par contre, son appartenance à d’éventuels groupes implique de savoir à quel(s) groupes il appartenait. Le sujet se corse quand on sait que l’appartenance à un groupe est un attribut du groupe et non de l’utilisateur. L’attribut “MembeOf” de l’objet utilisateur n’est qu’un attribut calculé. Autre problème, si on restaure l’utilisateur et les groupes, on risque de repositionner des membres qui devraient ne plus l’être.
Maintenant que les règles de ce sport sont clairement établies, voyons comment traiter cette problématique :
Etant donné que Windows Server 2008 R2 fait la part belle à PowerShell avec des cmdlets dédiées à Active Directory, il était donc tout naturel de faire le tour du propriétaire avant de s’attaquer à la restauration d’un objet utilisateur et de son appartenance à un groupe sans restaurer le groupe en question (challenge!).
Mise en place de la cible
Objectif, tout faire en Powershell, en premier lieu, créer un conteneur organisationnel dans lequel on va créer le compte qui sera supprimé. La commande utilisée est “New-ADOrganizationalUnit” :
Une fois le conteneur créé, on peut afficher toutes ses caractéristiques à l’aide de la commande “Get-ADOrganizationalUnit” :
Remarque : On peut constater la présence de l’attribut “ProtectedFromAccidentalDeletion”, une des nouveautés de Windows Server 2008 qui permet de positionner des permissions empêchant un administrateur de supprimer un conteneur sans réfléchir!
Une fois le conteneur créé, passons à l’utilisateur avec la commande “new-ADUser” tel qu’illustré ci-dessous :

Vérifions que notre utilisateur existe bien dans le conteneur. Comment? Simplement avec l’aide du provider “AD:”, c’est comme se balader dans une structure de répertoire :

Passons à la suite avec la création de notre groupe global avec la commande “New-ADGroup” :

Et le plus important, le positionnement de notre utilisateur comme membre de ce groupe avec la commande “Add-ADGroupMember” :

Histoire de vérifier, voyons la liste des membres de ce groupe avec la commande “Get-ADGroupmember” :

Tout est maintenant prêt pour notre démonstration, à l’exception de l’Active Directory Recycle Bin qui n’est pas activée par défaut
Mise en place de l’Active Directory recycle Bin
Avant de commencer, il faut respecter un certain nombre de pré-requis :
- Tous les contrôleurs de domaine de la forêt en Windows Server 2008 R2
- Augmenter le niveau de forêt à “Windows Server 2008 R2”
Le décors est posé. Maintenant la pièce de résistance! Celle-ci est une fonctionnalité optionnelle d’Active Directory qu’il faut activer à l’aide de la commande “Enable-ADOptionalFeature, tel qu’illustré ci-dessous :
Pour vérifier que c’est bien fait, on peut demander la liste des fonctionnalités Active Directory actuellement installées dans notre environnement avec la commande “Get-ADOptionalFeature” :
Tout peter comme il disait commandant Sylvestre!
Et toujours en PowerShell :
Pour s’en assurer, on peut lister le contenu du conteneur avec le provider “AD:”
***, je vais me faire engueuler!
Une fois l’objet supprimé, il est six pieds sous terre. Pour pouvoir le restaurer, encore faut-il pouvoir le retrouver parmi les objets supprimés avec la commande “Get-ADObject” sur un conteneur bien précis “Deleted Objects” en n’oubliant pas de préciser d’inclure les objets supprimés :
A ce stade, on n’est pas plus avancé qu’avant. L’objet est supprimé. Une simple restauration autoritaire de l’objet (pourvu qu’on dispose d’une sauvegarde récente!) ne restaurera pas les appartenances aux éventuels groupes.
C’est là que l’Active Directory Recycle Bin change tout. La commande “Restore-ADObject” à laquelle on précise le GUID de l’objet à restaurer (d’ou l’intérêt de lister préalablement les objets supprimés et les attributs) va nous permettre de restaurer non seulement l’utilisateur mais aussi ses appartenances à un ou plusieurs groupes sans pour autant effectuer une restauration de ces groupes :
On peut s’assurer que l’objet est bien restauré en affichant le contenu du conteneur organisationnel à l’aide du provider “AD:” et même afficher la liste des membres du groupe.
L’utilisateur restauré est de nouveau membre du groupe.
Dans cette démonstration, j’ai supprimé un user mais j’aurai tout aussi bien pu supprimer l’intégralité du conteneur. L’opération aurait juste été un peu plus complexe dans la mesure où il faut penser à restaurer le conteneur parent d’un objet avant de pouvoir restaurer celui-ci.
Voila une fonctionnalité de Windows Server 2008 R2 qui est plus qu’intéressante pour les exploitants. Quand on sait que les extensions Active Directory de PowerShell reposent sur un Web Service, donc plus besoin de RPC pour administrer des contrôleurs de domaine!
Pour plus d’informations sur la restauration d’objets Active Directory, un excellent article de Technet Magazine de l’époque, bien plus digeste que la KB.
BenoîtS – Simple by Design