Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Centro risorseBlog
Come eseguire il backup e il ripristino degli oggetti Criteri di gruppo (GPO)

Come eseguire il backup e il ripristino degli oggetti Criteri di gruppo (GPO)

Oct 18, 2022

Gli oggetti Group Policy sono fondamentali per la gestione dell'infrastruttura di Windows Server. Per evitare gravi problemi di servizio, gli amministratori devono configurare attentamente i GPO e essere pronti a ripristinare rapidamente eventuali modifiche effettuate, eseguendo il backup prima di modificarli.

Aggiornamento delle Group Policy

Prima di approfondire il backup e il recupero degli oggetti Group Policy, rivediamo alcuni dettagli importanti su come vengono creati e utilizzati i GPO.

Componenti GPO

Quando viene creato un nuovo oggetto Criteri di gruppo, gli viene assegnato un identificatore unico chiamato GUID. Ogni GPO ha due parti:

  • Modello di Criteri di Gruppo (GPT) — Il GPT comprende un insieme di cartelle nella condivisione file SYSVOL (“C:\WindowsSYSVOLdomainPolicies{GUID}”). Queste cartelle sono utilizzate per memorizzare la maggior parte del contenuto di un oggetto Criteri di Gruppo, inclusi i modelli, le impostazioni, gli script e i dettagli sui pacchetti MSI. Il GPT viene replicato in ogni DC nel dominio tramite i Servizi di Replica File (FRS) o la Replica del File System Distribuito (DFSR), a seconda della versione di Windows. Infatti, i GPO sono effettivamente specifici per il dominio perché SYSVOL viene replicato solo all'interno di un dominio.
Image

  • Contenitore di Criteri di Gruppo (GPC) — Il GPC è un oggetto groupPolicyContainer situato nel contesto di denominazione del dominio sotto CN=System,CN=Policies. Gli attributi di questo oggetto AD sono utilizzati per memorizzare informazioni referenziali relative al GPO. In particolare, ciò include l'attributo gPCFileSysPath, che contiene il percorso al GPT del GPO in SYSVOL. A differenza del GPT, il GPC viene replicato da Active Directory Domain Services in base al costo di replicazione configurato, alla pianificazione e all'intervallo.
Image

Associazioni GPO

Una volta creato un GPO, può essere associato a uno o più oggetti di Active Directory: unità organizzative (OU), domini e siti. Questa associazione non è mantenuta dal GPO ma da ciascuno degli oggetti AD associati, nel suo attributo gPLink. Il valore dell'attributo gPLink di un oggetto è un elenco dei percorsi GPC di ogni GPO con cui l'oggetto è stato associato. Quando viene creata o eliminata l'associazione di un GPO con un oggetto, viene modificato solo il valore dell'attributo gPLink dell'oggetto interessato.

Un'osservazione importante è che, sebbene la replica di SYSVOL renda i GPO specifici per il dominio, il fatto che i GPO possano essere collegati a un oggetto sito significa che le informazioni relative ai GPO non sono necessariamente confinate a un dominio. Gli oggetti sito sono memorizzati nella partizione di configurazione di Active Directory, che viene replicata in tutti i controller di dominio della foresta. Questo comporta che il percorso verso l'oggetto Criteri di Gruppo (GPC) contenuto nell'attributo gPLink si diffonda fuori dal dominio durante la replica di Active Directory.

Ordine di elaborazione dei criteri di gruppo

Active Directory applica i GPO nel seguente ordine:

  1. GPO locali
  2. GPO collegati al sito
  3. GPO collegati al dominio
  4. GPO collegati all'OU (elaborati a partire dalla radice, quindi un GPO collegato a un OU nidificato avrà la precedenza su un GPO collegato al suo OU genitore)

