Magic Quadrant™ für Privileged Access Management 2025: Netwrix zum vierten Jahr in Folge anerkannt. Laden Sie den Bericht herunter.

Plattform
Ressourcen­zentrumBlog
So sichern und stellen Sie Group Policy Objects (GPOs) wieder her

So sichern und stellen Sie Group Policy Objects (GPOs) wieder her

Oct 18, 2022

Gruppenrichtlinienobjekte sind entscheidend für die Verwaltung der Windows Server-Infrastruktur. Um schwerwiegende Dienstprobleme zu vermeiden, müssen Administratoren GPOs sorgfältig konfigurieren und darauf vorbereitet sein, Änderungen schnell rückgängig zu machen, indem sie diese vor der Modifikation sichern.

Gruppenrichtlinien-Aktualisierung

Bevor wir uns mit der Sicherung und Wiederherstellung von Group Policy-Objekten befassen, lassen Sie uns einige wichtige Details darüber betrachten, wie GPOs erstellt und verwendet werden.

GPO-Komponenten

Wenn ein neues Gruppenrichtlinienobjekt erstellt wird, erhält es einen eindeutigen Bezeichner, der als GUID bezeichnet wird. Jedes GPO besteht aus zwei Teilen:

  • Gruppenrichtlinienvorlage (GPT) — Die GPT besteht aus einer Reihe von Ordnern in der SYSVOL-Freigabe („C:\WindowsSYSVOLdomainPolicies{GUID}“). Diese Ordner werden verwendet, um den Großteil des Inhalts eines Gruppenrichtlinienobjekts zu speichern, einschließlich der Vorlagen, Einstellungen, Skripte und Details über MSI-Pakete. Die GPT wird durch die Dateireplikationsdienste (FRS) oder die verteilte Dateisystemreplikation (DFSR) je nach Windows-Version auf jeden DC im Bereich repliziert. Tatsächlich sind GPOs effektiv domänenspezifisch, da SYSVOL nur innerhalb einer Domäne repliziert wird.
Image

  • Gruppenrichtliniencontainer (GPC) — Der GPC ist ein groupPolicyContainer-Objekt, das im Domain-Naming-Kontext unter CN=System,CN=Policies lokalisiert ist. Die Attribute dieses AD-Objekts werden verwendet, um referenzielle Informationen bezüglich der GPO zu speichern. Bedeutend ist hierbei das Attribut gPCFileSysPath, welches den Pfad zum GPT der GPO in SYSVOL enthält. Im Gegensatz zum GPT wird der GPC von Active Directory Domain Services gemäß den konfigurierten Replikationskosten, -zeitplan und -intervall repliziert.
Image

GPO-Verknüpfungen

Sobald ein GPO erstellt wurde, kann es mit einem oder mehreren Active Directory-Objekten verknüpft werden: Organisationseinheiten (OUs), Domänen und Standorte. Diese Verknüpfung wird nicht vom GPO selbst, sondern von jedem der zugeordneten AD-Objekte in seinem gPLink-Attribut aufrechterhalten. Der Wert des gPLink-Attributs eines Objekts ist eine Liste der GPC-Pfade jedes GPO, mit dem das Objekt verknüpft wurde. Wenn eine Verknüpfung eines GPO mit einem Objekt erstellt oder gelöscht wird, wird nur der Wert des gPLink-Attributs des betroffenen Objekts geändert.

Ein wichtiger Hinweis ist, dass, obwohl die Replikation von SYSVOL GPOs domänenspezifisch macht, die Tatsache, dass GPOs mit einem Standortobjekt verknüpft werden können, bedeutet, dass GPO-bezogene Informationen nicht notwendigerweise auf eine Domäne beschränkt sind. Standortobjekte werden in der Active Directory-Konfigurationspartition gespeichert, die zu allen Domänencontrollern im Wald repliziert wird. Dies führt dazu, dass der Pfad zum GPC eines Gruppenrichtlinienobjekts, der im gPLink-Attribut enthalten ist, während der Active Directory-Replikation aus der Domäne herausgeschmuggelt wird.

Reihenfolge der Gruppenrichtlinienverarbeitung

Active Directory wendet GPOs in folgender Reihenfolge an:

  1. Lokale Gruppenrichtlinienobjekte
  2. Mit Standort verknüpfte GPOs
  3. Mit Domänen verknüpfte GPOs
  4. GPOs, die mit OUs verknüpft sind (beginnend von der Wurzel verarbeitet, sodass ein mit einer untergeordneten OU verknüpftes GPO Vorrang vor einem GPO hat, das mit der übergeordneten OU verknüpft ist)

