Magic Quadrant™ pour la gestion des accès privilégiés 2025 : Netwrix reconnue pour la quatrième année consécutive. Téléchargez le rapport.

Plateforme
Centre de ressourcesBlog
Comment sauvegarder et restaurer les objets de stratégie de groupe (GPOs)

Comment sauvegarder et restaurer les objets de stratégie de groupe (GPOs)

Oct 18, 2022

Les objets de stratégie de groupe (Group Policy objects) sont essentiels pour la gestion de l'infrastructure Windows Server. Pour éviter de graves problèmes de service, les administrateurs doivent configurer les GPOs avec soin et être prêts à revenir rapidement sur les modifications en les sauvegardant avant de les modifier.

Rafraîchissement de la stratégie de groupe

Avant de nous plonger dans la sauvegarde et la récupération d'objet de stratégie de groupe, revoyons quelques détails importants sur la manière dont les GPO sont créés et utilisés.

Composants de stratégie de groupe

Lorsqu'un nouvel objet de stratégie de groupe est créé, il se voit attribuer un identifiant unique appelé un GUID. Chaque GPO comporte deux parties :

  • Modèle de stratégie de groupe (GPT) — Le GPT comprend un ensemble de dossiers dans le partage de fichiers SYSVOL (« C:\WindowsSYSVOLdomainPolicies{GUID} »). Ces dossiers sont utilisés pour stocker la majorité du contenu d'un objet de stratégie de groupe, y compris les modèles, les paramètres, les scripts et les détails sur les paquets MSI. Le GPT est répliqué vers chaque contrôleur de domaine dans le domaine par les services de réplication de fichiers (FRS) ou la réplication du système de fichiers distribués (DFSR), selon la version de Windows. En fait, les objets de stratégie de groupe (GPO) sont spécifiques au domaine car SYSVOL est répliqué uniquement au sein d'un domaine.
Image

  • Conteneur de stratégie de groupe (GPC) — Le GPC est un objet groupPolicyContainer situé dans le contexte de nommage de domaine sous CN=System,CN=Policies. Les attributs de cet objet AD sont utilisés pour stocker des informations référentielles liées au GPO. Notamment, cela inclut l'attribut gPCFileSysPath, qui contient le chemin vers le GPT du GPO dans SYSVOL. Contrairement au GPT, le GPC est répliqué par Active Directory Domain Services selon le coût de réplication configuré, l'horaire et l'intervalle.
Image

Associations de stratégie de groupe

Une fois qu'un objet de stratégie de groupe (GPO) a été créé, il peut être associé à un ou plusieurs objets Active Directory : unités organisationnelles (UO), domaines et sites. Cette association n'est pas maintenue par le GPO mais par chacun des objets AD associés, dans son attribut gPLink. La valeur de l'attribut gPLink d'un objet est une liste des chemins GPC de chaque GPO auquel l'objet a été associé. Lorsqu'une association d'un GPO à un objet est créée ou supprimée, seule la valeur de l'attribut gPLink de l'objet affecté est modifiée.

Une remarque importante est que, bien que la réplication de SYSVOL rende effectivement les GPO spécifiques à un domaine, le fait que les GPO puissent être liés à un objet de site signifie que les informations relatives aux GPO ne sont pas nécessairement confinées à un domaine. Les objets de site sont stockés dans la partition de configuration d'Active Directory, qui est répliquée sur tous les contrôleurs de domaine de la forêt. Cela entraîne le chemin vers le GPC d'un objet de stratégie de groupe contenu dans l'attribut gPLink à se faufiler hors du domaine pendant la réplication d'Active Directory.

Ordre de traitement des stratégies de groupe

Active Directory applique les GPOs dans l'ordre suivant :

  1. Stratégies de groupe locales
  2. GPO liés au site
  3. GPO liés au domaine
  4. GPO liés à l'OU (traités à partir de la racine, donc un GPO lié à une OU imbriquée aura la priorité sur un GPO lié à son OU parent)

