Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Microsoft ИТ-инфраструктура Планирование, управление и контроль Восстановление объектов-захоронений Active Directory RSS

Восстановление объектов-захоронений Active Directory

Текущий рейтинг: 3.28 (проголосовало 25)
 Посетителей: 9762 | Просмотров: 14337 (сегодня 0)  Шрифт: - +

Вероятно, вы не любите об этом думать, но возможность случайной потери данных — это факт, и как специалист по ИТ вы должны быть готовы к любого рода сценариям восстановления. В номере за апрель 2007 журнала TechNet Magazine я рассказывал, как важно иметь план

для восстановления пользователей и групп Active Directory® . В этой статье, которую можно найти на веб-узле technetmagazine.com/issues/2007/04/ADRecovery, я рассмотрел механизмы связи объектов, репликации, удаления и принудительного восстановления. К сожалению, функция полномочного восстановления требует запуска контроллера домена (DC) в режиме восстановления службы каталогов (DSRM). Эта операция выводит контроллер домена из работы на весь период восстановления.

Вы должны знать о существовании другого подхода. Восстановление объектов-захоронений (не имеющее ничего общего с оживлением зомби) предоставляет единственно возможный способ восстановить удаленные объекты без вывода контроллера домена в автономный режим; кроме того, это единственный способ восстановить идентификационные данные удаленного объекта, такие как атрибуты objectGUID и objectSid. Этот подход прекрасно справляется с задачей повторного создания удаленного пользователя или группы и восстановления прежнего списка управления доступом (ACL), содержащим objectSid удаленного объекта. Имейте в виду, что восстановление объектов-захоронений имеет собственные определенные ограничения, о которых я расскажу позже, поэтому принудительное восстановление должно входить в число ваших приемов.

Восстановление объектов-захоронений впервые появилось в Active Directory в Windows Server® 2003 для упрощения восстановления определенных данных. Это свойство основано на том факте, что Active Directory хранит удаленные объекты в базе данных в течение определенного периода времени, перед тем как физически удалить их. В этой статье я подробно расскажу вам, как Active Directory удаляет и восстанавливает объекты, а также покажу, как можно восстановить удаленные объекты, используя стандартный набор инструментов Майкрософт.


Что такое объект-захоронение?

Когда Active Directory удаляет объект из каталога, он не удаляет его из базы данных физически. Вместо этого Active Directory помечает объект как удаленный, устанавливая для атрибута isDeleted объекта значение «истина», удаляя большинство атрибутов из объекта, переименовывая объект, а затем перемещая объект в специальный контейнер в контексте именования (NC) объекта под названием CN=Deleted Objects. Объект, который теперь зовется объектом-захоронением, невидим для обычных операций в каталогах. Он невидим в любых оснастках консоли управления Microsoft® (MMC), а большинство служебных программ протокола LDAP даже не знают о существовании этого объекта-захоронения. Объект-захоронение по существу может называться исчезнувшим. Однако данные все еще здесь — просто они невидимы. Зачем Active Directory хранит объекты-захоронения, или иными словами удаленные объекты, в базе данных?

Будучи невидимым для других процессов, объект-захоронение все еще видим для процесса репликации Active Directory. Для того чтобы убедиться в том, что удаление выполнено на всех контроллерах домена, содержащих удаленный объект, Active Directory реплицирует объект-захоронение на другие контроллеры домена. Таким образом, объект-захоронение используется для репликации удаления по всей среде Active Directory.


Время жизни объекта-захоронения

Active Directory обычно удаляет объект из каталога в ответ на операцию по удалению протокола LDAP или операцию по удалению диспетчера учетных записей безопасности (SAM). Эта операция называется исходным удалением и отличается от операции удаления, которая выполняется в процессе репликации Active Directory. В этой статье не рассматриваются динамические объекты, которые удаляются совершенно другим способом, а именно удаляются самой средой Active Directory, когда истекает срок их жизни (TTL).

