Заметки о Windows и других программных продуктах Microsoft...

Восстановление удаленных объектов в Active Directory

Восстановление удаленных объектов в Active Directory

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

Итак, что делать, если вы случайно удалили из Active Directory нужного пользователя (компьютер, группу, контейнер и т.п. )?

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

А дело в том, что Active Directory различает объекты не по имени, а по специальному идентификатору — Security Identifier (SID). Это уникальный идентификатор безопасности, который присваивается объекту в момент его создания и остается с ним даже после удаления. А поскольку каждый SID уникален, то вновь созданный пользователь, вне зависимости от имени, получит свой SID и будет распознан системой как совершенно другой пользователь. При этом будет потеряна вся информация, которая была закреплена за старой учетной записью, и придется все делать заново — раздавать права, включать пользователя в группы, настраивать программы, и много других ″интересных″ моментов.

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

Что происходит с объектом AD при удалении

Для начала разберемся с тем, что происходит после того как вы нажали Delete и объект исчез из оснастки управления.

При удалении объекта из каталога происходит следующее: сначала объект помечается как удаленный, для чего атрибуту isDeleted объекта присваивается значение true, затем большинство атрибутов из объекта удаляется, объект переименовывается и перемещается в специальный контейнер — Deleted Objects. Теперь он зовется объектом-захоронением и недоступен для обычных операций в AD.

Объект-захоронение невидим в оснастках управления MMC, а для большинства служебных программ его вообще не существует.  Однако физически данные все еще здесь — просто они невидимы. Зачем же Active Directory хранит удаленные объекты в базе данных?

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

Естесственно, удаленные объекты не могут храниться в контейнере Deleted Objects вечно. С периодичностью раз в 12 часов контроллер домена производит сборку мусора. Сборщик мусора проверяет все объекты-захоронения и физически удаляет те, чей срок жизни больше, чем срок жизни объектов-захоронений.

Срок жизни объекта-захоронения определяется атрибутом tombstoneLifetime и по умолчанию составляет 180 дней (60 дней для лесов Windows 2000). Посмотреть текущее значение tombstoneLifetime и изменить его можно следующим способом.

Открываем редактор ADSIEdit и в качестве точки подключения (Connection Point) выбираем «Select or Type a Distinguished Name or Naming Context»В пустом поле вводим путь CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=contoso, DC=com (для домена contoso.com).

запуск ADSIEdit и подключение к контексту именования

 

Нажимаем OK и в оснастке появляется новый контекст именования. Разворачиваем его и в открывшемся окне находим интересующий нас атрибут tombstoneLifetime. Как видите, он действительно равен 180 дням.

параметр tombsoneLifetime в ADSIEdit

 

Получается что пока не истек срок жизни объекта-захоронения, удаленный объект физически находится в базе AD, и соответственно может быть поднят из могилы восстановлен.

Процедура восстановления

В качестве примера возьмем учетную запись пользователя Ivanov Vasiliy и удалим ее. Прощай Vasiliy 🙁

удаляем пользователя в оснастке ADUC

 

Для восстановления  воспользуемся утилитой LDP. LDP — это служебная программа для работы с Active Directory, немного схожая с проводником Windows. В Windows Server 2008 она включена в состав операционной системы, в Server 2003 входит в средства поддержки (Support tools) и устанавливается отдельно, с установочного диска.

Для запуска LDP нажимаем Win+R и в строке выполнить вводим ldp. Затем идем в меню Connection, выбираем пункт Connect и в открывшемся окне вводим имя контроллера домена, к которому надо подключиться. Если вы запускаете LDP на контроллере домена, то можно просто ввести localhost.

запуск утилиты ldp

 

Теперь необходимо пройти проверку подлинности. Открываем меню Connection, выбираем Bind (Привязка), вводим учетные данные и жмем OK. Для работы нам понадобятся учетные данные пользователя с правами администратора домена или предприятия  (только они имеют право просматривать и восстанавливать объекты в контейнере Deleted Objects).

привязка к учетным данным в ldp

 

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

включение элемента управления ldap

 

Затем открываем меню View, выбираем режим просмотра Tree, в поле BaseDN выбираем DC=contoso,DC=com.

открываем дерево объектов домена

 