La politique qui est appliquée en dernier « l'emporte » (à moins que l'option « Enforce » soit utilisée, ce qui empêche qu'une politique soit remplacée par une politique appliquée ultérieurement).

Image

Configurations des utilisateurs et des ordinateurs

Une dernière chose à noter est que les GPOs contiennent à la fois une Configuration Ordinateur et une Configuration Utilisateur. Ces sous-groupes contiennent des ensembles de paramètres de stratégie presque identiques, mais ils diffèrent quant au moment où les paramètres des GPO sont appliqués.

Les paramètres de configuration de l'ordinateur sont appliqués aux ordinateurs lors du démarrage, et les paramètres de configuration de l'utilisateur sont appliqués lors de la connexion. Cela signifie que les options de la configuration de l'ordinateur sont toujours imposées aux ordinateurs associés, tandis que les options de la configuration de l'utilisateur ne sont imposées que lorsqu'un compte utilisateur associé se connecte à un ordinateur.

Si un utilisateur se connecte à un ordinateur et qu'il y a un conflit entre un paramètre de Configuration de l'ordinateur et un paramètre de Configuration de l'utilisateur, le paramètre de Configuration de l'ordinateur aura toujours la priorité.

Processus de sauvegarde et de restauration de GPO à l'aide de PowerShell

Une fois ces concepts clés parfaitement compris, nous pouvons passer à la sauvegarde et à la restauration des GPO.

Nous commencerons avec les deux cmdlets PowerShell de stratégie de groupe pertinentes disponibles dans le cadre des outils d'administration à distance de serveur Windows de Microsoft :

  • Backup-GPO — Cette cmdlet permet de prendre très facilement un instantané de tous les objets de stratégie de groupe d'un domaine ou d'un seul GPO spécifié.
  • Restore-GPO — Cette cmdlet peut restaurer un objet de stratégie de groupe à son état tel qu'il a été capturé dans une sauvegarde réalisée par la cmdlet Backup-GPO.

Création d'une sauvegarde de tous les GPOs

Le script PowerShell suivant utilise le paramètre -All de la cmdlet Backup-GPO pour créer des sauvegardes de tous les GPOs dans le domaine spécifié en utilisant un DC spécifié :

      $BackupPath = '\HOSTNAMEGPOBackup'
$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
      

La sortie de la cmdlet Backup-GPO se compose d'un sous-dossier séparé pour les informations de sauvegarde de chaque GPO et d'un fichier manifest.xml qui contient les informations nécessaires pour associer chacun des sous-dossiers à leur GPO respectif :

Image

En regardant à l'intérieur de l'un des sous-dossiers, nous constatons que chaque sauvegarde est composée d'un dossier et de trois fichiers XML :

Image

Le dossier contient une copie de l'objet GPT de la stratégie de groupe, et les fichiers XML contiennent les données du GPC de la stratégie de groupe, des informations spécifiques à l'exécution de la sauvegarde et un rapport qui décrit le contenu de l'objet de stratégie de groupe (GPO).

Netwrix Recovery for Active Directory

Sauvegardez et récupérez des objets AD et de stratégie de groupe dans un instantané unique

Contrôle de version de sauvegarde

La sauvegarde répétée des objets de stratégie de groupe dans un emplacement unique est prise en charge, mais chaque exécution de ce script crée un sous-dossier unique pour sa sortie. Les sous-dossiers sont nommés en utilisant des GUID spécifiques à la sauvegarde générés pendant l'exécution de l'applet de commande, ce qui élimine presque totalement le risque de collisions de noms avec des sauvegardes répétées dans un seul emplacement.

Il n'est pas strictement nécessaire de séparer la sortie de chaque exécution dans des dossiers uniques, mais le comportement de la cmdlet Restore-GPO crée un avantage à le faire. La cmdlet Restore-GPO vous permettra de restaurer tous les GPOs en une seule fois, mais elle utilisera la sauvegarde la plus récente de chaque objet de stratégie de groupe telle qu'identifiée dans le manifest.xml. En séparant chaque ensemble de sauvegardes dans son propre dossier, vous garantissez que chaque ensemble de sauvegardes obtienne son propre manifest.xml. Cela permet la restauration de tous les GPOs dans n'importe lequel de ces ensembles de sauvegardes en une seule opération.

