Налаштовуємо резервне копіювання контролерів домену Active Directory

У цій статті ми поговоримо про особливості резервного копіювання контролерів домену Active Directory, розглянемо, як налаштувати автоматичне резервне копіювання AD за допомогою PowerShell і вбудованих засобів Windows Server.

зміст:

  • Чи потрібно бекапіть Active Directory?
  • Як перевірити дату останнього бекапа контролера домену Active Directory?
  • Бекап контролера домену AD за допомогою Windows Server Backup
  • Резервне копіювання Active Directory за допомогою PowerShell

Чи потрібно бекапіть Active Directory?

Не раз чув від знайомих адміністраторів думка, що якщо у тебе кілька (5, 10 і т.д.) територіально рознесених контролерів домену Active Directory, то бекапать AD взагалі не потрібно, тому що при декількох DC ви вже забезпечили високу відмовостійкість домену. Адже в такій схемі вірогідність одночасного виходу з ладу всіх DC прагне до 0, а якщо один контролер домену впав, то швидше розгорнути новий DC на майданчику, а старий видалити за допомогою ntdsutil.

Однак у своїй практиці я зустрічався з різними сценаріями, коли всі контролери домену виявилися пошкодженими: в одному випадку все контролери домену (а їх було понад 20 штук в різних містах) виявилися зашифрованими через перехоплення пароля домену шифрувальником через утиліту mimikatz (для запобігання таких схем див. статті "Захист Windows від mimikatz" і "Захист привілейованих груп адміністраторів"), в іншому випадку домен поклала реплікація пошкодженого файлу NTDS.DIT.

Загалом, бекапіть AD можна і потрібно. Як мінімум ви повинні регулярно створювати резервні копії ключових контролерів доменів, власників ролей FSMO (Flexible single-master operations). Ви можете отримати список контролерів домену з ролями FSMO командою:

netdom query fsmo

Як перевірити дату останнього бекапа контролера домену Active Directory?

Ви можете перевірити, коли створювалася резервна копія поточного контролера домену Active Directory за допомогою утиліти repadmin:

repadmin / showbackup

В даному прикладі видно, що останній раз бекап DC і розділів AD виконувався 2017-02-18 18:01:32 (швидше за все він не робився з моменту розгортання контролера домену).

Ви можете отримати статус щодо створення резервної копії всіх DC в домені командою:

repadmin / showbackup *

Якщо ваші контролери домену запущені на віртуальних машинах, і ви створюєте бекап через снапшоти (див. Приклад з резервним копіюванням Hyper-V), то при бекапе ці дати не оновлюється із зрозумілих причин. У більшості сучасних засобів резервного копіювання є опція, що дозволяє вказати що це DC і при бекапе потрібно оновлювати дані в каталозі LDAP.

Бекап контролера домену AD за допомогою Windows Server Backup

Якщо у вас немає спеціального ПО для резервного копіювання, ви можете використовувати для створення резервних копій вбудований Windows Server Backup (цей компонент прийшов на заміну NTBackup). Ви можете налаштувати автоматичне завдання резервного копіювання в графічному інтерфейсі Windows Server Backup, але у нього будуть ряд обмежень. Основний недолік - нова резервна копія сервера завжди буде перезаписувати стару.

При створенні резервної копії контролера домену через WSB, ви створюєте резервну копію стану системи (System State). В System State потрапляє база Active Directory (NTDS.DIT), об'єкти групових політик, вміст каталогу SYSVOL, реєстр, метадані IIS, база AD CS, і інші системні файли і ресурси. Резервна копія створюється через службу тіньового копіювання VSS.

Ви можете перевірити, чи встановлений компонент Windows Server Backup за допомогою PowerShell командлет Get-WindowsFeature:

Get-WindowsFeature Windows-Server-Backup

Якщо компонент WSB відсутня, його можна встановити за допомогою PowerShell:

Add-Windowsfeature Windows-Server-Backup -Includeallsubfeature

Або встановіть його з Server Manager -> Features.

Я буду зберігати бекап контролер домену AD в мережеву папку на окремому виділеному сервері для резервних копіювання. Наприклад, шлях до каталогу буде таким \\ srvbak1 \ backup \ dc01. Налаштуємо NTFS дозволу на цій папці: надайте права читання-запису в цей каталог тільки для Domain Admins і Domain Controllers.

Резервне копіювання Active Directory за допомогою PowerShell

Спробуємо створити бекап контролером домену PowerShell. Для зберігання декількох рівнів копій AD ми будемо зберігати кожен бекап в окремому каталозі з датою створення копії в якості імені папки.