Когда Active Directory получает задание на удаление, среда сначала делает проверку, чтобы убедиться, что объект можно удалить. Этот процесс совершенно необходим, поскольку он проверяет верность следующих критериев:

  • Для атрибута isDeleted объекта еще не установлено значение «истина». (Вы не можете удалить уже удаленный объект!)
  • Контрольный флаг «частный объект» дескриптора безопасности, зависящего от ресурса, не установлен в дескрипторе безопасности объекта. (Это недокументированное «свойство». Флаг частного объекта — это бит 1 байта Sbz1 структуры дескриптора безопасности.)
  • Бит «запретить удаление» (0x80000000) не установлен в атрибуте systemFlags объекта.
  • Для атрибута isCriticalSystemObject объекта не установлено значение «истина».
  • Дескриптор безопасности объекта дает соответствующие права доступа пользователю для удаления объекта. (Конкретнее, пользователю позволяют удалить сам объект и удалить дочерний объект из родительского объекта.)
  • Объект не является объектом перекрестных ссылок (objectClass = crossRef) для существующего контекста именования.
  • У объекта нет никаких подчиненных объектов. (Если операция удаления по протоколу LDAP включает идентификатор объекта управления «удалить дерево» по протоколу LDAP, Active Directory автоматически удалит подчиненные объекты, если их атрибут isCriticalSystemObject не установлен в значение «истина». Это защищает критические системные объекты от непреднамеренного удаления в ходе операции удаления объектов дерева. Разумеется, вы можете удалить эти объекты индивидуально.)
  • Объект не является критическим внутренним объектом (например, это не объект nTDSDSA для контроллера домена или не объекты заполнения для предшествующих объектов головных объектов NC).

Помимо того что все упомянутые критерии должны выполняться, Active Directory также должна находиться в соответствующем состоянии для выполнения удаления. Например, если Active Directory находится в процессе переименования домена, она не будет удалять доверительную учетную запись домена или объект перекрестных ссылок.

Если определено, что объект действительно может быть удален, Active Directory начинает переводить объект в состояние объекта-захоронения. Сначала Active Directory удаляет ненужные атрибуты объекта, оставляя лишь обозначенные на Рис. 1 и те, которые по схеме должны сохраняться у объекта-захоронения. (Дополнительные сведения об этом можно найти в разделе «Восстановление атрибутов объекта».)

Рис 1  Атрибуты, сохраненные в объекте-захоронении

Жестко заданные для сохранения
attributeID
attributeSyntax
dnReferenceUpdate
dNSHostName
flatName
governsID
groupType
instanceType
lDAPDisplayName
legacyExchangeDN
mS-DS-CreatorSID
mSMQOwnerID
nCName
objectClass
objectGUID
objectSid
oMSyntax
proxiedObejctName
replPropertyMetaData
sAMAccountName
securityIdentifier
sIDHistory
subClassOf
systemFlags
trustPartner
trustDirection
trustType
trustAttributes
userAccountControl
uSNChanged
uSNCreated
whenCreated
Сохраняемые благодаря установке searchFlags
msDS-AdditionalSam­AccountName
msDS-Auxiliary-Classes
msDS-Entry-Time-To-Die
msDS-IntId
msSFU30NisDomain
nTSecurityDescriptor
uid

Затем она изменяет относительное различающееся имя (RDN) объекта на CN=<old RDN>\0ADEL:<objectGUID>, где \0A означает символ ASCII перевода строки, а <objectGUID> – это objectGUID, выраженный строкой. Атрибут lastKnownParent затем устанавливается на различающееся имя (DN) родительского контейнера объекта, а атрибут isDeleted устанавливается в значение «истина». Active Directory затем удаляет из объекта все атрибуты ссылок на предыдущий и следующий элемент. Наконец, если в атрибуте systemFlag объекта не установлен бит «не разрешать перемещение после удаления», Active Directory перемещает объект в контейнер CN=Deleted Objects для NC. (Дополнительные сведения приведены на врезке «Атрибут systemFlags и поведение объекта».)

Необходимо учитывать, что папка CN=Deleted Objects — плоская и не имеет иерархии объектов. Можно предположить, что при удалении двух разных объектов с одним CN могут возникнуть конфликты с именем. Этого не произойдет. Поскольку objectGUID включен в RDN каждого объекта-захоронения, RDN каждого объекта-захоронения является уникальным в рамках контейнера CN=Deleted Objects.

Очевидно, объекты не остаются в контейнере CN=Deleted Objects навсегда. По умолчанию срок жизни объекта-захоронения составляет 60 дней для лесов, построенных при помощи Windows® 2000 и Windows Server 2003, и 180 дней для лесов, построенных при помощи Windows Server 2003 SP1. Срок жизни объекта-захоронения можно изменить, установив атрибут tombstoneLifetime в объекте CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=<корневой домен>.

Каждые 12 часов контроллер домена начинает процесс сборки мусора. (Это можно изменить, установив новое значение для атрибута garbageCollPeriod объекта CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=<корневой домен>.) Сборщик мусора проверяет все объекты-захоронения на контроллере домена и физически удаляет те, чей срок жизни больше, чем срок жизни объектов-захоронений.