Un inconvénient de l'utilisation du paramètre -All de la cmdlet Backup-GPO est qu'il sauvegarde tous les objets de stratégie de groupe dans le domaine à chaque exécution, plutôt que seulement ceux qui ont été modifiés. Une manière de contourner ce problème est d'utiliser un script comme celui ci-dessous. Il force la cmdlet Backup-GPO à utiliser un fichier que le script crée dans le dossier de mise à jour pour conserver l'horodatage de la dernière exécution du script. Si le fichier existe, le script sauvegarde tous les GPOs du domaine qui ont été modifiés depuis l'horodatage dans le fichier. Si le fichier n'existe pas, le script crée le fichier, définit l'horodatage et sauvegarde tous les GPOs du domaine.

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

$BackupPathTracker = "$BackupPathLastBackup.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 approche permette d'économiser de l'espace en limitant les sauvegardes inutiles, les sauvegardes effectuées se retrouvent toutes dans le même dossier, ce qui rend difficile la restauration des objets de stratégie de groupe à un moment précis.

Combiner les approches adoptées dans chacun des deux scripts résoudrait tous nos problèmes, n'est-ce pas ?

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

$BackupPathTracker = "$BackupPathLastBackup.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
}
      

Il s'avère que l'isolement de chaque résultat de sauvegarde différentielle dans des dossiers séparés rend en réalité tout beaucoup plus compliqué. Cette méthode isole également chaque fichier manifest.xml dans son propre dossier, éliminant ainsi efficacement la possibilité de restaurer tous les GPOs en une seule fois tout en rendant incroyablement difficile la recherche des sauvegardes associées à un objet de stratégie de groupe spécifique.

Restauration des GPO à partir d'une sauvegarde

En pratique, ces approches se heurtent à une limitation de la cmdlet Restore-GPO : Restore-GPO peut restaurer un objet de stratégie de groupe spécifique à partir soit de la sauvegarde la plus récente référencée dans un fichier manifest.xml, soit d'une sauvegarde spécifiée — mais la restauration de tous les GPOs d'un domaine à la fois est limitée à l'utilisation des sauvegardes les plus récentes dans un fichier manifest.xml spécifié.

      # 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, la version de l'objet GPO est incrémentée dans le cadre du processus de restauration afin de forcer la réplication à favoriser la copie restaurée de l'objet GPO.

Image

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

La sortie de la cmdlet Restore-GPO comprend deux ensembles de numéros de version, un pour la Configuration de l'ordinateur et un pour la Configuration de l'utilisateur.

Le GPT et le GPC sont chacun responsables de la maintenance de leur propre numéro de version, avec les valeurs séparées UserVersion et ComputerVersion calculées à partir des numéros de version de la Configuration Utilisateur et de la Configuration Ordinateur, respectivement. Cela est possible grâce à la manière dont le numéro de version est incrémenté. Il est augmenté de 1 lorsque la Configuration Ordinateur d'une GPO est modifiée et de 65536 chaque fois que la Configuration Utilisateur est modifiée.

Tout cela est nécessaire car, comme mentionné précédemment, l'objet de stratégie de groupe GPT et GPC sont répliqués séparément par différents services, ce qui peut entraîner un décalage des numéros de version du GPT et du GPC d'une stratégie de groupe sur un contrôleur de domaine spécifique — ce qui empêchera son traitement.

Restauration d'une GPO supprimée

Une limitation documentée de la cmdlet Restore-GPO est qu'elle ne peut pas être utilisée pour récupérer un objet de stratégie de groupe qui a été supprimé, car elle ne pourra pas trouver le morceau GPC du GPO dans Active Directory. Essayer de récupérer un GPO supprimé entraînera une erreur qui ressemblera à ceci :

Image

