Magic Quadrant™ para la gestión de acceso privilegiado 2025: Netwrix reconocida por cuarto año consecutivo. Descarga el informe.

Plataforma
Centro de recursosBlog
Cómo hacer copias de seguridad y restaurar objetos de directiva de grupo (GPOs)

Cómo hacer copias de seguridad y restaurar objetos de directiva de grupo (GPOs)

Oct 18, 2022

Los objetos de directiva de grupo son críticos para la gestión de la infraestructura de Windows Server. Para evitar problemas graves en el servicio, los administradores deben configurar cuidadosamente los GPOs y estar preparados para revertir cualquier cambio rápidamente haciendo una copia de seguridad antes de modificarlos.

Refresco de Directiva de Grupo

Antes de profundizar en la copia de seguridad y recuperación de objetos de directiva de grupo, revisemos algunos detalles importantes sobre cómo se crean y utilizan los GPOs.

Componentes de GPO

Cuando se crea un nuevo objeto de Directiva de Grupo, se le asigna un identificador único llamado GUID. Cada GPO tiene dos partes:

  • Plantilla de Directiva de Grupo (GPT) — La GPT comprende un conjunto de carpetas en el recurso compartido de archivos SYSVOL (“C:\WindowsSYSVOLdomainPolicies{GUID}”). Estas carpetas se utilizan para almacenar la mayoría del contenido de un objeto de Directiva de Grupo, incluyendo las plantillas, configuraciones, scripts y detalles sobre paquetes MSI. La GPT se replica en cada DC del dominio mediante Servicios de Replicación de Archivos (FRS) o Replicación del Sistema de Archivos Distribuido (DFSR), dependiendo de la versión de Windows. De hecho, las GPOs son efectivamente específicas del dominio porque SYSVOL solo se replica dentro de un dominio.
Image

  • Contenedor de Directiva de Grupo (GPC) — El GPC es un objeto groupPolicyContainer ubicado en el contexto de nomenclatura de dominio bajo CN=System,CN=Policies. Los atributos de este objeto AD se utilizan para almacenar información referencial relacionada con el GPO. Significativamente, esto incluye el atributo gPCFileSysPath, que contiene la ruta al GPT del GPO en SYSVOL. A diferencia del GPT, el GPC se replica por Active Directory Domain Services de acuerdo con el costo de replicación configurado, el horario y el intervalo.
Image

Asociaciones de GPO

Una vez que se ha creado un GPO, puede asociarse con uno o más objetos de Active Directory: unidades organizativas (OUs), dominios y sitios. Esta asociación no la mantiene el GPO sino cada uno de los objetos de AD asociados, en su atributo gPLink. El valor del atributo gPLink de un objeto es una lista de las rutas GPC de cada GPO con el que se ha asociado el objeto. Cuando se crea o se elimina la asociación de un GPO con un objeto, solo se modifica el valor del atributo gPLink del objeto afectado.

Una observación importante es que, aunque la replicación de SYSVOL efectivamente hace que los GPOs sean específicos del dominio, el hecho de que los GPOs puedan vincularse a un objeto de sitio significa que la información relacionada con los GPOs no está necesariamente confinada a un dominio. Los objetos de sitio se almacenan en la partición de Configuración de Active Directory, la cual se replica en todos los controladores de dominio del bosque. Esto resulta en que la ruta al GPC de un objeto de Política de Grupo contenida en el atributo gPLink se filtre fuera del dominio durante la replicación de Active Directory.

Orden de procesamiento de directivas de grupo

Active Directory aplica GPOs en el siguiente orden:

  1. GPOs locales
  2. GPOs vinculados al sitio
  3. GPOs vinculados a dominio
  4. GPOs vinculados a OU (procesados comenzando desde la raíz, por lo que un GPO vinculado a una OU anidada tendrá prioridad sobre un GPO vinculado a su OU padre)

La política que se aplica en último lugar “gana” (a menos que se use la opción “Enforce”, la cual impide que una política sea anulada por otra política aplicada posteriormente).

Image

Configuraciones de usuario y computadora

Una última cosa a tener en cuenta es que los GPOs contienen tanto una Configuración de Computadora como una Configuración de Usuario. Estos subgrupos contienen conjuntos de configuraciones de Política casi idénticos, pero difieren en el momento en que se aplican las configuraciones del GPO.

Las configuraciones de Computer Configuration se aplican a las computadoras durante el arranque, y las configuraciones de User Configuration se aplican durante el inicio de sesión. Esto significa que las opciones en Computer Configuration siempre se aplican a las computadoras asociadas, mientras que las opciones en User Configuration solo se aplican cuando una cuenta de usuario asociada inicia sesión en una computadora.

Si un usuario inicia sesión en una computadora y hay un conflicto entre una configuración de Computadora y una configuración de Usuario, la configuración de Computadora siempre tendrá prioridad.

Proceso de respaldo y restauración de GPO utilizando PowerShell

Con esos conceptos clave completamente entendidos, podemos pasar a la copia de seguridad y restauración de GPO.

