logo

Comment sauvegarder et restaurer des objets de stratégie de groupe (GPO)

Les objets de stratégie de groupe sont essentiels dans la gestion d’une infrastructure Windows Server. Pour éviter tout problème de service majeur, les administrateurs doivent les configurer minutieusement et être prêts à rétablir toute modification rapidement en sauvegardant les GPO avant de les modifier.

Sélection de contenu connexe :

Petit rappel sur les stratégies de groupe

Avant de nous attaquer à la sauvegarde et à la restauration des objets de stratégie de groupe, repassons quelques informations importantes sur la création et l’utilisation des GPO.

Les composantes d’un GPO

Lorsqu’un nouvel objet de stratégie de groupe est créé, un identificateur unique nommé GUID lui est assigné. Chaque GPO est composé de deux éléments :

  • Un modèle de stratégie de groupe (GPT), constitué d’un ensemble de dossiers sur le répertoire partagé SYSVOL (“C:\\WindowsSYSVOL\domain\Policies\{GUID}”). Ces dossiers servent à stocker la plupart des composantes d’un objet de stratégie de groupe, notamment les modèles, les paramètres, les scripts et les informations sur les packages MSI. Le GPT est répliqué sur chaque contrôleur de domaine (DC) du domaine par le service de réplication de fichiers (FRS) ou la réplication du système de fichiers DFS (DFSR), selon la version de Windows. Concrètement, les GPO sont en réalité spécifiques à un domaine, car le répertoire SYSVOL n’est répliqué que sur un seul domaine.

  • Un conteneur de stratégie de groupe (GPC), c’est-à-dire un objet groupPolicyContainer situé dans le contexte de nommage du domaine dans les conteneurs CN=System et CN=Policies. Les attributs de cet objet AD sont utilisés pour stocker des informations de référence sur le GPO. L’attribut gPCFileSysPath en particulier, qui inclut le chemin d’accès au GPT de l’objet de stratégie de groupe dans le répertoire SYSVOL. À la différence du GPT, le GPC est, lui, répliqué par les services de domaine Active Directory en fonction du coût, de la planification et de l’intervalle de réplication configurés.

Associations GPO

Une fois qu’un GPO a été créé, il peut être associé à un ou plusieurs objets Active Directory, par exemple des unités d’organisation (OU), des domaines ou des sites. Cette liaison est établie par chacun des objets auxquels un GPO est lié, grâce à leur attribut gPLink. La valeur de l’attribut gPLink d’un objet consiste en une liste de chemins d’accès au GPC pour chaque GPO auquel l’objet est lié. Lorsqu’une liaison GPO est ajoutée ou supprimée, seule la valeur de l’attribut gPLink de l’objet en question est modifiée.

Remarque importante : même si la réplication du répertoire SYSVOL rend les GPO spécifiques à un domaine, la possibilité de leur associer un objet de site implique que les informations qui lui sont liées ne sont pas nécessairement limitées à un domaine. Les objets de site sont stockés dans la partition de configuration de l’Active Directory, qui est répliquée sur tous les contrôleurs de domaine de la forêt. En conséquence, le chemin d’accès au GPC d’un objet de stratégie de groupe inclus dans l’attribut gPLink est partagé lors de la réplication Active Directory.

Ordre de traitement des stratégies de groupe

L’Active Directory gère et applique les stratégies de groupe dans l’ordre suivant :

  1. GPO au niveau local
  2. GPO au niveau du site
  3. GPO associés à un domaine
  4. GPO associés à une unité d’organisation (appliqué à partir de la racine, par exemple un GPO associé à une unité d’organisation imbriquée sera prioritaire par rapport à un GPO lié à une OU parente)

La stratégie appliquée en dernier « l’emporte » (à moins que l’option « Appliquer » soit utilisée, ce qui empêche une stratégie d’être remplacée par une autre appliquée par la suite).

Configurations de l’utilisateur et de l’ordinateur

Notons enfin qu’un GPO inclut une configuration de l’ordinateur ainsi qu’une configuration de l’utilisateur. Ces deux sous-groupes comprennent pratiquement les mêmes paramètres de stratégie, mais le moment où ils sont appliqués est différent.

Les paramètres de configuration de l’ordinateur sont appliqués au démarrage de la machine, alors que les paramètres de configuration de l’utilisateur, eux, le sont lors de l’ouverture d’une session. Ce qui implique que les paramètres de configuration de l’ordinateur sont toujours appliqués en priorité aux machines associées, alors que les paramètres de configuration de l’utilisateur le sont uniquement lorsqu’une session d’un compte d’utilisateur associé est ouverte.