Cependant, si vous parvenez à récupérer le GPC en premier, Restore-GPO peut être utilisé pour récupérer le GPO supprimé. Pour ce faire, nous pouvons utiliser le cmdlet Restore-ADObject pour récupérer entièrement la partie Active Directory du GPO depuis la Active Directory Recycle Bin, puis le cmdlet Restore-GPO est capable de restaurer le GPO :

Image

Bien que ce processus puisse récupérer un GPO supprimé, il ne peut pas restaurer les valeurs gPLink qui existaient avant la suppression du GPO. Cela est dû au fait que ces valeurs existaient uniquement sur les objets liés. La seule manière sûre de contourner cette limitation est de tirer parti des sauvegardes externes d'Active Directory qui contiennent les valeurs gPLink.

Utilisation de GPMC et AGPM pour la sauvegarde et la restauration de GPO

Les cmdlets PowerShell de stratégie de groupe ne sont pas votre seule option pour la sauvegarde et la restauration des GPO. Microsoft fournit également la Group Policy Management Console (GPMC), un composant logiciel enfichable MMC qui peut être utilisé pour sauvegarder et restaurer des objets de stratégie de groupe. Comme la cmdlet Backup-GPO, elle peut sauvegarder soit un seul GPO spécifié, soit tous les GPOs d'un domaine. Contrairement à la cmdlet Restore-GPO, elle est limitée à la restauration d'un seul GPO à la fois.

GPMC fournit bien une méthode pour restaurer les GPO supprimés à partir d'une sauvegarde, mais cela ne récupère pas réellement le GPO supprimé ; cela crée juste un nouveau GPO et le remplit avec les informations de la sauvegarde.

Un autre avantage du GPMC est une meilleure visibilité sur le contenu des sauvegardes GPO, bien qu'il reste difficile de comparer les paramètres d'une sauvegarde aux paramètres actuels du GPO en direct.

L'outil Advanced Group Policy Management (AGPM) de Microsoft, qui est disponible dans le cadre du Microsoft Desktop Optimization Pack, étend le GPMC avec des fonctionnalités de contrôle de version qui vous aident à visualiser et à comprendre le contenu de vos sauvegardes. Cependant, les avantages de l'AGPM ont tendance à être éclipsés par deux facteurs : il ne semble pas être très bien maintenu, et il a la réputation de ne pas bien s'intégrer avec les autres (par exemple, la modification d'un GPO géré par AGPM en dehors de l'AGPM peut entraîner la corruption de la base de données AGPM). Cela dit, ce n'est pas nécessairement un mauvais outil ; je suggère simplement de l'expérimenter amplement dans un environnement de laboratoire avant de tenter de le déployer en production.

Comment Netwrix peut-il aider ?

Netwrix Recovery for Active Directory offre une interface web unifiée qui vous permet de sauvegarder à la fois les objets Active Directory et les objets de stratégie de groupe dans un instantané unique, de rechercher et de gérer les sauvegardes, de revenir sur les modifications d'attributs des objets actifs, et même de récupérer les GPO supprimés et leurs gPLinks associés.

Audit et Reporting d'Active Directory

Rationalisez la sécurité avec des insights d'experts pour votre Active Directory

En savoir plus

FAQ

Quelle commande puis-je utiliser pour restaurer un objet de stratégie de groupe à partir d'une sauvegarde ?

Le cmdlet Windows PowerShell Restore-GPO restaure soit un seul GPO soit tous les GPOs au 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 Advanced Group Policy Management (AGPM) et que vous avez exporté un objet de stratégie de groupe (GPO) dans un fichier CAB, alors vous pouvez importer les paramètres du GPO dans un nouveau GPO ou un GPO existant en suivant les étapes fournies ici.

Partager sur

En savoir plus

À propos de l'auteur

Asset Not Found

Joe Dibley

Chercheur en sécurité

Chercheur en sécurité chez Netwrix et membre de l'équipe de recherche en sécurité de Netwrix. Joe est un expert en Active Directory, Windows et une grande variété de plateformes logicielles d'entreprise et de technologies, Joe étudie les nouveaux risques de sécurité, les techniques d'attaque complexes, ainsi que les atténuations et détections associées.