Заходим в корень, раскрываем контейнер Deleted Objects и видим перечень удалённых объектов. В этом перечне находим нужный нам объект-пользователя CN=Ivanov Vasily. Кликаем правой клавишей мыши на найденом объекте и в выпадающем меню выбираем пункт Modify. Кстати, будьте готовы к тому, что в Deleted Objects очень много объектов, что может затруднить поиск.

выбираем удаленный объект

 

Для восстановления объекта надо провести две операции:

1) Удалить отметку об удалении — набираем в строке Attribute: isDeleted, в поле Operation выбираем Delete и нажимаем Enter;
2) Переместить из Deleted objects в исходный контейнер — набираем в поле Attribute: distignuishedName, в поле Values пишем: CN=Ivanov Vasily, OU=Managers, DC=contoso, DC=com (это исходный DN пользователя). Исходный контейнер пользователя можно посмотреть в правом окне, он записан в атрибуте lastKnownParent. В качестве операции выбираем Replace и опять нажимаем Enter.

Далее отмечаем оба пункта Synchronous и Extended и жмём кнопку Run.

восстанавливаем удаленный объект c помощью ldp

 

Всё! Теперь объект пользователя полностью восстановлен, в чем можно убедиться, открыв консоль Active Directory Users and Computers.

Процедура восстанавления с помощью LDP достаточно проста, если разобраться 🙂 , но очень громоздка и неудобна. Попробуем немного упростить себе жизнь и используем для восстановления утилиту командной строкиAdRestore от компании Sysinternals. Эта программа не требует установки, достаточно скопировать исполняемый файл на диск компьютера и запустить его.

AdRestore предлагает достаточно удобный и простой интерфейс командной строки для восстановления объектов Active Directory. Хотя он не очень гибок, использовать его гораздо легче, чем LDP. При запуске без параметров AdRestore выдаст список всех объектов-захоронений в контейнере Deleted Objects дефолтного домена. Для поиска конкретного объекта в качестве параметра можно использовать имя (частично или полностью) объекта, например:

adrestore ivanov

В результате этой команды будут выведены все объекты-захоронения в контейнере CN=Deleted Objects, которые содержат строку  ivanov в атрибуте CN или OU — программа использует поисковый фильтр LDAP cn=*ivanov* и ou=*ivanov*. Не самый гибкий способ поиска, но в большинстве ситуаций он работает.

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

adrestore -r ivanov

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

восстановление объектов с помощью утилиты adrestore

 

Ну и для тех, кому не подходят первые два варианта, есть графическая утилита ADRestore.NET. Она абсолютно бесплатна, взять ее можно здесь. ADRestore.NET позволяет производить поиск объекта по нескольким параметрам, а также дает возможность выбрать определенный контроллер домена и авторизоваться под пользователем, отличным от текущего. Пользоваться программой очень просто. Нажимаем на кнопку Enumerate Tombsones, и нам выдается список удаленных объектов. Выбираем нужный объект и жмем Restore Object. Вот и все.

восстановление объектов с помощью утилиты adrestore.NET

 

Атрибуты объекта

При удалении объекта и помещении его в контейнер Deleted Objects удаляется большая часть его атрибутов. Так у объекта пользователя сохраняются только идентификаторы SID и GUID, а также LastKnownParent (контейнер, в котором находился объект до удаления) и  SAMAccountName (имя учетной записи SAM). Соответственно, при возвращении объекта к жизни любым из вышеописанных способов восстановятся только эти атрибуты, все остальное придется вводить заново.

Для наглядности возьмем восстановленную нами учетную запись и попробуем ее активировать. Система тут же выдаст нам ошибку и  сообщит о том, что пароль не соответствует требованиям безопасности домена. На самом деле все проще, пароль был удален вместе с другими атрибутами и теперь его просто нет.

попытка включить восстановленную учетную запись

 

Путем несложных манипуляций некоторые атрибуты объектов можно заставить сохраняться при удалении. Сделать это можно, внеся изменения в схему Active Directory. Скажу сразу, атрибуты уже удаленных записей это не вернет.

Для внесения изменений воспользуемся редактором ADSIEdit. Открываем его и подключаемся к разделу Schema нашей Active Directory.

подключение к схеме с помощью ADSIEdit

 

Для примера возьмем атрибут Description учетной записи пользователя.