La politica applicata per ultima “prevale” (a meno che non venga utilizzata l'opzione “Enforce”, che impedisce a una politica di essere sovrascritta da una politica applicata successivamente).

Image

Configurazioni utente e computer

Un'ultima cosa da notare è che i GPO contengono sia una Configurazione Computer che una Configurazione Utente. Questi sottogruppi contengono quasi identici insiemi di impostazioni delle Policy, ma differiscono nel momento in cui le impostazioni dei GPO vengono applicate.

Le impostazioni di Configurazione del Computer vengono applicate ai computer durante l'avvio, e le impostazioni di Configurazione dell'Utente vengono applicate durante l'accesso. Questo significa che le opzioni nella Configurazione del Computer sono sempre imposte sui computer associati, mentre le opzioni nella Configurazione dell'Utente sono imposte solo quando un account utente associato effettua l'accesso a un computer.

Se un utente effettua l'accesso a un computer e c'è un conflitto tra una configurazione del computer e una configurazione dell'utente, la configurazione del computer avrà sempre la precedenza.

Processo di backup e ripristino GPO utilizzando PowerShell

Con questi concetti chiave pienamente compresi, possiamo passare al backup e al ripristino dei GPO.

Inizieremo con i due cmdlet di Group Policy PowerShell pertinenti disponibili come parte degli strumenti di amministrazione remota del server di Microsoft Windows:

  • Backup-GPO — Questo cmdlet rende molto semplice eseguire uno snapshot di tutti gli oggetti Group Policy di un dominio o di un singolo GPO specificato.
  • Restore-GPO — Questo cmdlet può ripristinare un oggetto Criteri di gruppo allo stato in cui era al momento del backup effettuato dal cmdlet Backup-GPO.

Creazione di un backup di tutti i GPO

Lo script PowerShell seguente utilizza il parametro -All del cmdlet Backup-GPO per creare backup di tutti i GPO nel dominio specificato utilizzando un DC specificato:

      $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
      

L'output del cmdlet Backup-GPO consiste in una sottocartella separata per le informazioni di backup di ogni GPO e un file manifest.xml che contiene le informazioni necessarie per associare ciascuna delle sottocartelle al rispettivo GPO:

Image

Esaminando l'interno di una delle sottocartelle, scopriamo che ogni backup è composto da una cartella e tre file XML:

Image

La cartella contiene una copia dell'oggetto Criteri di Gruppo GPT, e i file XML contengono i dati provenienti dai Criteri di Gruppo GPC, informazioni specifiche all'esecuzione del backup e un rapporto che descrive i contenuti del GPO.

Netwrix Recovery for Active Directory

Eseguire il backup e recuperare oggetti di AD e Group Policy in un'unica istantanea

Controllo di versione del backup

Il backup ripetuto degli oggetti Group Policy in un'unica posizione è supportato, ma ogni esecuzione di questo script crea una sottocartella unica per il suo output. Le sottocartelle sono denominate utilizzando GUID specifici per il backup generati durante l'esecuzione del cmdlet, il che elimina quasi completamente il rischio di collisioni di nomi con backup ripetuti in un'unica posizione.

Non è strettamente necessario segregare l'output di ogni esecuzione in cartelle uniche, ma il comportamento del cmdlet Restore-GPO crea un vantaggio nel farlo. Il cmdlet Restore-GPO ti permetterà di ripristinare tutti i GPO in una volta, ma utilizzerà il backup più recente di ogni oggetto Criteri di Gruppo come identificato all'interno del manifest.xml. Separando ogni insieme di backup nella propria cartella, assicuri che ogni insieme di backup abbia il proprio manifest.xml. Questo consente il ripristino di tutti i GPO in uno qualsiasi di questi insiemi di backup in un'unica operazione.

Uno svantaggio nell'utilizzo del parametro -All del cmdlet Backup-GPO è che esegue il backup di tutti gli oggetti Criteri di gruppo nel dominio ogni volta che viene eseguito, anziché solo di quelli che sono stati modificati. Un modo per aggirare questo problema è utilizzare uno script come quello sottostante. Costringe il cmdlet Backup-GPO ad utilizzare un file creato dallo script nella cartella di aggiornamento per mantenere il timestamp dell'ultima esecuzione dello script. Se il file esiste, lo script esegue il backup di tutti i GPO del dominio che sono stati modificati da quando è stato impostato il timestamp nel file. Se il file non esiste, lo script crea il file, imposta il timestamp ed esegue il backup di tutti i GPO del dominio.

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

Anche se questo approccio permette di risparmiare spazio limitando i backup non necessari, i backup che vengono effettuati finiscono tutti nella stessa cartella, il che rende difficile ripristinare gli oggetti Group Policy a un momento specifico.

Combinando gli approcci adottati in ciascuno dei due script risolverebbe tutti i nostri problemi, giusto?

      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
}
      

Come si è scoperto, isolare ciascuno dei risultati del backup differenziale nelle proprie cartelle peggiora di gran lunga la situazione. Questo metodo isola anche ciascuno dei file manifest.xml nelle proprie cartelle, eliminando di fatto la possibilità di ripristinare tutti i GPO contemporaneamente e rendendo incredibilmente difficile trovare i backup associati a un specifico oggetto Criteri di Gruppo.

Ripristino dei GPO dal backup

In pratica, questi approcci si scontrano con un limite del cmdlet Restore-GPO: Restore-GPO può ripristinare un specifico oggetto Criteri di gruppo sia dall'ultimo backup menzionato in un file manifest.xml sia da un backup specificato — ma il ripristino di tutti i GPO di un dominio in una sola volta è limitato all'utilizzo degli ultimi backup in un file manifest.xml specificato.

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

Quando un oggetto Criteri di gruppo viene ripristinato da un backup, la versione del GPO viene incrementata come parte del processo di ripristino al fine di forzare la replica a favore della copia ripristinata del GPO.

Image

Come i numeri di versione possono non essere sincronizzati

L'output del cmdlet Restore-GPO include due serie di numeri di versione, uno per la Configurazione del Computer e uno per la Configurazione Utente.