Lorsqu’un utilisateur se connecte à un ordinateur et qu’il existe un conflit entre les deux, les paramètres de configuration de l’ordinateur seront toujours appliqués en priorité.

Processus de sauvegarde et de restauration d’un GPO à l’aide de PowerShell

Maintenant que nous avons revu et bien compris les concepts clés, passons à la sauvegarde et à la restauration d’un GPO.

Commençons par les deux cmdlets (applets de commande) PowerShell les plus pertinentes pour sauvegarder et restaurer vos stratégies de groupe, que vous trouverez dans les outils d’administration de serveur distant pour Windows :

  • Backup-GPO, qui simplifie les captures instantanées de l’ensemble des objets de stratégie de groupe d’un domaine ou d’un seul et unique GPO.
  • Restore-GPO, qui permet de restaurer un objet de stratégie de groupe en redéployant sa version antérieure à partir de la sauvegarde effectuée à l’aide de la cmdlet Backup-GPO.

Création d’une sauvegarde de l’ensemble des GPO

Le script PowerShell suivant utilise le paramètre -All de la cmdlet Backup-GPO pour créer les sauvegardes de l’ensemble des GPO du domaine spécifié à l’aide d’un DC spécifique :

$BackupPath = '\\HOSTNAME\GPOBackup'
$Domain = 'domain.local'

$DomainController = 'DC.domain.local' $BackupFolder = New-Item -Path 
$BackupPath -Name (Get-Date -format yyyyMMddTHHmmss) -ItemType Directory
Backup-GPO -All -Domain $Domain -Server $DomainController -Path $BackupFolder

Résultat de la cmdlet Backup-GPO, un sous-dossier différent est créé pour les informations de sauvegarde de chaque GPO, ainsi qu’un fichier manifest.xml, qui inclut les détails nécessaires pour associer chaque sous-dossier à leur GPO correspondant :

Si l’on s’intéresse au contenu des sous-dossiers, on s’aperçoit que chaque sauvegarde comporte un dossier et trois fichiers .xml :

Le dossier comprend une copie du GPT de l’objet de stratégie de groupe. Les fichiers .xml contiennent, eux, les données du GPC de la stratégie de groupe, des informations relatives à l’exécution de la sauvegarde et un rapport qui inclut tous les paramètres du GPO.

Contrôle de version des sauvegardes

PowerShell permet de sauvegarder régulièrement des objets de stratégie de groupe vers un seul emplacement. Cependant, un sous-dossier unique est créé à chaque exécution du script. Ces sous-dossiers sont nommés en utilisant des GUID spécifiques à la sauvegarde et créés lors de l’exécution de la cmdlet, ce qui supprime pratiquement le risque de conflit de nom qui peut exister avec les sauvegardes répétées vers un seul emplacement.

Chaque fois que la cmdlet est exécutée, les résultats obtenus sont séparés et enregistrés dans un dossier spécifique : ce n’est pas strictement nécessaire, mais cela présente un avantage par rapport au comportement de la cmdlet Restore-GPO. Cette dernière vous permet de restaurer tous les GPO en même temps, mais elle prend en compte la sauvegarde la plus récente de chaque objet de stratégie de groupe, selon les informations du fichier manifest.xml. En séparant chaque jeu de sauvegardes et en les enregistrant dans leur propre dossier, vous vous assurez qu’un fichier manifest.xml correspond à un ensemble. Ce qui permet la restauration de tous les GPO, peu importe le jeu de sauvegarde, en une seule opération.

Il existe néanmoins un inconvénient à utiliser le paramètre -All de la cmdlet Backup-GPO : chaque fois que la commande est exécutée, tous les objets de stratégie de groupe du domaine sont sauvegardés, pas uniquement ceux qui ont été modifiés. L’utilisation du script ci-dessous est une manière de contourner le problème. Il permet de forcer la cmdlet Backup-GPO à utiliser un fichier créé par le script dans le dossier de mise à jour pour conserver la date de la dernière exécution du script. Si le fichier existe, le script sauvegarde tous les GPO du domaine qui ont été modifiés après cette date. Si le fichier n’existe pas, il est créé par le script, qui lui attribue une date et une heure, avant de sauvegarder tous les GPO du domaine.

$BackupPath = '\\DC\GPOBackup'
$Domain = 'domain.local'
$DomainController = 'DC.domain.local' 