выбор атрибута пользователя

 

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

выбор атрибута пользователя в ADSIEdit

 

Найдя атрибут, открываем его двойным щелчком мыши и заходим в свойства. Нас интересует параметр searchFlags, который отвечает за сохранение атрибута в объекте-захоронении. У каждого атрибута он свой, в нашем случае searchFlags вообще не задан, т.е. равен 0.

свойства атрибута Descriptions объекта AD

 

Для того, чтобы заданный атрибут не удалялся, необходимо у searchFlags  включить третий бит, или другими словами, выставить третий бит равным 1. Поскольку searchFlags представлен в десятичном виде, то сначала переведем его в двоичный. Получится двоичное число 0000.  Биты нумеруются справа-налево, начиная с нулевого бита.  Находим третий бит (он будет четвертым по счету справа) и ставим его равным 1. Получаем двоичное число 1000. Переводим его обратно и получаем 8 в десятичной системе. Ставим 8 в значении searchFlags. Если все сделано правильно, то в значении параметра появится надпись «Сохранять при удалении» (PRESERVE_ON_DELETE).

изменение свойств атрибута Descriptions объекта AD

 

Теперь даже при удалении и восстановлении учетной записи пользователя атрибут Description будет сохранен. Однако этот способ подходит не для всех атрибутов. Так например атрибуты, описывающие членство в группах Active Directory, подобным образом сохранить невозможно. Для решения этой проблемы в Windows Server 2008 R2 появился новый инструмент под названием Active Directory Recycle Bin, или корзина Active Directory. О ней я расскажу во второй части статьи…

 
 
Комментарии

А у меня не выходит, ошибка на пункте «…выбираем пункт Return Deleted Objects (Вернуть удаленные объекты) и нажимаем кнопку Check in.» — Usage error, please provide Object Identifier string.
Сервер свежесозданный, пользователь свежеудаленный, тестовое все.

Как следует из сообщения, не выбран идентификатор объекта.

просто идем дальше, работает.

Большое спасибо за статью! Особенно за adrestore 🙂

mrevilfromhell

Господа! Подскажите…..а в лесу может быть только одна корзина?
Ну например, есть 2 домена, один хозяин схемы, главный все дела, а второй входит в существующий лес. Так вот надо на каждом включать корзину или же хватит только на главном контроллере?

Насколько я помню, корзина активируется для всего леса. Проверить области, для которых корзина включена, можно PowerShell командой Get-ADOptionalFeature ′Recycle Bin Feature′.

mrevilfromhell

Спасибо за ответ)
Да вы правы, корзина на весь лес активируется. Правда, посмотрев области, где она включена командой Get-ADOptionalFeature ′Recycle Bin Feature′, показало, что она действует только на главном контроллере(или я что-то не то посмотрел)). Тем не менее, на 2ом домене попробовал восстановить удаленного пользователя и получилось.

Александр

Здравствуйте
Восстанавливал через adrestore. При восстановлении пришлось вручную писать имена фамилии (были на русском языке), имя входа пользователя (были на английском языке) и домен. Но в контейнере восстановленные пользователи не видны, я их нахожу через поиск объектов.
Как сделать чтобы восстановленные пользователи были видны?

С самого начала администрирования юзаю
https://4sysops.com/archives/free-quest-object-restore-for-active-directory-undelete-ad-objects/
Быстро, удобно и бесплатно.

***Call Modify…
ldap_modify_ext_s(ld, ‘CN=Фамилия Имя\0ADEL:bafcf64b-ac93-4fa0-ac0b-00abbf6f43c1,CN=Deleted Objects,DC=domain,DC=ru’,[5] attrs, SvrCtrls, ClntCtrls);
Error: Modify: Нет такого атрибута.
Server error: 00000057: LdapErr: DSID-0C090B91, comment: Error in attribute conversion operation, data 0, v1db1
Error 0x57 Параметр задан неверно.

Может ли возникать такая ошибка, если CN=Фамилия Имя написано по русски?

Кирилл

Через ldp тоже даёт ошибку
Error 0x57 Параметр задан неверно
Пользователь на русском языке. Как побороть?

По-подробней можно?

Спасибо.

Подробней надо смотреть. Как вариант — если ошибку выдает LDP, то можно попробовать adrestore.

Leave a Reply to Eugene