Import-Module ServerManager
[String] $ date = get-date -f 'yyyy-MM-dd'
$ Path = "\\ srvbak1 \ backup \ dc1 \"
$ TargetUNC = $ path + $ date
$ TestTargetUNC = Test-Path -Path $ TargetUNC
if (! ($ TestTargetUNC))
New-Item -Path $ TargetUNC -ItemType directory

$ WBadmin_cmd = "wbadmin.exe START BACKUP -backupTarget: $ TargetUNC -systemState -noverify -vssCopy -quiet"
Invoke-Expression $ WBadmin_cmd

Запустіть даний скрипт. Повинна з'явиться консоль wbadmin з інформацією про процес створення резервної (тіньової) копії диска:

The backup operation to \\ srvbak1 \ backup \ dc1 \ 2019-10-10 is starting. Creating a shadow copy of the volumes specified for backup ... 

У мене перша спроба створити бекап DC завершилася з помилкою (контролер домену - це віртуальна машина VMWare):

Detailed error: The filename, directory name, or volume label syntax is incorrect. The backup of the system state failed [10.10.2019 8:31].

Я відкрив журнал помилок WSB - C: \ Windows \ Logs \ WindowsServerBackup \ Backup_Error-10-10-2019_08-30-24.log.

У файлі міститься одна помилка:

Error in backup of C: \ windows \\ systemroot \ during enumerate: Error [0x8007007b] The filename, directory name, or volume label syntax is incorrect.

Забігаючи вперед, скажу, що проблема виявилася в некоректному шляху в одному з драйверів VMWware Tools.

Щоб виправити цю помилку, відкрийте командний рядок з правами адміністратора і виконайте:

DiskShadow / L writers.txt
list writers detailed

Після формування списку наберіть quit і відкрийте файл "C: \ Windows \ System32 \ writers.txt». Знайдіть в ньому рядок, що містить "windows \\".

У моєму випадку знайдена рядок виглядає так:

File List: Path = c: \ windows \\ systemroot \ system32 \ drivers, Filespec = vsock.sys

Як ви бачите, використовується невірний шлях до драйвера VSOCK.SYS.

Щоб виправити шлях, відкрийте редактор реєстру і перейдіть в розділ HKLM \ SYSTEM \ CurrentControlSet \ Services \ vsock.

Змініть значення ImagePath з
\ Systemroot \ system32 \ DRIVERS \ vsock.sys
на
System32 \ DRIVERS \ vsock.sys

Запустіть скрипт бекапа ще раз.

Якщо бекап виконаний успішно, в балці з'являться повідомлення:

The backup operation successfully completed. The backup of volume (C :) completed successfully. The backup of the system state successfully completed [10.10.2019 9:52]. 

Перевіримо дати останнього бекапа на DC:

repadmin / showbackup

Тепер тут вказано, що останній раз бекап контролера домену виконувався сьогодні.

На сервері резервних копіювання розмір каталогу з резервною копією контролера домену займає близько 9 Гб. По суті на виході ви отримали vhdx файл, який можна використовувати для відновлення ОС через WSB, або ви можете вручну змонтувати vhdx файл і скопіювати з нього потрібні файли або папки.

Якщо на майданчику є кілька DC, то не обов'язково бекапіть їх все. Для економії місця достатньо періодично бекапіть базу даних AD - файл ntds.dit. Для цього використовуйте наступні команди:

$ WBadmin_cmd = "wbadmin start backup -backuptarget: $ path -include: C: \ Windows \ NTDS \ ntds.dit -quiet"
Invoke-Expression $ WBadmin_cmd

Розмір такого бекапа становитиме всього 50-500 Мб в залежності від розміру бази AD.

Для автоматичного виконання бекапа, потрібно на DC створити скрипт c: \ ps \ backup_ad.ps1. Цей скрипт потрібно запускати за розкладом через Task Sheduler. Ви можете створити завдання планувальника з графічного інтерфейсу або з PowerShell. Головна вимога - завдання повинне запускати від імені SYSTEM з включеною опцією Run with highest privileges. Для щоденного бекапа контролера домену AD створіть наступне завдання:

$ Trigger = New-ScheduledTaskTrigger -At 1:00 am -Daily
$ User = "NT AUTHORITY \ SYSTEM"
$ Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "c: \ ps \ backup_ad.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $ Trigger -User $ User -Action $ Action -RunLevel Highest -Force

Отже, ми налаштували резервних копіювання стану AD, а в наступній статті ми поговоримо про способи відновлення AD з наявної резервної копії контролера домену.