Использование LDP для поиска объектов-захоронений

LDP — это служебная программа, схожая с проводником Windows, для работы с Active Directory. LDP была изначально создана группой разработчиков Active Directory для тестирования кода протокола LDAP, когда Active Directory находилась в разработке. Теперь, будучи частью средств поддержки Windows Server 2003, LDP развилась в надежное средство для работы с Active Directory.

Хотя объекты-захоронения невидимы для обычных операций с каталогами, можно обнаружить объекты-захоронения в Active Directory, используя поисковые операции LDAP и специальные расширения протокола LDAP, называемые элементами управления. Элементы управления — это механизм, определяемый в стандарте LDAP и используемый для расширения протокола LDAP с целью обеспечения дополнительной функциональности помимо той, что определена в стандарте LDAP, сохраняя при этом совместимость с другими программами, поддерживающими LDAP. Active Directory поддерживает 22 элемента управления, включая элемент управления «Возврат удаленных объектов». Если этот элемент управления используется для расширения операции поиска LDAP, он выявляет удаленные объекты, которые в другом случае оставались бы невидимыми.

Чтобы продемонстрировать, как это работает, я войду в домен foo.local, используя учетные данные администратора предприятия, а затем воспользуюсь оснасткой ММС «Active Directory — Пользователи и компьютеры» (ADUC) для создания объекта пользователя (CN=John Smith,CN=Users,DC=foo, DC=local), как показано на Рис. 2. Затем, используя ADUC, я удаляю объект пользователя.

Рис. 2 Использование ADUC для создания пользователя
Рис. 2 Использование ADUC для создания пользователя

Теперь я могу запустить программу LDP и использовать ее для показа объекта-захоронения для удаленного пользователя. Первый этап — подключить LDP к определенному контроллеру домена и пройти проверку подлинности, используя соответствующие учетные данные. Для соединения с DC я использую пункт Connect (Подключить) из меню Connection (Подключение). Поскольку я запускаю LDP на контроллере домена, я просто нажимаю кнопку OK, чтобы подключиться к локальному контроллеру домена. Если вы запускаете LDP удаленно, вы должны указать имя контроллера домена, к которому нужно подключиться. После успешного подключения LDP показывает атрибуты rootDSE — сюда входят атрибуты, описывающие состояние и настройку самого контроллера домена (см. Рис. 3).

Рис. 3 LDP подключен к контроллеру домена
Рис. 3 LDP подключен к контроллеру домена

Теперь, чтобы пройти проверку подлинности на контроллеру, используя учетные данные администратора домена или предприятия, я выбираю Bind (Привязать) из меню подключения. Поскольку я уже вошел в сеть как администратор предприятия для леса (администраторы домена и администраторы предприятия по умолчанию имеют право выводить список и восстанавливать объекты в контейнере CN=Deleted Objects), я просто оставляю поля имени пользователя и пароля пустыми в диалоге привязки и нажимаю OK. В другой ситуации я могу ввести соответствующие учетные данные в диалогом окне привязки.

Далее я хочу вывести содержание контейнера CN=Deleted Objects,DC=foo=DC=local. Обычно увидеть контейнер CN=Deleted Objects нельзя, поскольку сам контейнер отмечен как удаленный. Единственный способ произвести поиск в контейнере CN=Deleted Objects — это использовать элемент управления протокола LDAP «Вернуть удаленные объекты».

Для использования этого элемента управления при помощи LDP перейдите в меню Browse (Обзор) и выберите Search (Поиск). Появится диалоговое окно поиска, показанное на Рис. 4. Поле Base Dn позволяет вам указать место в дереве каталогов, с которого следует начать поиск. Я ввожу DN контейнера Deleted Objects для домена – в данном примере DN – это CN=Deleted Objects,DC=foo,DC=local.

Рис. 4 Диалог поиска в LDP
Рис. 4 Диалог поиска в LDP

В поле фильтра я указываю критерий поиска для LDP. Класс по умолчанию — (objectClass=*), который дает поиску указание возвращать все объекты, у которых есть значение атрибута objectClass. Поскольку даже удаленные объекты в Active Directory имеют значение для objectClass, фильтр по умолчанию вернет каждый объект в области поиска. В этом примере я изменяю фильтр на (objectClass=user), ограничивая поиск только объектами-пользователями. Таким образом мне будет легче найти удаленного пользователя Джона Смита среди тысяч объектов-захоронений в контейнере CN=Deleted Objects.

