Восстановление удалённых объектов Active Directory в Windows Server 2008 R2
Я думаю, что практически каждый системный администратор когда-нибудь сталкивался с задачей восстановления удалённых объектов из Active Directory. Все сертифицированные инженеры знают, что стандартный способ восстановления удалённых объектов — это авторитативное восстановление из бэкапа в режиме Directory Service Restore Mode с использованием ntbackup и ntdsutil. Способ, скажем, не самый удобный. Во-первых нужно перезагружать сервер, во вторых восстанавливать из резервной копии состояние системы, потом помечать, какие объекты не будут перезаписаны процессом репликации…
Немного больше повезло тем, кто использует Symantec BackUp Exec. Он умеет восстанавливать объекты из архива без перезагрузки контроллера домена. Но во-первых далеко не все используют Symantec BackUp Exec, а во-вторых под рукой может не оказаться актуальной резервной копии службы каталогов (вы как часто её резервируете?).
В Windows Server 2008 R2 появилось очень много новых возможностей, одной из которых является корзина Active Directory (Active Directory Recycle Bin).
Кстати, компания ЛанКей совместно с компанией Microsoft проводит бесплатные презентации Windows Server 2008 R2 в рамках акции «Время вперёд», которая продлится до 31 декабря. Так, что если у вашей компании возникло желание узнать о всех возможностях Windows Server 2008 R2, вы можете заказать бесплатную консультацию, пройдя по данной ссылке и выбрав партнёра LanKey (Москва). Презентация проводится сертифицированными инженерами в офисе заказчика.
И так, вернёмся к нашей теме. Корзина Active Directory — это специальная функция/фича/возможность восстановления удалённых объектов. Теперь после удаления объекта из Active Directory, он не просто удаляется, а перемещается в специальный контейнер Deleted Objects (хотя и раньше объект не просто удалялся, но об этом ниже). И если вы потом захотите восстановить объект, то это можно будет сделать, вытащив его из контейнера Deleted Objects.
Функция Корзины Active Directory работает только в режиме работы леса и домена Windows Server 2008 R2! И кроме того эта функция по умолчанию выключена.
Включаем корзину Active Directory.
>У меня домен зовется net.local, поэтому вы меняйте эти значения на свои.
Включить функцию корзины можно двумя способами, либо через ldp.exe либо при помощи командлетов PowerShell.
1) При помощи ldp.exe (входит в состав Support Tools).
Запускаем Ldp.exe. Затем нажимаем Connection>Connect, пишем localhost, порт 389. Затем нажимаем View>Tree, в BaseDN выбираем CN=Configuration,DC=net,DC=local. Раскрываем CN=Configuration…. переходим к CN=Partitions…, нажимаем правой кнопкой по CN=Partitions… и выбираем Modify. Очищаем поле DN, в строке Attribute пишем: enableOptionalFeature, в строке Values пишем CN=Partitions,CN=Configuration,DC=net,DC=local:766ddcd8-acd0-445e-f3b9-a7f9b6744f2a, выбираем Add и нажимаем Enter и потом Run.
2) При помощи PowerShell:
Запускаем Пуск\Administrative Tools\Active Directory Module for Windows PowerShell и пишем:
Enable-ADOptionalFeature –Identity ‘CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration, DC=net,DC=local’ -Scope ForestOrConfigurationSet -Target ‘net.local’
Восстанавливаем удалённые объекты.
Способа восстановления удалённых объектов стандартными средствами два, при помощи ldp.exe или при помощи PowerShell. В тестовых целях я создал пользователя «robot», включил его в группу Domain Admins, а затем удалил. Теперь будем пытаться его восстановить.
1) Восстанавливаем удалённые объекты при помощи ldp.exe:
Запускаем Ldp.exe. Затем нажимаем Connection>Connect, пишем localhost, порт 389. Нажимаем Options>Controls, в меню Load Predefined выбираем Return deleted objects, жмём OK. Затем нажимаем View>Tree, в BaseDN выбираем DC=net,DC=local. Раскрываем корень DC=net,DC=local, и видим контейнер Deleted Objects, дважды по нему щелкаем и видим перечень удалённых объектов.
Я вижу здесь удалённого мной ранее пользователя robot. Чтобы его восстановить, я нажимаем по нему правой кнопкой и выбираем Modify.
Пишем в строке Attribute: isDeleted, ниже выбираем Delete, нажимаем кнопку Enter, затем пишем в поле Attribute: distignuishedName, в поле Values пишем: CN=robot,CN=Users,DC=net,DC=local (это исходный DN пользователя). Если вы не знаете исходный ОГП пользователя, то его можно посмотреть в правом окне, он записан в атрибуте lastKnownParent. Далее ставим обе галки Synchronous и Extended и жмём Run. Всё! Теперь объект пользователя полностью восстановлен, в чем вы можете убедиться, открыв консоль Active Directory Users and Computers.
2) Восстанавливаем удалённые объекты при помощи PowerShell:
Для того, чтобы найти объекты, используется командлет Get-ADObject. Чтобы он искал и удалённые объекты, нужно использовать ключ -IncludeDeletedObjects. А для восстановления объектов используется командлет Restore-ADObject. Когда необходимо восстановить объект, или тем более несколько объектов, удобнее всего использовать перенаправление (pipeline) вывода командлета Get-ADObject на вход командлета Restore-ADObject:
Get-ADObject -Filter {sAMAccountName -eq «robot»} -IncludeDeletedObjects | Restore-ADObject
Здесь я задал фильтр, чтобы укзать что я хочу восстановить только объект, который имеет атрибут sAMAccountName: robot. В общем, одна такая простая строчка, и объект полностью восстановлен!
Естественно, что использование PowerShell намного удобнее и предпочтительнее, чем восстановление при помощи ldp.exe.
Восстановление удалённых объектов Active Directory в Windows 2003.
Некоторые из вас, кто слышал о таком понятии, как Tombstone Lifetime, наверняка сейчас задались вопросом: «А что изменилось в Windows Server 2008 R2? Захоронённые объекты Active Directory можно было восстанавливать и раньше!».
Да, вы отчасти правы! Действительно в более старых версиях, например Windows Server 2003, в Active Directory удалённые объекты тоже окончательно не удалялись, и тоже помещались в тот же контейнер Deleted Objects. Хранились объекты в этом контейнере по умолчанию 128 дней (в WS 2003 sp1, и 64 дня в WS 2003 rtm), и по истечении этого срока, объекты окончательно удалялись процессом Garbage Collector. В принципе в Windows Server 2008 R2 всё осталось точно также, за исключением того, что теперь объекты, сначала помечаются удалёнными на 128 дней с сохранением всех своих атрибутов, и только затем помечаются как захоронённые и сохраняются ещё 128 дней. Т.е. первые 128 дней объекты можно восстановить с соханением всех исходных атрибутов, членствах в группах и даже пароля. При восстановлении удалённого пользователя в предыдущих версиях Windows Server, он сохранял лишь ограниченный набор атрибутов. По сути оставались лишь sAMAccountName, SID и GUID. Т.е., восстановив пользователя мы должны были заново прописать все его атрибуты, Полное имя, UPN, включить в нужные группы, задать новый пароль и т.д. Хотя сам процесс восстановления был почти таким же. Привожу небольшой пример восстановления удалённого пользователя в домене Windows 2003.
>Как и в предыдущем примере, я создал пользователя «robot», включил его в группу Domain Admins, а затем удалил. В данном примере у меня домен называется olddomain.local, так, что вы меняйте эти значения на свои.
Запускаем Ldp.exe. Затем нажимаем Connection>Connect, пишем localhost, порт 389. Нажимаем Options>Controls, в меню Load Predefined выбираем Return deleted objects, жмём OK. Затем нажимаем View>Tree, в BaseDN выбираем DC=olddomain,DC=local. Раскрываем корень DC=olddomain,DC=local, и видим контейнер Deleted Objects, дважды по нему щелкаем и видим перечень удалённых объектов.
Я вижу здесь удалённого мной ранее пользователя robot. Чтобы его восстановить, нажимаем по нему правой кнопкой и выбираем Modify. Пишем в строке Attribute: isDeleted, ниже выбираем Delete, нажимаем кнопку Enter, затем пишем в поле Attribute: distignuishedName, в поле Values пишем: CN=robot,CN=Users,DC=olddomain,DC=local (это исходный DN пользователя). Если вы не знаете исходный ОГП пользователя, то его можно посмотреть в правом окне, он записан в атрибуте lastKnownParent. Далее ставим обе галки Synchronous и Extended и жмём Run. Запускаем оснастку Active Directory Users and Computers и видим, что пользователь появился, но он отключен.
Нажимаем по нему правой кнопкой и выбираем Enable Account, и получаем ошибку:
Ошибка говорит о том, что у восстановленного пользователя нет пароля, поэтому его нужно сначала задать. Т.е. нужно нажать правой кнопкой по пользователю robot и выбрать Reset password. После того, как новый пароль будет задан, можно будет активировать учётную запись пользователя. Всё! Учтеная запись восстановлена, но она потеряла почти все свои неосновные атрибуты и членства в группах так, что теперь вручную нужно будет восстановить все атрибуты, членства в группах, имена, телефоны, и проч.
Теперь, я надеюсь, вы поняли, как Windows Server 2008 R2 нам облегчил жизнь, хотя бы такой функцией, как Корзина Active Directory.
PS: Кстати, кроме ldp.exe и PowerShell (в WS 2k8 R2) есть ещё один способ восстановления удалённых объектов Active Directory — это использование бесплатной утилиты от Sysinternals AdRestore. Причем данная утилита работает и в Windows 2003 и в Windows 2008. Утилита очень проста в использовании. Для восстановления пользователя robot, достаточно было написать:
adrestore.exe -r robot
Результат использования AdRestore ничем не отличается от ldp.exe или от Restore-ADObject.