$BackupPathTracker = "$BackupPath\LastBackup.txt" if((Test-Path "$BackupPathTracker")) {    
$LastBackup = Get-Date (Get-Content -Path "$BackupPathTracker")    Set-Content -Path "$BackupPathTracker" -Value (Get-Date)    $GPOs = Get-GPO -All -Domain $Domain -Server $DomainController    $GPOs | Where-Object { $_.ModificationTime -gt $LastBackup } | ForEach-Object {       
 Backup-GPO -Guid $_.Id -Domain $Domain -Server $DomainController -Path $BackupPath    
}
} else {    
Set-Content -Path "$BackupPathTracker" -Value (Get-Date)    
Backup-GPO -All -Domain $Domain -Server $DomainController -Path $BackupPath
}

Bien que cette méthode permette de gagner de l’espace en réduisant les sauvegardes inutiles, celles qu’elle crée sont toutes enregistrées dans le même dossier, ce qui ne simplifie pas la restauration à un instant donné des objets de stratégie de groupe.

Combiner les deux approches et utiliser un script qui les associe serait la solution idéale, non ?

BackupPath = '\\HOSTNAME\GPOBackup'
$Domain = 'domain.local'
$DomainController = 'DC.domain.local' 

$BackupPathTracker = "$BackupPath\LastBackup.txt"
$BackupFolder = New-Item -Path $BackupPath -Name (Get-Date -format yyyyMMddTHHmmss) -ItemType Directory 

if((Test-Path "$BackupPathTracker")) {    
$LastBackup = Get-Content -Path "$BackupPathTracker"    
Set-Content -Path "$BackupPathTracker" -Value (Get-Date)    
$GPOs = Get-GPO -All -Domain $Domain -Server $DomainController    
$GPOs | Where-Object { $_.ModificationTime -gt $LastBackup } | ForEach-Object {        
Backup-GPO -Guid $_.Id -Domain $Domain -Server $DomainController -Path $BackupFolder    
   }
}
else {    
Set-Content -Path "$BackupPathTracker" -Value (Get-Date)    
Backup-GPO -All -Domain $Domain -Server $DomainController -Path $BackupFolder
}

Séparer et enregistrer les résultats de chaque sauvegarde différentielle dans leurs dossiers spécifiques s’avère en réalité bien pire. Cette méthode sépare et enregistre également chacun des fichiers manifest.xml dans leur propre dossier, supprimant à la fois la possibilité de restaurer tous les GPO en même temps et rendant particulièrement difficile l’identification des sauvegardes associées à un objet de stratégie de groupe spécifique.

Restauration de GPO à partir d’une sauvegarde

Dans la pratique, ces approches se heurtent à une limitation de la cmdlet Restore-GPO. La commande permet en effet de restaurer un objet de stratégie de groupe donné à partir soit de sa sauvegarde la plus récente identifiée dans le fichier manifest.xml soit à partir d’une sauvegarde spécifique. En revanche, la restauration de tous les GPO en même temps ne peut s’effectuer qu’à partir des sauvegardes les plus récentes indiquées dans un fichier manifest.xml précis.

# Restore a single GPO from its most recent backup
Restore-GPO -Name 'GpoName' -Path '\HOSTNAMEGPOBackup' -Domain 'domain.local' -Server 'DC.domain.local'

# Restore a single GPO from a specific backup
Restore-GPO -BackupId 12345678-09ab-cdef-1234-567890abcdef -Path '\HOSTNAMEGPOBackup' -Domain 'domain.local' -Server 'DC.domain.local'

# Restore all of a domain’s GPOs from their most recent backup
Restore-GPO -All -Path '\HOSTNAMEGPOBackup' -Domain 'domain.local' -Server 'DC.domain.local'

Lorsqu’un objet de stratégie de groupe est restauré à partir d’une sauvegarde, sa version est incrémentée dans le cadre du processus de restauration pour forcer la réplication à privilégier la version restaurée du GPO.

Comment les numéros de version peuvent ne plus être synchronisés

Les résultats de la cmdlet Restore-GPO comprennent deux ensembles de numéros correspondants aux versions de configuration de l’ordinateur et de configuration de l’utilisateur.

Le GPT et le GPC mettent à jour leur propre numéro de version, les valeurs distinctes UserVersion et ComputerVersion étant calculées à partir des numéros de version de la configuration de l’utilisateur et de la configuration de l’ordinateur, respectivement. Cela est rendu possible grâce à la manière dont le numéro de version est incrémenté. Lorsque la configuration de l’ordinateur d’un GPO est modifiée, il augmente de 1, et chaque fois que la configuration de l’utilisateur change, il augmente de 65536.