Можно обнаружить, что в контейнере CN=Deleted Objects гораздо больше объектов, чем Active Directory может вернуть в результате одного поиска. Чтобы решить эту проблемы, можно использовать постраничный поиск LDAP, возвращающий результаты по группам. Тем не менее, LDP не позволяет указать одновременно постраничный и расширенный поиск. Поэтому придется поработать с фильтром LDAP, чтобы обнаружить нужный объект.

Переключатели Scope позволяют указать долю дерева каталогов для поиска. Начальный поиск вернет только объект, указанный при помощи поля Base Dn. Одноуровневый поиск вернет объекты, находящиеся в непосредственном подчинении объекту Base Dn. Поиск в поддереве вернет все объекты в подчинении объекту Base Dn. Поскольку папка CN=Deleted Objects плоская, я использую одноуровневый поиск для выявления всех объектов-захоронений.

Я сделал набросок обычного поиска LDAP. Если бы мне пришлось запускать его сейчас, программа LDP выдала бы ошибку, которая бы сообщала, что CN=Deleted Objects,DC=foo,DC=com не существует, поскольку он отмечен как удаленный. В поиск мне нужно включить элемент управления LDAP «Возврат удаленных объектов». Для этого я нажимаю кнопку Options (Параметры) в диалоговом окне поиска и выбираю Extended (Расширенный) для типа поиска, как показано на Рис. 5. Этот режим позволяет указать элементы управления для поиска. Кроме того, я изменяю список атрибутов на *. В результате LDP покажет все обычные атрибуты для каждого выявленного объекта вместо набора атрибутов, используемых в LDP по умолчанию.

Рис. 5 Поиск LDP 
Диалог Options (Параметры)
Рис. 5 Поиск LDP Диалог Options (Параметры)

Теперь я нажимаю кнопку Controls (Элементы управления), чтобы вывести диалог элементов управления. Диалоговое окно элементов управления LDP не очень удобное, поэтому внимательно выполняйте указания для добавления элемента управления «Вернуть удаленные объекты».

Откройте раскрывающийся список Load Predefined (Загрузить назначенное), выберите Return Deleted Objects (Вернуть удаленные объекты) и нажмите кнопку Check in (Вернуть с изменениями). Это добавит идентификатор объекта (OID) для элементу управления «Вернуть удаленные объекты» (1.2.840.113556.1.4.417) в списке активных элементов управления, как показано на Рис. 6. LDP затем добавляет элемент управления ко всем последующим операциям расширенного поиска. Нажмите кнопку OK, чтобы сохранить настройки элемента управления, и нажмите ОК еще раз, чтобы закрыть диалоговое окно параметров поиска.

Рис. 6 Добавление элемента управления «Вернуть удаленные объекты»
Рис. 6 Добавление элемента управления «Вернуть удаленные объекты»

Диалоговое окно элементов управления ведет себя весьма оригинальным способом. Например, даже если в списке активных элементов управления появляется OID, это не обязательно означает, что элемент управления активирован. Иногда необходимо взять элемент управления для изменения, а затем вернуть его после изменения снова, чтобы убедиться, что он будет использоваться в следующей операции протокола LDAP.

Теперь я готов к поиску. Я нажимаю кнопку OK в диалоговом окне поиска LDP, и LDP выводит все объекты пользователя из контейнера CN=Deleted Objects для этого домена. Результаты показаны на Рис. 7.

Рис. 7 Результаты из контейнера CN=Deleted Objects
Рис. 7 Результаты из контейнера CN=Deleted Objects

Анализ результатов LDP

Мой поиск выявил два объекта-захоронения. Во-первых, можно видеть DN первого объекта-захоронения: CN=John Smith\0ADEL:41800281-6bc4-42c3-a99b-b283022b3af8,CN=Deleted Objects,DC=foo,DC=local. objectGUID удаленного объекта представлен в виде строки (41800281-6bc4-42c3-a99b-b283022b3af8). Под DN расположен список атрибутов, показывающих значения для objectClass, cn, distinguishedName, и т.д. Видно, что значение атрибута isDeleted есть «истина», что означает, что объект на самом деле удален. Кроме того, видно, что в объекте-захоронении сохранен objectSid — это важно для восстановления объекта-захоронения пользователя и группы, о чем я расскажу дальше. Атрибут lastKnownParent, представляющий DN объекта, который содержал удаленный объект до того, как он стал объектом-захоронением, также очень важен для восстановления объектов-захоронений.

