Сергей Яремчук
Резервирование и восстановление объектов
Active Directory в Windows Server 2008/2008 R2
Служба Active Directory является стандартом в корпоративных сетях, работающих под управлением Windows. Обеспечивая администратора эффективными инструментами, внешне простая в использовании, она является тем не менее довольно сложной по своей структуре и составу. К тому же никто не застрахован от сбоев в работе операционной системы, программ, отказа «железа» или ошибки человека. Поэтому нужно быть всегда готовым к тому, что придется предпринять меры по восстановлению работы в целом или отдельных элементов.
О необходимости резервного копирования
В каждой новой версии Windows Server появляются новые инструменты, упрощающие и автоматизирующие процесс управления, с которыми может справиться даже начинающий администратор. Одним из распространенных мнений среди таких «специалистов» является вообще отказ от резервирования контроллеров доменов. Аргумент простой. В организациях среднего и крупного размеров используется несколько контроллеров доменов, это аксиома. Вероятность того, что в один день выйдут из строя все, практически равна нулю. Если только их не вынесут по постановлению прокурора или воспользовавшись ошибкой в организации охраны, но этот случай, согласитесь, из ряда вон выходящий. Поэтому если выходит из строя один контроллер домена, все остальные работают в штатном режиме, а ему на замену подготавливается новый сервер. Отчасти они правы, но резервирование хотя бы двух контроллеров (на случай ошибки), имеющих роли FSMO (Flexible single-master operations, операции с одним исполнителем), все же обязательно. Так рекомендуют Microsoft и здравый смысл. Причем есть еще один главный довод в пользу резервирования. Простота управления приводит к росту процента ошибок. Удалить случайно объект Active Directory довольно просто. И необязательно это может быть умышленное действие, это может произойти, например, в результате ошибки при выполнении скрипта. И чтобы восстановить все настройки, потребуется приложить некоторые усилия.
Если ошибка обнаружена не сразу и изменение уже реплицировалось на другие контроллеры, в этой ситуации вам и понадобится резервная копия. Я уже не говорю о небольших организациях с одним контроллером домена.
Документом, показывающим возможности по резервированию и восстановлению данных в Windows Server 2008, является статья Джила Киркпатрика (Gil Kirkpatrick) «Резервное копирование и восстановление Active Directory в Windows Server 2008» в [1], которую и рекомендую к прочтению. Но если вопросы резервирования расписаны полностью, то восстановление показано, на мой взгляд, несколько поверхностно и не дает полной картины. Эта статья, собственно, и появилась из заметок, составленных на тот крайний случай.
Система архивации данных Windows Server
В Windows Server 2008 на замену NT Backup пришел абсолютно новый компонент «Система архивации данных Windows Server» (Windows Server Backup, WBS), основанный на VSS (Volume Shadow Copy Service, сервис теневого копирования тома). WBS – довольно мощное приложение, позволяющее восстанавливать систему, в том числе и на другой комьютер, поддерживающее некоторые сервисы, в списке которых значится и AD.
Установить WBS просто, следует лишь активировать компонент «Возможности системы архивации данных в Windows Server» плюс подпункт «Система архивации данных Windows Server». Последний включает MMC-консоль управления и новое средство командной строки Wbadmin. Дополнительно доступен пункт «Программы командной строки», который включает сценарии PowerShell, позволяющие создавать и управлять резервными копиями.
В командной строке установка выглядит еще проще:
> servermanagercmd -install Backup-Features
Или в Server Core:
> ocsetup WindowsServerBackup
Управлять резервированием можно из MMC-консоли или в командной строке. Так, чтобы создать резервную копию критичных томов, следует ввести:
> wbadmin Start Backup -backupTarget:E: -allCritical
С полной копией, думаю, все понятно. В контексте статьи нас больше интересует резервное копирование состояния системы при помощи параметра SystemStateBackup. Кстати, в первых сборках Windows Server 2008 этой функции не было, а через MMC она недоступна:
> wbadmin Start SystemStateBackup -backupTarget:E:
В этом случае производится пофайловое копирование состояния системы и некоторых сервисов, в числе которых есть и AD. Самое неудобное в этом случае, что каждый раз приходится создавать полную копию (свежеустановленная система приблизительно 7 Гб), а процесс происходит несколько медленнее, чем обычное резервирование. Но зато восстановить такую копию можно на другой компьютер с идентичной конфигурацией.
В команде копирование производится на другой том. Но в KB944530 [2] рассказано, как разрешить возможность резервного копирования на любой том. Для этого нужно добавить параметр типа DWORD с именем AllowSSBTo AnyVolume и значением 1 в ветку реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\wbengine\SystemStateBackup.
С резервированием обычно здесь проблем не возникает, все просто и понятно, трудности начинаются, когда необходимо восстановить работоспособность AD или случайно удаленных объектов. Использование SystemState-копий позволяет обойтись без восстановления всей системы, а просто вернуть предыдущее состояние служб AD. Графическая консоль, предназначенная для восстановления данных, копий SystemState не видит (находятся на диске в другом каталоге SystemStateBackup). Если попробовать запустить процесс восстановления в рабочей системе, получаем сообщение о том, что так как архив содержит службу доменов Active Directory, операцию необходимо производить в режиме восстановления службы каталогов (Directory Services Restore Mode, DSRM). Это один из минусов, так как контроллер домена в это время будет недоступен.
Восстановление состояния системы из SystemState-копии
Новый механизм загрузки BCD, появившийся в Windows, начиная с Vista, в котором убран старый добрый boot.ini, заставляет нас произвести еще ряд действий, чтобы попасть в DSRM. В составе ОС имеется специальная утилита, предназначенная для редактирования параметров загрузчика (в Интернете можно найти графические утилиты, но я считаю им не место на сервере). Создаем новую копию записи:
> bcdedit /copy {default} /d "Directory Service Repair Mode"
Запись успешно скопирована в {df127c16-2ec7-11de-bc25-000c2971dfb5} |
Теперь устанавливаем ее, указав в качестве параметра полученный ID:
> bcdedit /set "{df127c16-2ec7-11de-bc25-000c2971dfb5}" safeboot dsrepair
Если команды вводятся с использованием PowerShell, то {ID} следует вводить в скобках «{ID}», иначе получаем ошибку:
The set command specified is not valid |
По окончании проверяем:
> bcdedit /enum
В списке должен появиться новый пункт.
Перезагружаемся, выбираем пункт Directory Service Repair Mode и, нажав <F8>, отмечаем «Режим восстановления службы каталогов». Обратите внимание, что в этом режиме следует для входа использовать данные администратора локальной системы, а не доменную учетную запись.
Далее все просто. Получаем список резервных копий (команда wbadmin «видит» копии SystemState).
> wbadmin get versions
Время архивации: 22.05.2009 1:02
Идентификатор версии: 05/21/2009-21:02
Можно восстановить: Приложение(ия), Состояние системы
|
И восстанавливаем, использовав к качестве параметра полученный идентификатор версии:
> wbadmin start systemstaterecovery –version:05/21/2009-21:02
Если восстановление производится с локального диска, параметр BackupTarget, показывающий wbadmin, где взять резервную копию, указывать необязательно. Если копия находится на сетевом ресурсе, его прописываем так:
-BackupTarget:\\computer\backup -machine:server-ad
Несмотря на предупреждение о том, что:
Операция восстановления приводит к повторной синхронизации всего
реплицированного содержимого на локальном компьютере после завершения
восстановления. Возможно, это приведет к задержке и ошибкам.
|
Восстановление службы каталогов происходит обычно без проблем. После перезагрузки встречаем сообщение о том, что начатая операция по восстановлению успешно завершена.
Перейдя в консоль управления Active Directory, обнаруживаем, что все находится на своих местах… кроме новых объектов, созданных уже после того, как было произведено резервирование. В принципе такой результат ожидаем. А для восстановления отдельных объектов есть совсем другой путь (даже несколько).
Принудительное восстановление объектов при помощи NTDSUTIL
В состав Windows Server входит утилита командной строки NTDSUTIL, предназначенная для обслуживания, управления и контроля Active Directory Domain Services (AD DS) и Active Directory Lightweight Directory Services (AD LDS). В системе утилита становится доступной после установки роли AD DS. В Windows Server 2008 ее функциональность несколько изменилась. Так, в Windows Server 2003 с ее помощью можно было восстановить всю базу данных, но в 2008 с этим отлично справляется wbadmin, наверное, поэтому ее возможности по восстановлению чуть подсократили. Теперь, используя NTDSUTIL, можно восстановить организационное подразделение со всем содержимым и отдельный объект.
Ее работа основана на мгновенных снимках Active Directory, сделанных при помощи службы VSS. Снимок представляет собой компактную резервную копию работающей службы Active Directory со всеми каталогами и файлами. Создание такой копии в отличие от SystemState происходит очень быстро и занимает несколько секунд.
> ntdsutil
Переходим в контекст snapshot:
ntdsutil: snapshot
Запускаем команду создания снимка (краткая форма – «ac i ntds»):
снимок: activate instance ntds
Активный экземпляр "ntds". |
снимок: create
Через некоторое время получаем информацию о созданном снимке, выходим:
снимок: quit
ntdsutil: quit
Теперь, чтобы восстановить базу Active Directory, достаточно ввести «ntdsutil files repair» в командной строке режима DSRM, но нас интересует отдельный объект.
Просмотреть список удаленных объектов можно при помощи LDP.exe, воспользовавшись командлетами PowerShell Get-ADObject и Restore-ADObject (есть и другие варианты).
В LDP, например, следует подключить к серверу, выбрать «Параметры (Options) -> Элементы управления (Controls)» и в раскрывающемся списке «Предопределенная загрузка» (Load Predefined) установить параметр Return deleted objects. Затем переходим в «Вид -> Дерево», выбираем контекст домена. В итоге в дереве справа появится объект CN=Deleted Object, где и находим все удаленные объекты.
Теперь важное – при удалении объект теряет большую и важную часть своих свойств (в частности, пароль, managedBy, memberOf), поэтому после его восстановления он будет не совсем в том виде, как нам хотелось. Это все хорошо видно в LDP. Но здесь есть несколько вариантов:
- увеличить количество атрибутов, которые не будут затерты при удалении объекта в хранилище удаленных объектов;
- восстановить объект и вернуть ему атрибуты;
- и самый лучший – заблокировать объект от случайного удаления.
Восстановить удаленный объект можно несколькими способами. Самый удобный – утилита AdRestore Марка Руссиновича (Mark Russinovich) [3]. Скачиваем и вводим:
> adrestore -r user
Получаем объект с частью атрибутов.
Остальные методы расписаны в KB840001 [4], они не так просты, поэтому останавливаться на них не буду.
Восстанавливаем атрибуты объектов
В снимке, полученном при помощи ntdsutil, есть объект и его атрибуты. Образ можно монтировать и подключать в качестве виртуального LDAP-сервера, экспортирующего объекты. Вызываем ntdsutil:
> ntdsutil
ntdsutil: snapshot
Смотрим список доступных снимков:
снимок: list all
1: 2009/04/22:23:18 {8378f4fe-94c2-4479-b0e6-ab46b2d88225}
2: C: {732fdf7f-9133-4e62-a7e2-2362227a8c8e}
3: 2009/04/23:00:19 {6f7aca49-8959-4bdf-a668-6172d28ddde6}
4: C: {cd17412a-387b-47d1-9d67-1972f49d6706} |
Монтируем командой mount c указанием номера или {ID}:
снимок: mount 4
Снимок {cd17412a-387b-47d1-9d67-1972f49d6706} установлен как C:\$SNAP_200904230019_VOLUMEC$\ |
Снимок смонтирован. Теперь можно перейти при помощи Проводника в указанный каталог и просмотреть, что находится внутри. Выходим из ntdsutil, введя дважды quit, образ по-прежнему будет смонтирован. Теперь, используя утилиту dsamain, создаем виртуальный LDAP-сервер, указав в качестве параметра путь к файлу ntds.dit, который находится в смонтированном снимке. В качестве порта LDAP-сервера я выбрал 10000:
> dsamain -dbpath C:\$SNAP_200904230019_VOLUMEC$\Windows\NT DS\ntds.dit -ldapPort 10000
EVENTLOG (Informational): NTDS General / Управление службой : 1000
|
Завершен запуск доменных служб Active Directory (Майкрософт) версии 6.0.6001.18000
Можно подключиться к виртуальному LDAP-серверу при помощи консоли «Active Directory – пользователи и компьютеры», указав в качестве параметра номер порта 10000, и просмотреть находящиеся внутри объекты.
Экспортируем параметры нужного объекта в ldf-файл, подробнее об ldifde написано в KB237677 [5].
> ldifde -r "(name=user)" -f export.ldf -t 10000
Установка связи с "testcomp.domain.ru"
Вход от имени текущего пользователя с помощью SSPI
Экспорт каталога в файл export.ldf
Поиск элементов...
Записываются элементы.
1 элементов экспортировано
|
В полученном ldf-файле следует изменить параметр changetype: add на changetype: modify и затем новый файл импортировать в каталог:
> ldifde -i -z -f import.ldf
Созданный ldf-файл необходимо подправить
Есть и другие варианты импорта/экспорта с использованием DSGET/DSMOD, PowerShell и так далее.
> dsget user cn=user,ou=ou1,dc=domain,ds=ru -s localhost:10000 -memberof | dsmod group -c -addmbr cn=user,ou=ou1,dc=domain,ds=ru
Другой метод основан на том, что каждый объект Active Directory имеет номер версии. При различии номеров версии на двух контролерах домена новым и правильным считается тот объект, у которого номер версии выше. Это и использует механизм «принудительного восстановления» (authoritative restore), когда восстановленному при помощи ntdsutil объекту присваивается номер выше и он принимается AD как новый. Для работы механизма принудительного восстановления сервер также перезагружается в DSRM.
> ntdsutil "authoritative restore" "restore object cn=user,ou=group,dc=domain,dc=ru" q q
Аналогично восстанавливается подразделение:
> ntdsutil "authoritative restore" "restore subtree ou=group,dc=domain,dc=ru" q q
Защита объектов от удаления
Начну с того, что вместе с Windows Server 2008 R2 [6] администраторы получили еще один функциональный уровень домена, и в итоге такой сервер может быть настроен в одном из четырех уровней – Windows 2000, Windows Server 2003, Windows Server 2008, Windows Server 2008 R2. Его можно указать на этапе установки при помощи dcpromo или повысить, если был выбран меньший уровень, используя меню Reise the domain (forest) functional level в Active Directory Admin Center, о котором чуть дальше. Причем возможна и обратная операция – понижение функционального уровня домена и леса, если они находятся на уровне Windows Server 2008 R2, его можно вернуть на уровень Windows Server 2008, ниже – на 2003 или 2000 – нельзя. Большинство из новых возможностей будут доступны только в том случае, если домен находится на уровне R2. Так, начиная с Windows Server 2008 в свойстве объекта появился дополнительный пункт, позволяющий его защитить от случайного удаления. Точнее, он был и раньше, но здесь его уже не приходится искать.
В Windows Server 2008 он доступен при создании подразделения (OU, Organizational Unit) и называется «Защитить объект (контейнер) от случайного удаления» (Protect object from accidental deletion). Такой флажок появляется только при создании нового OU. Для уже имеющихся OU, а также вновь создаваемых групп, компьютеров и учетных записей его можно активировать во вкладке «Объект» окна свойств (видно при активном «Вид -> Дополнительные компоненты (Advanced)»).
Установка searchFlags для нужного атрибута позволит сохранить его при удалении
В R2 нужный пункт Protect from accidental deletion имеется в свойствах отдельной учетной записи, компьютера, группы и подразделения, на самом видном месте. Достаточно установить здесь флажок и при попытке удалить объект, администратор получает предупреждение о невозможности произвести требуемую операцию. При этом нужно помнить, что флажок защищает от удаления лишь тот объект, в котором он установлен. То есть если он активирован для группы, на отдельные элементы, входящие в ее состав, эта установка никак не распространяется. То есть по-прежнему можно будет удалить любой объект внутри, если он не защищен персональным флажком. Чуть другая ситуация при удалении незащищенного OU. Если в его составе нет защищенных объектов, OU будет полностью удален. Но если такие объекты есть, то следует установить в появившемся окне флажок «Использовать элемент управления сервера «Удалить поддерево» (Use delete subtree server control). Иначе вместо удаления самого OU со всеми элементами будет фактически произведена попытка очистки OU от объектов, не имеющих защиты. Причем, как показывают эксперименты, очистка эта будет неполной, так как, столкнувшись с первым же защищенным объектом, программа прекращает работу, выдав предупреждение. Это характерно и для Windows Server 2008, и для R2 RC.
Две консоли, подключенные к AD и виртуальному LDAP-серверу
В Windows Server 2003 защитить объект от удаления можно, лишь установив в разрешениях запрет на «Удаление», «Удалить поддерево» и «Удалить все дочерние объекты» (Deny для Delete, Delete subtree, Delete All Child Objects). Такой подход не очень удобен, особенно если администрированием системы занимаются несколько человек и объекты все же нужно удалять.
Защищаем объект от случайного удаления в Windows Server 2008
Объект защищен от случайного удаления
Защищаем объект от случайного удаления в Windows Server 2008 R2
При удалении дерева нужно подтвердить удаление всех объектов
Active Directory Recycle Bin
В Windows Server 2008 R2 появилась новая функция Active Directory Recycle Bin (AD RB), автоматически активируемая, когда домен находится на уровне Windows Server 2008 R2. По своей сути она схожа с корзиной, используемой в Windows, в которую помещаются удаленные файлы, и случайно удаленный объект может быть быстро и без проблем восстановлен. Причем восстановленный из AD RB объект сразу же получает и все свои аттрибуты. По умолчанию время «жизни» удаленного объекта в AD RB составляет 180 дней, после этого переходит в состояние Recycle Bin Lifetime, теряет атрибуты и через некоторое время полностью удаляется. Изменить эти значения можно при помощи параметра msDS-deletedObjectLifetime. Если при установке AD был выбран уровень ниже R2, а затем был поднят командой:
PS C:\> Set-ADForestMode –Identity domain.ru -ForestMode Windows2008R2Forest
то AD RB следует активировать отдельно. Для этого используется командлет Enable-ADOptionalFeature PowerShell:
PS C:\> Enable-ADOptionalFeature –Identity ‘CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service, /
CN=Windows NT,CN=Services,CN=Configuration, DC=domain,DC=ru’ –Scope Forest –Target ‘domain.ru’
Восстановить удаленный объект теперь очень просто:
PS C:\> Get-ADObject -Filter {displayName -eq "user"} -IncludeDeletedObjects | Restore-ADObject
Командлеты Get-ADObject и Restore-ADObject имеют большое количество параметров, например, позволяя найти OU, к которой принадлежала удаленная учетная запись, и затем восстановить весь OU. В документе Restore a Deleted Active Directory Object [7] все очень подробно изложено.
Заключение
Несмотря на возможности новых серверных ОС от Microsoft, резервное копирование контроллеров Active Directory должно проводиться планомерно и постоянно, без этого невозможно восстановление отдельных объектов или OU. Причем помимо Windows Server Backup следует создавать снимки при помощи ntdsutil. Процесс резервирования упрощается, а объемы данных уменьшаются, если контроллер домена не выполняет других функций.
- Джил Киркпатрик. Резервное копирование и восстановление Active Directory в Windows Server 2008 – http://technet.microsoft.com/ru-ru/magazine/cc462796.aspx.
- Статья KB944530. Error message when you try to perform a system state backup in Windows Server 2008 – http://support.microsoft.com/kb/944530.
- Утилита AdRestore – http://technet.microsoft.com/ru-ru/sysinternals/bb963906.aspx.
- Документ KB840001. How to restore deleted user accounts and their group memberships in Active Directory – http://support.microsoft.com/kb/840001.
- Документ KB237677. «Использование средства LDIFDE для импорта и экспорта объектов каталогов в Active Directory» – http://support.microsoft.com/kb/237677/ru.
- Страница, посвященная Windows Server 2008 R2 – http://www.microsoft.com/windowsserver2008/ru/ru/default.aspx.
- Документ Step 2: Restore a Deleted Active Directory Object –http://technet.microsoft.com/en-us/library/dd379509.aspx.