При восстановлении через ldp все сделал по пунктикам, но:
Error: Modify: No Such Attribute.
Server error: 00000057: LdapErr: DSID-0C090B73, comment: Error in attribute conversion operation, data 0, v1771
Error 0×57 The parameter is incorrect.
Вы слишком мало информации дали. А вообще судя по ошибке, наверное вы неправильно указали имя атрибута, либо у данного объекта нет такого атрибута, может быть он и не удалён.
Более подробно о восстановлении можете прочитать на технете: http://technet.microsoft.com/en-us/library/dd379509(WS.10).aspx
А восстановить при помощи Powershell или adrestore получилось?
PowerShell нет, у меня 2008 standard, adrestore не понимает русскоязычные имена.
По поводу подробностей, скриншот
http://radikal.ru/F/s60.radikal.ru/i168/0912/77/26ccf03192c8.jpg.html
Судя по скриншоту, вы пытаетесь только удалить атрибут isDeleted. Но одновременно с тим вы должны задать исходное значение атрибута distignuishedName, как у меня на скриншоте выше. Это значение вы можете скопировать из атрибута lastKnownParent.
Кроме того, у вас не стоит галка Extended.
Кстати, а вы пробовали использовать использовать ADrestore так?:
adrestore.exe -r u.mindrova
Нет, я делал одновременно оба изменения атрибута, это вторая попытка, которой я хотел просто удалить статус «удалено», но ошибку выдал ту же самую, и я кажется подозреваю почему. Потому что учетка u.mindrova уже есть, совсем другая, с другим SID’ом. Сделал ли я правильные выводы, сообщу позже =)