Comenzaremos con los dos cmdlets de PowerShell de Group Policy relevantes disponibles como parte de las Herramientas de Administración Remota de Servidores de Microsoft:

  • Backup-GPO — Este cmdlet facilita mucho la tarea de tomar una instantánea de todos los objetos de directiva de grupo de un dominio o de un GPO especificado.
  • Restore-GPO — Este cmdlet puede restaurar un objeto de Directiva de Grupo a su estado tal como se capturó en una copia de seguridad realizada por el cmdlet Backup-GPO.

Creando una copia de seguridad de todas las GPOs

El siguiente script de PowerShell utiliza el parámetro -All del cmdlet Backup-GPO para crear copias de seguridad de todas las GPOs en el dominio especificado utilizando un DC especificado:

      $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 salida del cmdlet Backup-GPO consiste en un subdirectorio separado para la información de respaldo de cada GPO y un archivo manifest.xml que contiene la información necesaria para asociar cada uno de los subdirectorios con su respectivo GPO:

Image

Al mirar dentro de una de las subcarpetas, encontramos que cada copia de seguridad consta de una carpeta y tres archivos XML:

Image

La carpeta contiene una copia del GPT del objeto de Directiva de Grupo, y los archivos XML contienen los datos del GPC de la Directiva de Grupo, información específica de la ejecución de la copia de seguridad y un informe que describe el contenido del GPO.

Netwrix Recovery for Active Directory

Realice copias de seguridad y recupere objetos de AD y Group Policy en una sola instantánea

Control de versiones de respaldo

La realización de copias de seguridad de objetos de directiva de grupo de forma repetida en una única ubicación está soportada, pero cada ejecución de este script crea una subcarpeta única para su salida. Las subcarpetas se nombran utilizando GUIDs específicos de la copia de seguridad generados durante la ejecución del cmdlet, lo que elimina prácticamente la posibilidad de colisiones de nombres con copias de seguridad repetidas en una única ubicación.

No es estrictamente necesario segregar la salida de cada ejecución en carpetas únicas, pero el comportamiento del cmdlet Restore-GPO crea un beneficio al hacerlo. El cmdlet Restore-GPO te permitirá restaurar todos los GPOs de una vez, pero utilizará la copia de seguridad más reciente de cada objeto de Directiva de Grupo identificado dentro del manifest.xml. Al separar cada conjunto de copias de seguridad en su propia carpeta, te aseguras de que cada conjunto de copias de seguridad tenga su propio manifest.xml. Esto permite la restauración de todos los GPOs en cualquiera de estos conjuntos de copias de seguridad en una sola operación.

Una desventaja de usar el parámetro -All del cmdlet Backup-GPO es que respalda todos los objetos de Directiva de Grupo en el dominio cada vez que se ejecuta, en lugar de solo aquellos que han cambiado. Una forma de solucionar ese problema es mediante un script como el que se muestra a continuación. Obliga al cmdlet Backup-GPO a utilizar un archivo que el script crea en la carpeta de actualización para mantener la marca de tiempo de la última ejecución del script. Si el archivo existe, el script respalda cualquiera de los GPOs del dominio que hayan sido modificados desde la marca de tiempo en el archivo. Si el archivo no existe, el script crea el archivo, establece la marca de tiempo y respalda todos los GPOs 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
}
      

Aunque este enfoque ahorra espacio al limitar las copias de seguridad innecesarias, las copias de seguridad que realiza terminan todas en la misma carpeta, lo que dificulta la restauración de objetos de Directiva de grupo a un punto específico en el tiempo.

Combinar los enfoques utilizados en cada uno de los dos guiones resolvería todos nuestros problemas, ¿verdad?

      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
}
      

Resulta que aislar cada uno de los resultados de la copia de seguridad diferencial en sus propias carpetas en realidad empeora mucho las cosas. Este enfoque también aísla cada uno de los archivos manifest.xml en sus propias carpetas, eliminando efectivamente la capacidad de restaurar todos los GPOs de una vez, al mismo tiempo que hace increíblemente difícil encontrar las copias de seguridad asociadas con cualquier objeto de Política de Grupo específico.

Restaurando GPOs desde la copia de seguridad

En la práctica, estos enfoques se encuentran con una limitación del cmdlet Restore-GPO: Restore-GPO puede restaurar un objeto de Directiva de Grupo específico ya sea desde el respaldo más reciente referenciado en un archivo manifest.xml o desde un respaldo especificado — pero restaurar todas las GPOs de un dominio a la vez está limitado a usar los respaldos más recientes en un archivo manifest.xml especificado.

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

Cuando se restaura un objeto de Directiva de Grupo desde una copia de seguridad, la versión del GPO se incrementa como parte del proceso de restauración con el fin de forzar la replicación para favorecer la copia restaurada del GPO.

Image

Cómo los números de versión pueden desincronizarse

La salida del cmdlet Restore-GPO incluye dos conjuntos de números de versión, uno para la Configuración del Equipo y otro para la Configuración del Usuario.