Il GPT e il GPC sono ciascuno responsabili del mantenimento del proprio numero di versione, con i valori separati di UserVersion e ComputerVersion che vengono calcolati a partire dai numeri di versione della Configurazione Utente e della Configurazione Computer, rispettivamente. Questo è possibile grazie al modo in cui il numero di versione viene incrementato. Viene aumentato di 1 quando la Configurazione Computer di un GPO viene modificata e di 65536 ogni volta che viene modificata la Configurazione Utente.

Tutto ciò è necessario perché, come discusso sopra, l'oggetto Criteri di Gruppo GPT e GPC sono replicati separatamente da servizi diversi, il che può portare a una discrepanza nei numeri di versione del GPT e GPC di un GPO su un determinato controller di dominio, impedendone l'elaborazione.

Ripristino di un GPO eliminato

Una limitazione documentata del cmdlet Restore-GPO è che non può essere utilizzato per recuperare un oggetto Criteri di gruppo che è stato eliminato, poiché non sarà in grado di trovare il pezzo GPC del GPO in Active Directory. Tentare di recuperare un GPO eliminato risulterà in un errore che assomiglia a questo:

Image

Tuttavia, se sei in grado di recuperare prima il GPC, Restore-GPO può essere utilizzato per recuperare il GPO eliminato. Per fare ciò, possiamo utilizzare il cmdlet Restore-ADObject per recuperare completamente la parte di Active Directory del GPO dal Active Directory Recycle Bin, e poi il cmdlet Restore-GPO è in grado di ripristinare il GPO:

Image

Anche se questo processo può recuperare un GPO cancellato, non può ripristinare i valori gPLink che esistevano prima della cancellazione del GPO. Questo perché quei valori esistevano solo sugli oggetti collegati. L'unico modo sicuro per aggirare questo limite è sfruttare i backup esterni di Active Directory che contengono i valori gPLink.

Utilizzo di GPMC e AGPM per il backup e il ripristino di GPO

I cmdlet di PowerShell per Group Policy non sono la tua unica opzione per il backup e il ripristino dei GPO. Microsoft fornisce anche la Group Policy Management Console (GPMC), uno snap-in MMC che può essere utilizzato per eseguire il backup e il ripristino degli Oggetti Criteri di Gruppo. Come il cmdlet Backup-GPO, può eseguire il backup di un singolo GPO specificato o di tutti i GPO di un dominio. A differenza del cmdlet Restore-GPO, è limitato al ripristino di un singolo GPO alla volta.

GPMC fornisce un metodo per ripristinare i GPO eliminati dal backup, ma in realtà non recupera il GPO eliminato; crea semplicemente un nuovo GPO e lo popola utilizzando le informazioni presenti nel backup.

Un altro vantaggio del GPMC è una maggiore visibilità nel contenuto dei backup dei GPO, anche se rimane difficile confrontare le impostazioni di un backup con quelle attuali del GPO attivo.

Lo strumento Advanced Group Policy Management (AGPM) di Microsoft, disponibile come parte del Microsoft Desktop Optimization Pack, estende il GPMC con funzionalità di controllo delle versioni che ti aiutano a visualizzare e comprendere i contenuti dei tuoi backup. Tuttavia, i vantaggi di AGPM tendono ad essere superati da due fattori: non sembra essere molto ben mantenuto e ha la reputazione di non interagire bene con altri sistemi (ad esempio, modificare un GPO gestito da AGPM al di fuori di AGPM può risultare nella corruzione del database di AGPM). Detto ciò, non è necessariamente uno strumento cattivo; suggerisco solo di sperimentarlo parecchio in un ambiente di laboratorio prima di tentare di implementarlo in produzione.

Come può Netwrix aiutare?

Netwrix Recovery for Active Directory offre un'interfaccia web unificata che ti permette di eseguire il backup sia degli oggetti Active Directory che degli oggetti Group Policy in un'unica istantanea, cercare e gestire i backup, ripristinare le modifiche agli attributi sugli oggetti attivi e persino recuperare i GPO cancellati e i loro gPLink associati.

Auditing e Reporting di Active Directory

Ottimizza la sicurezza con intuizioni esperte per il tuo Active Directory

Scopri di più

FAQ

Quale comando posso utilizzare per ripristinare un GPO da un backup?

Il cmdlet di Windows PowerShell Restore-GPO ripristina un singolo GPO o tutti i GPO al dominio originale.

Come posso importare un GPO da un file?

Se si dispone dei permessi necessari come amministratore in Advanced Group Policy Management (AGPM) e si è esportato un GPO in un file CAB, è possibile importare le impostazioni del GPO in un nuovo GPO o in un GPO esistente seguendo i passaggi forniti qui.

Condividi su

Scopri di più

Informazioni sull'autore

Asset Not Found

Joe Dibley

Ricercatore di sicurezza

Ricercatore di sicurezza presso Netwrix e membro del Netwrix Security Research Team. Joe è un esperto in Active Directory, Windows e una vasta gamma di piattaforme software aziendali e tecnologie, Joe ricerca nuovi rischi per la sicurezza, tecniche di attacco complesse e relative mitigazioni e rilevamenti.