В моем примере LDP вывел два объекта-захоронения, оба из которых были объектами-пользователями, под названием CN=John Smith, изначально содержащимися в контейнере CN=Users,dc=foo,dc=local. Как могли два разных объекта с одним и тем же RDN появиться из одного и того же контейнера? Этому есть очень простое объяснение. Перед тем как запустить LDP на поиск объектов-захоронений, я создал объект пользователя CN=John Smith в контейнере CN=Users,DC=foo,DC=local и удалил его. Затем я создал еще один объект пользователя с такими же атрибутами и также удалил его. Поскольку я уже удалил первый объект пользователя CN=John Smith, было вполне разумным создать второй, несмотря на то, что у него было точно такое же имя. Однако это два отдельных, уникальных объекта, отличающиеся своими идентификаторами objectGUID. Поскольку Active Directory включает objectGUID в DN объекта-захоронения, они появляются как отдельные объекты в контейнере CN=Deleted Objects.


Как восстанавливается объект-захоронение

Active Directory предлагает механизм для восстановления объекта-захоронения до состояния нормального объекта. Это, по существу, функция восстановления для удаленных объектов. Функция представляет собой специально созданную операцию протокола LDAP по изменению, которая должна включать две конкретные модификации атрибута: она должна удалять атрибут isDeleted (а не просто устанавливать для него значение «ложь»), а также перемещать объект в другой контейнер, изменяя различающееся имя объекта. Новое различающееся имя обычно (но не обязательно) использует атрибут lastKnownParent в качестве контейнера и сохраняет то же RDN минус компонент \0ADEL:<objectGUID>, который был добавлен Active Directory при создании объекта-захоронения.

Перед восстановлением объекта-захоронения Active Directory производит проверку того, чтобы определенные необходимые условия являлись верными. Расширенное право доступа пользователя к восстановленному объекту-захоронению должно быть определено в дескрипторе NC контейнера NC, содержащего объект-захоронение. Пользователь не может восстанавливать свой собственный объект. Атрибут isDeleted объекта-захоронения должен быть установлен в значение «истина». Идентификатор безопасности (SID) владельца объекта, как определено в дескрипторе безопасности, должен иметь SID из одного из доменов леса или доверенного домена.

Если рассматриваемый объект находится в контексте именования конфигурации или схемы, в атрибуте systemFlags объекта-захоронения должны быть установлены биты FLAG_CONFIG_ALLOW_RENAME и FLAG_ CONFIG_ALLOW_MOVE. Если объект находится в контексте именования конфигурации или схемы с установленным флагом FLAG_CONFIG_ALLOW_LIMITED_MOVE, объект может быть перемещен только в контейнер с тем же прародителем — другими словами, объект должен сохранить своего прапрародителя после перемещения, а если объект находится в контексте именования домена или раздела приложения, то биты FLAG_DOMAIN_DISALLOW_RENAME и FLAG_DOMAIN_DISALLOW_MOVE не должны устанавливаться в атрибуте systemFlags объекта-захоронения.

Пользователь должен иметь право, как определено в дескрипторе безопасности, изменять RDN (обычно CN, но не всегда) и добавлять объект в новый родительский контейнер. Новый родительский контейнер должен иметь возможность быть старшим для objectClass объекта-захоронения, как определено в схеме. Хотя перемещения внутрь и за пределы системного контейнера обычно не разрешены (если только параметр реестра Unlock system поддерева не равен нулю), восстановление объекта-захоронения в системный контейнер допускается.

Восстановление объекта схемы не допускается ни при каких обстоятельствах. Это, тем не менее, не является большой проблемой, поскольку вы не можете законным образом удалить объект из контекста именования схемы.

Если все проверки прошли успешно и необходимые требования соблюдаются, Active Directory произведет следующие действия по восстановлению объекта-захоронения:

  • Атрибут isDeleted удаляется.
  • Если операция изменения не предписывает иного, objectCategory настраивается на наиболее конкретный objectClass, указанный в объекте-захоронении.
  • RDN изменяется, и объект записывается в новый родительский контейнер.

После восстановления у объекта будут те же атрибуты objectGUID и objectSid, которые были у него изначально. Это означает, что внешние ссылки на объект, например в ACL, не нужно перенастраивать, как в случае повторного создания удаленного объекта. Восстановленный объект выглядит и ведет себя точно так же, как до того, как он был удален. Существует, тем не менее, одно важное различие: в восстановленном объекте не будет атрибутов, которые не были сохранены в объекте-захоронении.

Атрибут systemFlags и поведение объекта

Атрибут systemFlags — это дополнительный атрибут, определенный для вершины класса, что делает systemFlags дополнительным атрибутом для каждого класса Active Directory. Это 32-разрядное целочисленная маска, контролирующая перемещение и удаление объекта. Вот краткое описание важных флагов.