Die zuletzt angewendete Richtlinie „gewinnt“ (es sei denn, die Option „Durchsetzen“ wird verwendet, was verhindert, dass eine Richtlinie durch eine nachfolgend angewendete Richtlinie überschrieben wird).

Image

Benutzer- und Computerkonfigurationen

Zu beachten ist abschließend, dass GPOs sowohl eine Computerkonfiguration als auch eine Benutzerkonfiguration enthalten. Diese Untergruppen beinhalten nahezu identische Sätze von Richtlinieneinstellungen, unterscheiden sich jedoch darin, wann die GPO-Einstellungen angewendet werden.

Computereinstellungen werden während des Hochfahrens auf Computer angewendet, und Benutzereinstellungen werden während der Anmeldung angewendet. Das bedeutet, dass Optionen in der Computereinstellung immer auf zugehörige Computer durchgesetzt werden, während Optionen in der Benutzereinstellung nur durchgesetzt werden, wenn ein zugehöriges Benutzerkonto an einem Computer angemeldet ist.

Wenn sich ein Benutzer an einem Computer anmeldet und es einen Konflikt zwischen einer Computerkonfigurationseinstellung und einer Benutzerkonfigurationseinstellung gibt, hat die Computerkonfigurationseinstellung immer Vorrang.

GPO-Backup- und Wiederherstellungsprozess mit PowerShell

Nachdem diese Schlüsselkonzepte vollständig verstanden sind, können wir mit der Sicherung und Wiederherstellung von GPOs fortfahren.

Wir beginnen mit den zwei relevanten Group Policy PowerShell-Cmdlets, die als Teil von Microsofts Windows Remote Server Administration Tools verfügbar sind:

  • Backup-GPO — Dieses Cmdlet erleichtert es sehr, ein Abbild aller Gruppenrichtlinienobjekte eines Domäne oder eines einzelnen angegebenen GPO zu erstellen.
  • Restore-GPO — Dieses Cmdlet kann ein Gruppenrichtlinienobjekt auf den Zustand zurücksetzen, wie er in einer Sicherung durch das Backup-GPO-Cmdlet erfasst wurde.

Erstellen einer Sicherung aller GPOs

Das folgende PowerShell-Skript verwendet den -All Parameter des Backup-GPO Cmdlets, um Backups aller GPOs in der angegebenen Domäne unter Verwendung eines spezifizierten DC zu erstellen:

      $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
      

Die Ausgabe des Backup-GPO-Cmdlets besteht aus einem separaten Unterordner für die Backup-Informationen jeder GPO und einer manifest.xml-Datei, die die notwendigen Informationen enthält, um jeden der Unterordner ihrer jeweiligen GPO zuzuordnen:

Image

Wenn wir in einem der Unterordner nachsehen, stellen wir fest, dass jede Sicherung aus einem Ordner und drei XML-Dateien besteht:

Image

Der Ordner enthält eine Kopie des GPT-Objekts der Gruppenrichtlinie und die XML-Dateien enthalten die Daten aus dem GPC der Gruppenrichtlinie, Informationen, die spezifisch für die Ausführung der Sicherung sind, und einen Bericht, der den Inhalt des GPO beschreibt.

Netwrix Recovery for Active Directory

Sichern und stellen Sie AD- und Gruppenrichtlinienobjekte in einem einzigen Snapshot wieder her

Versionskontrolle für Backups

Das wiederholte Sichern von Gruppenrichtlinienobjekten an einem einzigen Ort wird unterstützt, aber jede Ausführung dieses Skripts erstellt einen einzigartigen Unterordner für seine Ausgabe. Die Unterordner werden mit während der Cmdlet-Ausführung generierten, backupspezifischen GUIDs benannt, was die Wahrscheinlichkeit von Namenskollisionen bei wiederholten Backups an einem einzigen Ort nahezu ausschließt.

Das Trennen der Ausgabe jeder Ausführung in eindeutige Ordner ist nicht unbedingt notwendig, aber das Verhalten des Restore-GPO-Cmdlets schafft einen Vorteil dafür. Das Restore-GPO-Cmdlet ermöglicht es Ihnen, alle GPOs auf einmal wiederherzustellen, aber es wird das neueste Backup jedes Gruppenrichtlinienobjekts verwenden, wie es in der manifest.xml identifiziert wird. Indem Sie jede Gruppe von Backups in ihren eigenen Ordner trennen, stellen Sie sicher, dass jede Backupgruppe ihre eigene manifest.xml erhält. Dies ermöglicht die Wiederherstellung aller GPOs in einem dieser Backup-Sets in einer einzigen Operation.