Cette incrémentation est nécessaire : comme nous l’avons vu plus haut, le GPT et le GPC d’un objet de stratégie de groupe sont répliqués séparément par différents services, ce qui peut engendrer des problèmes de synchronisation de leurs numéros de version sur un contrôleur de domaine spécifique, et empêcher leur traitement.

Restauration d’un GPO supprimé

L’impossibilité de récupérer un objet de stratégie de groupe qui a été supprimé constitue l’une des limitations connues de la cmdlet Restore-GPO : la commande est incapable de trouver l’élément GPC du GPO dans l’Active Directory. Toute tentative de récupération d’un GPO supprimé aboutira à l’erreur suivante :

Si vous êtes néanmoins en mesure de récupérer le GPC au préalable, la commande Restore-GPO peut être utilisée pour récupérer le GPO supprimé. Pour ce faire, nous pouvons exécuter la cmdlet Restore-ADObject afin de récupérer complètement l’élément Active Directory du GPO à partir de la corbeille Active Directory. La cmdlet Restore-GPO sera ensuite capable de restaurer le GPO :

Bien que cette méthode permette de récupérer un GPO supprimé, elle ne permet pas, en revanche, de restaurer les valeurs gPLink du GPO avant sa suppression. Pourquoi ? Parce que ces valeurs existaient uniquement sur l’objet lié. La seule manière de contourner ce problème en toute sécurité, c’est de tirer parti des sauvegardes externes de l’Active Directory qui contiennent les valeurs gPLink.

Sauvegarde et restauration d’un GPO à l’aide des outils GPMC et AGPM

Les cmdlets PowerShell de stratégie de groupe ne constituent pas vos seules options pour sauvegarder et restaurer un GPO. Microsoft offre également l’outil Group Policy Management Console (GPMC), ou Console de gestion des stratégies de groupe en français, un composant logiciel enfichable MMC qui peut être utilisé pour sauvegarder et restaurer des objets de stratégie de groupe. Tout comme la cmdlet Backup-GPO, il est capable de sauvegarder un seul et unique GPO ou tous les GPO d’un domaine. En revanche, à la différence de la cmdlet Restore-GPO, cet outil ne peut restaurer qu’un seul GPO à la fois.

GPMC propose bien une méthode pour restaurer les GPO supprimés à partir d’une sauvegarde, mais en réalité l’outil ne les récupère pas : il crée en fait de nouveaux GPO et leur ajoute les informations disponibles dans la sauvegarde.

Autre avantage de l’outil GPMC, une visibilité accrue des paramètres à l’intérieur des sauvegardes de GPO. Il reste néanmoins difficile de les comparer aux paramètres actuels d’un GPO actif.

L’outil Advanced Group Policy Management (AGPM) de Microsoft, ou Gestion avancée des stratégies de groupe en français, disponible à travers le Microsoft Desktop Optimization Pack (MDOP), étend les fonctionnalités de GPMC, en proposant notamment le contrôle de version qui vous permet de visualiser et de comprendre les fichiers inclus dans vos sauvegardes. Toutefois, les avantages de l’outil AGPM ne semblent pas l’emporter sur les inconvénients, en particulier pour les deux raisons suivantes : les mises à jour ont l’air très rares et le programme est connu pour ne pas fonctionner de manière optimale avec d’autres logiciels (par exemple, la modification d’un GPO géré par AGPM en dehors de l’outil peut se solder par la corruption de la base de données AGPM). Cela étant, ce n’est pas forcément un mauvais outil. Nous vous conseillons uniquement de prendre votre temps et de l’essayer dans un environnement de test avant de le déployer en production.

Comment Netwrix peut vous aider ?

Netwrix StealthRECOVER propose une interface Web unifiée qui vous permet de sauvegarder à la fois des objets Active Directory et des objets de stratégie de groupe, le tout en une seule capture instantanée. Notre outil vous offre également la possibilité de chercher et de gérer des sauvegardes, de restaurer des modifications des attributs des objets actifs, et même de récupérer des GPO supprimés et leurs valeurs gPLink.

FAQ

Quelle commande puis-je utiliser pour restaurer un GPO à partir d’une sauvegarde ?

La cmdlet Windows PowerShell Restore-GPO permet de restaurer soit un seul et unique GPO, soit l’ensemble des GPO du domaine d’origine.

Comment puis-je importer un GPO à partir d’un fichier ?

Si vous disposez des autorisations nécessaires en tant qu’administrateur dans l’outil Advanced Group Policy Management (AGPM) et que vous avez exporté un GPO dans un fichier .cab, vous pouvez importer ses paramètres dans un nouveau GPO ou un GPO existant en suivant les étapes que vous trouverez ici