FLAG_DISALLOW_DELETE (0x80000000)


Если этот флаг установлен, система не допустит удаления или перемещения объекта в другой домен.


FLAG_CONFIG_ALLOW_RENAME (0x40000000)


Объекты в контекстах именований конфигурации и схемы не могут быть переименованы, пока этот флаг не будет установлен в атрибуте systemFlags.


FLAG_CONFIG_ALLOW_MOVE (0x20000000)


Объекты в контекстах именований конфигурации и схемы не могут быть перемещены, пока этот флаг не будет установлен в атрибуте systemFlags.


FLAG_CONFIG_ALLOW_MOVE (0x20000000)


Объекты в контекстах именований конфигурации и схемы не могут быть перемещены, пока этот флаг не будет установлен в атрибуте systemFlags. Этот флаг налагает дальнейшие ограничения на целевой контейнер операции перемещения — целевой контейнер должен иметь того же прародителя, что и текущий контейнер.


FLAG_DOMAIN_DISALLOW_RENAME (0x08000000)


По умолчанию объекты в контексте именования домена или приложения могут быть переименованы. Однако если этот флаг установлен в атрибуте объекта systemFlags, система не позволит переименовать объект.


FLAG_DOMAIN_DISALLOW_RENAME (0x08000000)


По умолчанию объекты в контексте именования домена или приложения могут быть перемещены в другой контейнер. Однако если этот флаг установлен в атрибуте объекта systemFlags, система не позволит переместить объект.


FLAG_DISALLOW_MOVE_ON_DELETE (0x02000000)


Если этот флаг установлен, система не будет перемещать объект в контейнер CN=Deleted Objects его контекста именования. Он просто установит атрибут isDeleted, переименует объект и удалит атрибуты, не предназначенные схемой для сохранения. Это означает, что не все удаленные объекты появляются в контейнере CN=Deleted Objects для контекста именования; некоторые остаются в исходном родительском контейнере.

Использование LDP для восстановления объектов-захоронений

Теперь, когда я рассказал, как работают процессы восстановления, я хочу показать, как я использую LDP для восстановления пользователя CN=John Smith, которого я удалил. Сначала я подключусь к DC и пройду проверку подлинности. Теперь я могу выполнить операцию по изменению, используя LDP. В параметрах операции по изменению я могу удалить атрибут isDeleted и в то же время указать новое различающееся имя.

Поскольку я провожу операцию на объекте-захоронении, я должен указать элемент управления протокола LDAP «Вернуть удаленные объекты». Чтобы установить этот элемент управления для операции по изменению в LDP, в меню параметров выберите Controls (Элементы управления), затем выберите Return deleted objects (Вернуть удаленные объекты) в раскрывающемся списке Load Predefined (Загрузить назначенное), нажмите кнопку Check In (Вернуть после изменения) и нажмите кнопку ОК, чтобы сохранить параметры элемента управления.

Теперь я выбираю Modify (Изменить) в меню Browse (Oбзoр), чтобы открыть диалоговое окно изменения, и ввожу различающееся имя объекта-захоронения, который нужно восстановить. Самый простой способ сделать это — это скопировать и вставить различающееся имя из результатов поиска, который я проводил до этого.

Далее мне нужно ввести список операций с атрибутами для выполнения. Для восстановления объекта-захоронения необходимо выполнить две операции с атрибутами: удалить атрибут isDeleted и заменить атрибут distinguishedName желаемым различающимся именем восстановленного объекта-захоронения, поэтому я ввожу isDeleted в поле атрибута и выбираю кнопку-переключатель Delete (Удалить). Когда я нажимаю клавишу ВВОД, операция атрибута добавляется в лист ввода, как показано на Рис. 8.

Рис. 8 Указание операций с атрибутами
Рис. 8 Указание операций с атрибутами

Затем я ввожу различающееся имя в поле атрибута, выбираю кнопку-переключатель Replace (Заменить) и ввожу новое различающееся имя объекта в поле значений. В этом случае я использую оригинальное различающееся имя пользователя: CN=John Smith,CN=Users,DC=foo,DC=local. Когда я нажимаю клавишу ВВОД, операция изменения добавляется в список ввода.

Поскольку мне нужно включить элемент управления LDAP «Вернуть удаленные объекты» в операцию по изменению, я должен использовать расширенное изменение LDAP. Для этого я установлю флажок на расширение. После того как настройка произведена, как показано на Рисунке 9, я нажимаю кнопку Run, чтобы произвести изменения. LDP покажет результаты в большом текстовом окне.