Ein Nachteil der Verwendung des Backup-GPO-Cmdlet-Parameters -All ist, dass bei jeder Ausführung alle Gruppenrichtlinienobjekte im Domäne gesichert werden, anstatt nur diejenigen, die sich geändert haben. Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, ein Skript wie das untenstehende zu verwenden. Es zwingt das Backup-GPO-Cmdlet, eine Datei zu verwenden, die das Skript im Update-Ordner erstellt, um den Zeitstempel des letzten Laufzeit des Skripts zu speichern. Wenn die Datei existiert, sichert das Skript alle GPOs der Domäne, die seit dem Zeitstempel in der Datei geändert wurden. Existiert die Datei nicht, erstellt das Skript die Datei, setzt den Zeitstempel und sichert alle GPOs der Domäne.

      $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
}
      

Obwohl dieser Ansatz Speicherplatz spart, indem unnötige Backups vermieden werden, landen die durchgeführten Backups alle im selben Ordner, was es schwierig macht, Gruppenrichtlinienobjekte auf einen bestimmten Zeitpunkt wiederherzustellen.

Die Kombination der Ansätze aus beiden Skripten würde doch all unsere Probleme lösen, oder?

      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
}
      

Wie sich herausstellt, macht das Isolieren jedes differenziellen Backups in eigenen Ordnern alles viel schlimmer. Dieser Ansatz isoliert auch jede der manifest.xml-Dateien in ihren eigenen Ordnern, was effektiv die Möglichkeit eliminiert, alle GPOs auf einmal wiederherzustellen, und es gleichzeitig unglaublich schwierig macht, die Backups zu finden, die mit einem bestimmten Gruppenrichtlinienobjekt verbunden sind.

Wiederherstellen von GPOs aus der Sicherung

In der Praxis stoßen diese Ansätze auf eine Einschränkung des Restore-GPO-Cmdlets: Restore-GPO kann ein bestimmtes Gruppenrichtlinienobjekt entweder aus dem neuesten in einer manifest.xml-Datei referenzierten Backup oder einem angegebenen Backup wiederherstellen – aber das Wiederherstellen aller GPOs eines Domäne auf einmal ist beschränkt auf die Verwendung der neuesten Backups in einer angegebenen manifest.xml-Datei.

      # 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'
      

Wenn ein Gruppenrichtlinienobjekt aus einem Backup wiederhergestellt wird, wird die Version des GPO als Teil des Wiederherstellungsprozesses inkrementiert, um die Replikation dazu zu bringen, die wiederhergestellte Kopie des GPO zu bevorzugen.

Image

Wie Versionsnummern asynchron werden können

Die Ausgabe des Restore-GPO-Cmdlets umfasst zwei Satz von Versionsnummern, einen für die Computerkonfiguration und einen für die Benutzerkonfiguration.

Die GPT und die GPC sind jeweils dafür verantwortlich, ihre eigene Versionsnummer zu pflegen, wobei die separaten Werte UserVersion und ComputerVersion aus den Versionsnummern der Benutzerkonfiguration und der Computerkonfiguration berechnet werden. Dies ist aufgrund der Art und Weise möglich, wie die Versionsnummer erhöht wird. Sie wird um 1 erhöht, wenn eine Computerkonfiguration eines GPOs geändert wird und um 65536 jedes Mal, wenn die Benutzerkonfiguration geändert wird.

All dies ist notwendig, weil, wie oben diskutiert, ein Gruppenrichtlinienobjekts GPT und GPC durch verschiedene Dienste separat repliziert werden, was dazu führen kann, dass die Versionsnummern eines GPOs GPT und GPC auf einem bestimmten Domänencontroller nicht synchron sind – was deren Verarbeitung verhindern wird.

Wiederherstellen einer gelöschten GPO

Eine dokumentierte Einschränkung des Restore-GPO-Cmdlets besteht darin, dass es nicht verwendet werden kann, um ein gelöschtes Gruppenrichtlinienobjekt wiederherzustellen, da es das GPC-Stück des GPO in Active Directory nicht finden kann. Der Versuch, ein gelöschtes GPO wiederherzustellen, führt zu einem Fehler, der folgendermaßen aussieht:

Image

Allerdings, wenn es Ihnen möglich ist, das GPC zuerst wiederherzustellen, kann Restore-GPO verwendet werden, um das gelöschte GPO wiederherzustellen. Um dies zu tun, können wir das Restore-ADObject Cmdlet verwenden, um das Active Directory-Stück des GPO vollständig aus dem Active Directory Recycle Bin wiederherzustellen, und dann ist das Restore-GPO Cmdlet in der Lage, das GPO wiederherzustellen:

Image

Obwohl dieser Prozess ein gelöschtes GPO wiederherstellen kann, kann er die gPLink-Werte, die vor der Löschung des GPO existierten, nicht wiederherstellen. Dies liegt daran, dass diese Werte nur auf den verknüpften Objekten existierten. Der einzige sichere Weg, diese Einschränkung zu umgehen, ist die Nutzung externer Backups von Active Directory, die die gPLink-Werte enthalten.

Verwendung von GPMC und AGPM für GPO-Backup und -Wiederherstellung

Group Policy PowerShell-Cmdlets sind nicht Ihre einzige Option für das Backup und die Wiederherstellung von GPOs. Microsoft bietet auch die Group Policy Management Console (GPMC), ein MMC-Snap-In, das zum Sichern und Wiederherstellen von Group Policy Objects verwendet werden kann. Wie das Backup-GPO-Cmdlet kann es entweder ein einzelnes angegebenes GPO oder alle GPOs einer Domäne sichern. Im Gegensatz zum Restore-GPO-Cmdlet ist es jedoch auf die Wiederherstellung eines einzelnen GPOs gleichzeitig beschränkt.

GPMC bietet zwar eine Methode zum Wiederherstellen gelöschter GPOs aus einem Backup, aber es stellt das gelöschte GPO nicht wirklich wieder her; es erstellt tatsächlich nur ein neues GPO und füllt es mit den Informationen aus dem Backup.

Ein weiterer Vorteil des GPMC ist die verbesserte Sichtbarkeit in den Inhalt der GPO-Backups, obwohl es weiterhin schwierig bleibt, die Einstellungen eines Backups mit den aktuellen Einstellungen des live GPO zu vergleichen.

Das Advanced Group Policy Management (AGPM)-Tool von Microsoft, das als Teil des Microsoft Desktop Optimization Pack erhältlich ist, erweitert die GPMC um Funktionalitäten zur Versionskontrolle, die Ihnen helfen, den Inhalt Ihrer Backups zu betrachten und zu verstehen. Allerdings werden die Vorteile von AGPM häufig durch zwei Faktoren überschattet: Es scheint nicht sehr gut gewartet zu werden und es hat den Ruf, sich nicht gut mit anderen zu vertragen (zum Beispiel kann das Modifizieren einer von AGPM verwalteten GPO außerhalb von AGPM zu einer Beschädigung der AGPM-Datenbank führen). Das bedeutet jedoch nicht, dass es grundsätzlich ein schlechtes Tool ist; ich schlage nur vor, dass Sie damit in einer Laborumgebung ausgiebig experimentieren, bevor Sie versuchen, es in die Produktion zu implementieren.

Wie kann Netwrix helfen?

Netwrix Recovery for Active Directory bietet eine einheitliche Web-Oberfläche, die es Ihnen ermöglicht, sowohl Active Directory-Objekte als auch Gruppenrichtlinienobjekte in einem einzigen Snapshot zu sichern, Backups zu suchen und zu verwalten, Attributänderungen an Live-Objekten zurückzusetzen und sogar gelöschte GPOs und deren zugehörige gPLinks wiederherzustellen.

Active Directory Auditing und Reporting

Vereinfachen Sie die Sicherheit mit Experteneinblicken für Ihr Active Directory

Erfahren Sie mehr

FAQ

Welchen Befehl kann ich verwenden, um ein GPO aus einem Backup wiederherzustellen?

Das Windows PowerShell-Cmdlet Restore-GPO stellt entweder eine einzelne GPO oder alle GPOs in der ursprünglichen Domäne wieder her.

Wie kann ich eine GPO aus einer Datei importieren?

Wenn Sie als Administrator in Advanced Group Policy Management (AGPM) die notwendigen Berechtigungen haben und eine GPO in eine CAB-Datei exportiert haben, können Sie die GPO-Einstellungen in eine neue GPO oder eine bestehende GPO importieren, indem Sie die hier angegebenen Schritte befolgen.

Teilen auf

Erfahren Sie mehr

Über den Autor

Asset Not Found

Joe Dibley

Sicherheitsforscher

Security Researcher bei Netwrix und Mitglied des Netwrix Security Research Teams. Joe ist ein Experte für Active Directory, Windows und eine Vielzahl von Unternehmenssoftwareplattformen und -technologien. Joe erforscht neue Sicherheitsrisiken, komplexe Angriffstechniken sowie zugehörige Milderungs- und Erkennungsmaßnahmen.