Восстановление удаленных элементов (объектов «tombstone») в Active Directory
Active Directory это древовидный каталог, который содержит информацию о сетевых ресурсах, таких как компьютеры, сервера, пользователи, группы и прочее. Основная функция Active Directory это централизованная авторизация. Стандартные операции при работе с Active Directory это – создание, управление, перемещение, редактирование и иногда удаление различных объектов, например, таких как пользователи, компьютеры, группы, контакты и прочее. Active Directory хранится на контроллерах домена и располагается в файле NTDS.DIT. (Это конечно не полное описание Active Directory, но для вступления хватить).
Обычно администраторы думают дважды прежде чем, что-то удалять из Active Directory, но иногда случаются и ошибки. Прежде всего, надо убедиться, что у вас есть работающий бекап Active Directory. Для Windows 2000 или Windows 2003 вы можете использовать встроенный NTBACKUP и им резервировать System State. Но давайте предположим, что у нас нет такого бекапа или у нас есть различные факторы, которые нам не позволяют воспользоваться этим бекапом.
Как происходит процесс удаления объектов в Active Directory?
При удалении объекта Active Directory, не происходит его моментального уничтожения из базы Active Directory, объект помечается для планового удаления. Почему так сделано? Объекты могут редактироваться на любом контроллере домена в лесу, затем изменения должны быть реплицированы на другие сервера. Поэтому объект удаления в этой среде не может быть сразу удален, потому что при этом будет удален и объект репликации.
Объекты Active Directory запланированные к уничтожению из баз Active Directory помечаются маркером, который называется «tombstone». Метка «tombstone» означает, что атрибут IsDeleted объекта равен True, что говорит о том, что объект удален и помечен на уничтожение из базы Active Directory. Объекты помеченные как «tombstone» перемещаются в контейнер Deleted Objects, где остаются пока процесс «garbage collection» не удалит их окончательно. По умолчанию процесс «garbage collection» запускается каждые 12-ть часов на контроллере домена. Объекты, помеченные как «tombstone», остаются в базе Active Directory до окончательного удаления в течение 60 дней на Windows 2000/2003 Active Directory и в течение 180 дней на Windows 2003 SP1 Active Directory и выше, включая Windows Server 2008 R2 RC (кол-во дней указано по умолчанию). Время нахождения объектов «tombstone» в базе Active Directory должно быть значительно больше частоты работы процесса «garbage collection» для того, чтобы все помеченные на удаление объекты были реплицированы на другие контроллеры доменов.
Время хранения объектов «tombstone», а так же интервалы запуска процесса «garbage collection» можно изменить:
- Для объектов «tombstone» – установив новое значение для атрибута tombstoneLifetime в объекте CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=<корневой домен>
- Для процесса «garbage collection» – установив новое значение для атрибута garbageCollPeriod объекта CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=<корневой домен>
Когда Active Directory получает задание на удаление, система сначала делает проверку, чтобы убедиться, что объект можно удалить. Этот процесс необходим, поскольку он проверяет верность следующих критериев:
- Для атрибута isDeleted объекта еще не установлено значение «True». (Вы не можете удалить уже удаленный объект!)
- Контрольный флаг «частный объект» дескриптора безопасности, зависящего от ресурса, не установлен в дескрипторе безопасности объекта. (Это недокументированное «свойство». Флаг частного объекта - это бит 1 байта Sbz1 структуры дескриптора безопасности.)
- Бит «запретить удаление» (0×80000000) не установлен в атрибуте systemFlags объекта.
- Для атрибута isCriticalSystemObject объекта не установлено значение «True».
- Дескриптор безопасности объекта дает соответствующие права доступа пользователю для удаления объекта. (Конкретнее, пользователю позволяют удалить сам объект и удалить дочерний объект из родительского объекта.)
- Объект не является объектом перекрестных ссылок (objectClass = crossRef) для существующего контекста именования.
- У объекта нет никаких подчиненных объектов. (Если операция удаления по протоколу LDAP включает идентификатор объекта управления «удалить дерево» по протоколу LDAP, Active Directory автоматически удалит подчиненные объекты, если их атрибут isCriticalSystemObject не установлен в значение «True». Это защищает критические системные объекты от непреднамеренного удаления в ходе операции удаления объектов дерева. Разумеется, вы можете удалить эти объекты индивидуально.)
- Объект не является критическим внутренним объектом (например, это не объект nTDSDSA для контроллера домена или не объекты заполнения для предшествующих объектов головных объектов NC).
Если определено, что объект действительно может быть удален, Active Directory начинает переводить объект в состояние «tombstone».
Сначала Active Directory удаляет ненужные атрибуты объекта, оставляя лишь обозначенные в таблице ниже и те, которые по схеме должны сохраняться у объекта «tombstone».
Атрибуты, сохраненные в объекте «tombstone».
Жестко заданные для сохранения атрибуты
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 устанавливается в значение «True»
- Active Directory удаляет из объекта все атрибуты ссылок на предыдущий и следующий элемент
- Если в атрибуте systemFlag объекта не установлен бит «FLAG_DISALLOW_MOVE_ON_DELETE» , Active Directory перемещает объект в контейнер CN=Deleted Objects
Необходимо учитывать, что папка CN=Deleted Objects - плоская и не имеет иерархии объектов. Можно предположить, что при удалении двух разных объектов с одним CN могут возникнуть конфликты имен. Этого не произойдет. Поскольку objectGUID включен в RDN каждого объекта «tombstone», RDN каждого объекта «tombstone» является уникальным в рамках контейнера CN=Deleted Objects.
Вы должны понимать разницу между восстановлением объекта, который был давно удален и больше не существует в базе Active Directory и объектом «tombstone». Восстановление объектов «tombstone» называют реанимированием и эта статья об этом.
При удалении объекты «tombstone» очищаются от многих атрибутов, и если вы решите реанимировать удаленного пользователя или группу вам придется восстанавливать членство в группах или любые другие связи с другими объектами, которые вам могут понадобиться. Кроме того вы не сможете реанимировать объекты удаленные из раздела Configuration.
В Windows Server 2003 SP1 появилась функция Directory Service Backup Reminders. Эта функция формирует сообщения в Event логе Directory Service под номером (Event ID 2089) если в Active Directory присутствуют объекты «tombstone», половина периода до окончательного удаления объектов прошло, а бекапа Active Directory не было. Сообщения с этим номером ошибки будут появляться ежедневно, пока бекап Active Directory не будет произведен.
Просмотр объектов «tombstone» с помощью LDP.exe
Для примера я создал через оснастку Active Directory Users and Computers нового пользователя Dead User.
откроем LDP, посмотрим как выглядит этот пользователь
Выбираем Connection – Connect , в открывшемся окне вводим имя контроллера домена или просто нажимаем ОК если делаем это на самом контроллере домена.
Откроем древовидный вид – View – Tree или просто Ctrl+T
Откроется окно выбора раздела, нажимаем ОК, система автоматически подставит раздел DC=<корневой домен> или вручную выбираем необходимый раздел, Schema, Configuration и т.д. но сейчас нам нужен именно корневой домен.
Теперь надо привязать выбранный раздел – нажимаем Connection и Bind
В открывшемся окне выбираем под кем будем привязывать раздел, если вы работаете под учетной записью с правами администратора домена, то можете выбрать «Bind as currently logged on user» иначе выбирайте «Bind with credentials» и вводите соответствующие логин, пароль и домен.
Теперь мы можем видеть каталоги Active Directory и свободно переходить по ним. В левой части окна я выделил нашего пользователя, в правой части – видны его свойства. Обратите внимание, что у пользователя заполнены некие свойства, например такие как description или telephoneNumber.
Теперь давайте удалим нашего пользователя в оснастке Active Directory Users and Computers.
Если мы вернемся в LDP и обновим информацию, увидим, что наш пользователь удалился.
Как было сказано выше, пользователь не сразу удаляется из базы AD, а вначале только помечается как удаленный – теперь он объект «tombstone». Давайте найдем нашего помеченного к удалению пользователя. Для этого откроем меню Browse – Extended Op.
В открывшемся окне нажмем на кнопку Controls, нам надо в разделе Load Predefined указать, что мы хотим, чтобы система нам возвращала и удаленные объекты – Return Deleted Objects. Нажимаем ОК и Close для применения изменений и закрытия окон.
Теперь мы можем видеть в древовидной иерархии контейнер CN=Deleted Objects, а как мы знаем, если в объекте удаления не установлен бит «FLAG_DISALLOW_MOVE_ON_DELETE», запрещающий перемещение объекта , Active Directory перемещает объект в контейнер CN=Deleted Objects . Иначе надо искать объект удаления в том контейнере, где он был до удаления.
Как мы видим теперь многие свойства были удалены и некоторые наоборот добавлены, например, такие как isDeleted .
Однако со временем в контейнере CN=Deleted Objects может быть достаточно много объектов и для удобства поиска нужных объектов можно воспользоваться фильтром. Например, если мы выберем Virtual List View, в Base DN укажем нужный контейнер, а в Filter – укажем фильтр по какому либо критерию, в нашем примере мы хотим найти пользователя, поэтому поищем по свойству атрибута objectclass=user. В разделе Scope выберем Base – для поиска объектов на том же уровне что и Base DN, One Level – для поиска объектов на следующем уровне, подчиненном Base DN, Subtree – для поиска на всех подлежащих уровнях Base DN.
Поскольку контейнер CN=Deleted Objects одноуровневый – выбираем One Level. В Options выбираем Search Call Type – Extended. А в Control опять указываем, что нам надо отображать помеченные на удаление элементы. После запуска Run система нам отобразит отфильтрованные объекты.
Варианты восстановления удаленных объектов в Active Directory
Существует несколько способов реанимации объектов «tombstone» в Active Directory. Одни из них легкие, другие тяжелее, одни из них бесплатные, другие с применением платных утилит. В этой статье я расскажу о способах реанимации с применением свободно доступных утилит.
Независимо от того, что вы делаете убедитесь, что у вас есть рабочий бекап System State контроллера домена. System State содержит локальный реестр, базу данных регистраций COM+ классов, системные загрузочные файлы, сертификаты с сервера сертификатов (если они установлены), базу данных кластера (если он установлен), NTDS.DIT файл и папку SYSVOL.
Вы можете просто сделать бекап System State вашего контроллера домена использовав встроенную утилиту NTBACKUP или любую другую утилиту, которая поддерживает бекап System State. Вам не нужно делать бекап всех контроллеров домена, достаточно сделать бекап первого контроллера леса доменов и первого контролера в каждом домене.
Восстановление объектов из бекапа
Восстановление удаленных объектов из бекапа System State не такая уж и простая задача. По хорошему это не реанимация объекта, а именно восстановление. Однако для восстановления таким образом используя NTBACKUP и бекап System State, вам необходимо будет перезагрузить контроллер домена в режиме Directory Service Restore Mode (в этом режиме контроллер домена не функционирует для обслуживания клиентов). Только реанимация объектов позволит избежать загрузки контроллера домена в режиме Directory Service Restore Mode.
Особенности восстановления объектов и шаги которые вам предстоит сделать описаны в этой моей статье Как восстановить Windows Server 2003 Active Directory.
Восстановление объектов с помощью LDP.exe
Для реанимации объекта помеченного на удаление нам необходимо изменить некоторые его атрибуты. Нам надо удалить атрибут isDeleted, именно удалить, а не изменить его свойство с True на Lie и атрибут distinguishedName вернуть в прежний вид. Для этого нам надо найти этот объект, таким образом, как это описано в разделе – Просмотр объектов «tombstone» с помощью LDP.exe этой статьи.
После того как мы нашли нужный нам объект мы должны его модифицировать. Вот как это делается.
Выделаем нужный нам объект и нажимаем Browse – Modify.
В открывшемся окне нам надо определить DN – объект, который надо модифицировать. Далее нам надо создать Entry List с командами которые необходимы для модификации объекта.
Для удаления атрибута isDeleted мы должны его название внести в раздел Attribute, выбрать необходимую операцию в разделе Operations, нам надо удалить атрибут, поэтому выбираем Delete и нажимаем Enter для ввода этой операции в Entry List.
Тоже самое делаем и с атрибутом distinguishedName, только в нем мы должны задать новое значение этого трибута в разделе Values и нам не надо его удалять, нам его надо заменить на новое значение, поэтому в Operations выбираем Replace.
Обязательно ставим галку напротив пункта Extended и нажимаем Run.
Теперь если мы перейдем в OU=One_Users мы увидим нашего реанимированного пользователя.
Однако, как мы помним, у объектов, помеченных на удаление, объектов «tombstone», удаляется большинство атрибутов и они не восстанавливаются, поэтому у пользователя теряется членство в группах, теперь нет атрибута description и telephoneNumber, которые были заполнены ранее. Так же не восстанавливается пароль объекта, поэтому пользователь реанимируется в статусе Disabled. Для того чтобы активировать пользователя, прежде ему надо задать новый пароль. Однако самое главное, SID и GUID пользователя остался прежним, поэтому розданные ему доступы будут функционировать.
Восстановление объектов с помощью ADRESTORE
ADRESTORE – это бесплатная утилита командной строки, разработанная командой Sysinternals призванная упростить способ восстановления объектов «tombstone».
Для примера я снова удалил пользователя и группу из домена.
У нее очень простой синтаксис, если мы запустим программу без каких либо параметров
Adrestore.exe
Она выдаст нам список обнаруженных объектов «tombstone» в AD.
Для восстановления объектов нужно набрать
Adrestore.exe -r
Мы можем воспользоваться фильтрацией по имени объекта как для отображения объектов, так и для их восстановления.
Adrestore.exe dead – для поиска всех объектов «tombstone» содержащих в названии *dead*
Adrestore.exe -r dead – для реанимации всех объектов «tombstone» содержащих в названии *dead*. Если таких объектов будет несколько, система будет задавать вопрос о восстановлении по каждому их объектов.
Не забываем после реанимирования сбросить пароль и активировать пользователя, так же поправить его членство в группах и остальные атрибуты.
Восстановление объектов с помощью ADRestore.NET
ADRestore.NET это графическая утилита разработанная Guy Teverovsky подробно о ней можно узнать тут http://blogs.microsoft.co.il/blogs/guyt/archive/2007/12/15/adrestore-net-rewrite.aspx.
Основные ее возможности
- Поиск объектов «tombstone»
- Возможность выбора определенного контроллера домена
- Есть возможность авторизации под пользователем отличным от локального
- Реанимация объектов User, Computer, OU, Container
- Предварительный просмотр атрибутов объектов «tombstone»
Вот основное окно программы, думаю дополнительные комментарии излишни и так все понятно.
Не забываем после реанимирования сбросить пароль и активировать пользователя, так же поправить его членство в группах и остальные атрибуты.
Комментариев нет:
Отправить комментарий