Рис. 9 Изменить distinguishedName
Рис. 9 Изменить distinguishedName

Когда я возвращаюсь к оснастке ММС «Active Directory — пользователи и компьютеры» и заглядываю в контейнер CN=Users, я обнаруживаю, что однажды удаленный объект пользователя находится там, где и был. Однако у этого объекта будет несколько важных отличий от оригинального объекта, о которых я вскоре расскажу.


Использование ADRESTORE для восстановления объектов-захоронений

Как только вы поймете, как использовать LDP, восстановление объекта-захоронения станет делом очень несложным. Однако эта процедура не очень удобная. К счастью, умельцы из Sysinternals (компания, которая теперь входит в Майкрософт) разработали средство командной строки для упрощения процесса восстановления. Это средство под названием ADRESTORE можно загрузить с веб-узла Майкрософт по адресу microsoft.com/technet/ sysinternals/utilities/AdRestore.mspx. Его очень просто установить. Просто скопируйте исполняемый файл в соответствующий каталог на вашем компьютере, например C:\WINDOWS\SYSTEM32.

Программа ADRESTORE работает в двух режимах. При запуске без параметров она выведет список всех объектов-захоронений в контейнере CN=Deleted Objects домена по умолчанию. Можно добавить строку для поиска в командной строке, чтобы выбрать объекты для показа, например:

C:\> adrestore John

Результатом будут все объекты-захоронения в контейнере CN=Deleted Objects, которые содержат строку «John» в атрибуте CN или OU — программа использует поисковый фильтр LDAP cn=*John* и ou=*John*. Это не самый гибкий способ поиска объектов-захоронений, но во многих ситуациях он работает очень хорошо. На Рис. 10 показаны результаты поиска, возвращенного программой ADRESTORE.

Рис. 10 Атрибуты, сохраненные в объекте-захоронении
Рис. 10 Атрибуты, сохраненные в объекте-захоронении

Если нужно восстановить объект-захоронение, а не только найти его, необходимо указать параметр –r вместе с дополнительной строкой, например, вот так:

C:\> adrestore –r John

Эта команда предложит восстановить каждый подходящий объект-захоронение. ADRESTORE всегда восстанавливает объект в контейнер, указанный атрибутом lastKnownParent объекта-захоронения, нет никакого способа указать другой контейнер.

ADRESTORE предлагает удобный интерфейс командной строки для использования функции восстановления Active Directory. Хотя он не очень гибкий, его легче использовать, чем LDP. Тем не менее, ADRESTORE не решает двух основных проблем, связанных с восстановлением объектов-захоронений: восстановление атрибутов, удаленных из объекта во время удаления самого объекта, и восстановление объектов, удаленных из контекста именования конфигурации.


Восстановление атрибутов объекта

В плане восстановления данных восстановление объекта-захоронения имеет больше преимуществ, чем принудительное восстановление: восстановление объекта-захоронения не требует выведения контроллера домена в автономный режим, а восстановление объектов-захоронений гораздо лучше, чем простое воссоздание новой версии удаленного объекта. Если вы вновь создаете объект, он всегда будет иметь новые атрибуты objectGUID и objectSid (если это участник политики безопасности, такой как пользователь). В результате любые внешние ссылки на объект, такие как ACL, необходимо будет обновлять для отражения нового идентификатора объекта. Это может стать очень большой проблемой.

Некоторые атрибуты удаляются вместе с удалением объекта, и эти атрибуты не восстанавливаются вместе с восстановлением объекта-захоронения. Но Active Directory сохраняет основные атрибуты в объекте-захоронении, самые важные из которых — атрибуты, относящиеся к идентификации, такие как objectGUID и objectSid. Также по умолчанию сохраняются многие другие атрибуты (см. Рис. 1). Большинство жестко установленных для сохранения атрибутов не очень интересны, особенно при обсуждении восстановления удаленных объектов пользователя, однако можно указать дополнительные атрибуты для сохранения в объекте-захоронении, установив бит 3 (0x00000008) атрибута searchFlags соответствующего объекта attributeSchema object в схеме Active Directory. В некоторых атрибутах этот бит уже может быть установлен в схеме Windows Server 2003 R2 (они также показаны на Рис. 1).

Установка некоторых приложений может изменить бит 3 в searchFlags существующих атрибутов или даже добавить новые атрибуты, у которых установлен бит 3. Exchange Server, например, настраивает некоторые дополнительные атрибуты для сохранения в объекте-захоронении.