El GPT y el GPC son cada uno responsables de mantener su propio número de versión, con los valores separados de UserVersion y ComputerVersion siendo calculados a partir de los números de versión de la Configuración de Usuario y Configuración de Computadora, respectivamente. Esto es posible como resultado de la manera en que se incrementa el número de versión. Se aumenta en 1 cuando se modifica la Configuración de Computadora de un GPO y en 65536 cada vez que se modifica la Configuración de Usuario.

Todo esto es necesario porque, como se discutió anteriormente, el GPT y el GPC de un objeto de Directiva de Grupo se replican por separado mediante diferentes servicios, lo que puede resultar en que los números de versión del GPT y GPC de una GPO en cualquier controlador de dominio específico no estén sincronizados, lo que impedirá que se procese.

Restaurar una GPO eliminada

Una limitación documentada del cmdlet Restore-GPO es que no se puede utilizar para recuperar un objeto de Directiva de Grupo que ha sido eliminado, ya que no podrá encontrar la pieza GPC del GPO en Active Directory. Intentar recuperar un GPO eliminado resultará en un error que se verá así:

Image

Sin embargo, si puedes recuperar primero el GPC, Restore-GPO puede usarse para recuperar el GPO eliminado. Para hacerlo, podemos usar el cmdlet Restore-ADObject para recuperar completamente la parte de Active Directory del GPO desde la Active Directory Recycle Bin, y luego el cmdlet Restore-GPO es capaz de restaurar el GPO:

Image

Aunque este proceso puede recuperar un GPO eliminado, no puede restaurar los valores de gPLink que existían antes de la eliminación del GPO. Esto se debe a que esos valores existían solo en los objetos vinculados. La única forma segura de sortear esta limitación es aprovechar las copias de seguridad externas de Active Directory que contienen los valores de gPLink.

Usando GPMC y AGPM para la copia de seguridad y restauración de GPO

Los cmdlets de PowerShell de Group Policy no son su única opción para el respaldo y restauración de GPO. Microsoft también proporciona la Group Policy Management Console (GPMC), un complemento MMC que se puede utilizar para respaldar y restaurar Objetos de Directiva de Grupo. Al igual que el cmdlet Backup-GPO, puede respaldar ya sea un único GPO especificado o todos los GPOs de un dominio. A diferencia del cmdlet Restore-GPO, está limitado a restaurar un solo GPO a la vez.

GPMC sí proporciona un método para restaurar GPOs eliminados desde una copia de seguridad, pero no recupera realmente el GPO eliminado; de hecho, solo crea un nuevo GPO y lo llena con la información de la copia de seguridad.

Otra ventaja del GPMC es la mejor visibilidad del contenido de las copias de seguridad de GPO, aunque sigue siendo difícil comparar la configuración de una copia de seguridad con la configuración actual del GPO en vivo.

La herramienta Advanced Group Policy Management (AGPM) de Microsoft, que está disponible como parte del Microsoft Desktop Optimization Pack, extiende el GPMC con funcionalidad de control de versiones que te ayuda a ver y entender el contenido de tus copias de seguridad. Sin embargo, los beneficios de AGPM tienden a ser superados por dos factores: Parece que no está muy bien mantenida, y tiene reputación de no interactuar bien con otros (por ejemplo, modificar un GPO gestionado por AGPM fuera de AGPM puede resultar en corrupción de la base de datos de AGPM). Dicho esto, no es necesariamente una mala herramienta; solo sugiero que experimentes bastante con ella en un entorno de laboratorio antes de intentar desplegarla en producción.

¿Cómo puede ayudar Netwrix?

Netwrix Recovery for Active Directory proporciona una interfaz web unificada que le permite respaldar tanto objetos de Active Directory como objetos de Directiva de Grupo en una sola instantánea, buscar y administrar copias de seguridad, revertir cambios de atributos en objetos activos e incluso recuperar GPOs eliminados y sus gPLinks asociados.

Auditoría y Reporting de Active Directory

Optimice la seguridad con conocimientos expertos para su Active Directory

Aprende más

FAQ

¿Qué comando puedo usar para restaurar un GPO desde una copia de seguridad?

El cmdlet de Windows PowerShell Restore-GPO restaura ya sea un único GPO o todos los GPOs al dominio original.

¿Cómo puedo importar un GPO desde un archivo?

Si tiene los permisos necesarios como administrador en Advanced Group Policy Management (AGPM) y ha exportado un GPO a un archivo CAB, entonces puede importar la configuración del GPO a un nuevo GPO o a un GPO existente siguiendo los pasos que se proporcionan aquí.

Compartir en

Aprende más

Acerca del autor

Asset Not Found

Joe Dibley

Investigador de seguridad

Investigador de seguridad en Netwrix y miembro del Equipo de Investigación de Seguridad de Netwrix. Joe es un experto en Active Directory, Windows y una amplia variedad de plataformas y tecnologías de software empresarial, Joe investiga nuevos riesgos de seguridad, técnicas de ataque complejas y las mitigaciones y detecciones asociadas.