Active Directory не будет сохранять атрибуты ссылок вперед и назад в объекте-захоронении, даже если указать на необходимость этого в атрибуте searchFlags объекта схемы. В частности, Active Directory не сохраняет такие вещи, как атрибут членства в группе или атрибут пользователя memberOf attribute. Таким образом, восстановление объекта-захоронения не предоставляет возможности восстановления членства в группе в Active Directory, см. мою статью «Аварийное восстановление: Active Directory — пользователи и группы» на веб-узле technetmagazine.com/issues/2007/04/ADRecovery. Вам все равно придется найти альтернативный механизм для восстановления этой информации при восстановлении объектов-захоронений.

Если нужно использовать восстановление объектов-захоронений в качестве части стратегии восстановления данных, нужно либо убедиться в том, что основные атрибуты сохранены в объекте-захоронении, либо найти другой способ сохранить и восстановить важные атрибуты, например, использовать LDIFDE или другую схему резервного копирования или восстановления. Другие варианты включают продукты по восстановлению данных Active Directory от сторонних производителей, предлагающие автоматический механизм по копированию и восстановлению атрибутов, которые не сохраняются и не восстанавливаются из объекта-захоронения.


Восстановление объектов из контекста именования конфигурации

Еще одним существенным ограничением при восстановлении объектов-захоронений является то, что нельзя восстанавливать объекты, удаленные из контекста именования конфигурации. Эти объекты подчиняются особенным правилам в отношении перемещения и переименования, как определено в атрибуте объекта systemFlags. Если иное не указано в атрибуте systemFlags, объекты в контексте именования конфигурации не могут перемещаться или переименовываться, что означает, что их объекты-захоронения не могут быть восстановлены. Active Directory обеспечивает определенные значения для атрибута systemFlags, когда создает объекты конкретных классов, как показано на Рис. 11.

Рис 11  Параметры systemFlags по умолчанию

Класс Параметр по умолчанию
server FLAG_DISALLOW_MOVE_ON_DELETE FLAG_CONFIG_ALLOW_RENAME FLAG_CONFIG_ALLOW_LIMITED_MOVE
site FLAG_DISALLOW_MOVE_ON_DELETE
serversContainer FLAG_DISALLOW_MOVE_ON_DELETE
nTDSDSA FLAG_DISALLOW_MOVE_ON_DELETE
siteLink FLAG_CONFIG_ALLOW_RENAME
siteLinkBridge FLAG_CONFIG_ALLOW_RENAME
nTDSConnection FLAG_CONFIG_ALLOW_RENAME

Обратите внимание на то, что Active Directory применяет побитовую логическую операцию ИЛИ к этим значениям в сочетании с любым значением systemFlags, указанным в операции добавления. Таким образом, даже если в приложении указано другое значение для атрибута systemFlags, необходимые биты будут установлены правильно.

Единственными объектами в контексте именования конфигурации, которые можно восстанавливать при нормальных обстоятельствах, являются серверные объекты. Интересно, что когда Active Directory удаляет серверный объект, объект-захоронение не перемещается в контейнер CN=Deleted Objects для контекста именования конфигурации; объект-захоронение просто остается там, где находится объект. Это позволяет средству проверки согласованности знаний (KCC), являющемуся процессом, ответственным за расчет топологии репликации Active Directory, автоматическое восстановление в определенных ситуациях, где удаленные серверные объекты могли препятствовать правильной репликации, поэтому, если вы пытаетесь восстановить серверный объект, помните, что вы не найдете его в контейнере CN=Deleted Objects.


Восстановление объектов-захоронений в плане восстановления

Восстановление объектов-захоронений должно быть основной частью вашего набора средств по восстановлению данных. Этот механизм — единственный способ восстановить удаленные объекты без вывода контроллера домена в автономный режим и, что не менее важно, это единственный способ восстановить идентификационную информацию удаленного объекта. Это очень хорошо решает проблему восстановления удаленного пользователя или группы и последующего постановлениях старых ссылок ACL.

Однако восстановление объекта-захоронения — это лишь часть решения. Вам необходимо обеспечить собственный механизм для восстановления атрибутов, которые Active Directory не сохраняет в объектах-захоронениях, при этом ваша способность восстанавливать удаленные объекты из контекста именования конфигурации остается ограниченной. Помните, что, если вы решили восстановить удаленного пользователя или группу, вам все равно придется восстанавливать членство в группе и любые другие связанные атрибуты, которые могут вам понадобиться.

Автор: Джил Киркпатрик (Gil Kirkpatrick)  •  Иcточник: TechNet Magazine  •  Опубликована: 10.09.2007
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:  


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.