Восстановление удаленных доменных учетных записей в Windows 2003/2008/2008R2
Темы, посвященные резервному копированию, я всегда начинаю с шутки: «Системные администраторы делятся на две группы, те которые уже делают резервные копии и те которые еще не делают». На самом деле эта шутка «Со слезами на глазах». В бытность работы начинающим системным администратором я потерял по собственной халатности несколько файлов и помню чувство, которое испытал в процессе вызова «на ковер». Никому такое не пожелаешь. Но несколько файлов это все же не так страшно как полная потеря вашей инфраструктуры и остановка фирмы. Сегодня я не буду говорить непосредственно о резервном копировании, вместо этого мы рассмотрим варианты восстановлении самого важного для Windows сетей, (После баз данных) – Active Directory, восстановление её объектов без наличия резервной копии.
Active Directory используют сотни тысяч компаний по миру, но поверьте, грамотно разбираются в восстановлении AD единицы системных администраторов. То, что я буду рассказывать, уже неоднократно печаталось. Но, я попытался сделать более серьезную работу. Во-первых, постарался донести материал максимально понятно. Во-вторых, объединить в статье информацию о Windows 2003, Windows 2008 и Windows 2008R2 Beta.
Запаситесь временем, оно вам понадобится. Но та польза, которую вы получите, подробно разобравшись в тексте статьи, с лихвой его окупит.
Если я удалил из Active Directory нужного пользователя (группу или компьютер)? Что мне делать?
Такой вопрос я часто слышу на своих курсах. Действительно, что же делать. Давайте подумаем, мы можем создать нового пользователя и назвать его точно также как и удаленного. Поможет ли?
Могу сразу сказать, нет. Да ваш пользователь может зайти в сеть под новой учетной записью, но попытавшись обратиться к папкам на файловом сервере, к спискам SharePoint, любым приложениям, на которые у него были права, он получит отказ. Также входе на свой компьютер у него создастся новый профиль пользователя.
И все это по одной простой причине, каждый объект Active Directory содержит дополнительную информацию, не видимую простому пользователю. Этой информацией является SID объекта. Что же это такое. Для начального понимания предлагаю пример из жизни. Налоговая Инспекция Российской Федерации должна отличать каждого налогоплательщика в стране. Но как быть, если в Стране тысячи Ивановых Иванов Ивановичей, как распознать, кто есть кто. Очень просто выдать каждому по уникальному номеру. Проблема решена. Похоже, решается и проблема уникальности в Active Directory.
Security Identifier (SID) это идентификатор безопасности, который уникально идентифицирует, учетную запись пользователя, группы или компьютера. (Проще говоря, уникальный номер)
SID присваивается каждой учетной записи в момент её создания. Система работает с SID’ами учетных записей, а не их именами. В контроле доступа пользователей к защищаемым объектам (файлам, ключам реестра и т.п.) участвуют также только SID’ы.
Может возникнуть вопрос – Я же вижу имена учетных записей при настройке прав к папке на диске с файловой системой NTFS. Где там SID`ы?
Отвечу очень просто, вы видите это, потому что работать непосредственно с SID было бы очень неудобно. Компьютер облегчает вам задачу и показывает имена, а не SID`ы.
Пример SID’ a (S-1-5-21-1986275044-495590890-615916108)
Попробуйте запомнить два десятка таких 🙂
Вернемся к главной теме.
Сейчас мы можем сделать вывод: Создание копии учетной записи взамен удаленной это самый плохой вариант, поскольку вся информация, которая была закреплена за старой учетной записью, пропадет и нам придется заново, раздавать права, включать пользователя в группы, настраивать программы, с которыми работал клиент. И еще много разных неприятных моментов, вплоть до восстановления зашифрованных пользователем файлов.
На этом моменте мы откинем мысли о повторном создании учетной записи и попытаемся разобраться в том, существуют ли более «гуманные» способы вернуть учетную запись.
Для того, чтобы ответить на этот вопрос, надо разобраться с тем, что происходит после того как вы нажали «Удалить» и объект пользователя или компьютера исчез из оснастки Active Directory User and Computers. Сразу хочу обрадовать, наш объект не исчез из Active Directory и не удалился бесследно. Он спрятался и ждет, ждет, пока вы одумаетесь и вернете его. Сразу вопрос, сколько же он будет ждать?
Ответ, это зависит от того на базе каких версий Windows Server построена ваша Active Directory.
Срок ожидания равен (это параметр правильно называется «tombstoneLifetime»):
60 дням для лесов, построенных при помощи Windows® 2000 и Windows Server 2003
180 дней для лесов, построенных при помощи Windows Server 2003 SP1, Windows Server 2008/R2
Что самое интересное, «tombstoneLifetime» (давайте называть вещи своими именами, теперь мы знаем что значит данный термин) это параметр на который вы можете влиять, т.е давать ему значение по своему усмотрению.
Посмотреть текущее значение «tombstoneLifetime» и поменять его можно следующим способом.
Вам понадобится оснастка ADSI Edit.
Рис. 1. Открываем оснастку и выбираем “Connect to..”
Рис. 2. Подключение.
В показанном на рисунке 2 окне, выбираем «Select or Type a Distinguished Name» и в пустом поле вводим путь «CN=Directory Service,CN=Windows NT, CN=Services, CN=Configuration, DC=<корневой домен>». Где <корневой домен> это имя вашего домена.
Мой домен назывался – testlab.local и строка пути выглядела следующим образом:
«CN=Directory Service,CN=Windows NT, CN=Services,CN=Configuration,DC=testlab,DC=local»
После ввода нажимаем “OK” и если вы все сдали правильно, в оснастке появится новый контекст именования, который нам необходимо развернуть и зайти в свойства введенного пути.
Рис. 3. Заходим в свойства введенного пути.
Рис. 4. Изменение атрибута «tombstoneLifetime»
В открывшемся меню находим атрибут «tombstoneLifetime» , как вы видите на моем контроллере домена под управлением Windows Server 2008 R2 Beta, он равен 180 дням.
Сделаем второй вывод: Теперь мы не только точно можем узнать, сколько будет храниться в нашей базе данных удаленный объект, но и изменить это время по своему желанию. Ради справедливости следует заметить, что делать это практически нет необходимости. Как только объект устаревает, т.е находится в удаленном состоянии более срока «tombstoneLifetime», он удаляется из базы данных и больше вы не сможете его восстановить. Т.е любые операции по восстановлению только до истечения срока «tombstoneLifetime», позже нельзя. Запомните это.
В некоторых статьях в интернете и некоторых книгах приводятся способы восстановления объектов Active Directory после истечения срока «tombstoneLifetime», относитесь к этому как к трюкам экстремалов, как к высшему пилотажу. В определенно отведенном месте это имеет место быть, в городских или в вашем случае рабочих условиях неподготовленный человек просто свернет голову, а вы потеряете всю Active Directory.
Отлично со временем «загробной жизни» наших объектов мы разобрались. Теперь необходимо понять где находятся наши объекты после удаления и до того как они окончательно исчезнут.
После удаление объекты попадают в контейнер «Deleted Objects». Не пытайтесь увидеть его содержимое через оснастку Active Directory User and Computers. У вас это не получится. От глаз «простых смертных» он надежно спрятан. 🙂
Для того чтобы все-таки увидеть сам контейнер и те объекты, которые были удалены нам понадобится одна из двух вещей. Либо служебная программа «LDP», схожая с проводником Windows, для работы с Active Directory, либо утилита «Ad Explorer» из комплекта легендарных утилилит Sysinternals. Ни одна, ни вторая не установлена при новой инсталляции Windows Server 2003. В Windows Server 2008 и 2008R2 программа «LDP» входит изначально.
LDP можно получить установив на свой сервер Windows 2003 Support tools, комплект утилит, свободно скачиваемых с сайта Microsoft.
Утилита «Ad Explorer» доступна свободного скачивания с Веб-узла Windows Sysinternals.
Я воспользуюсь «Ad Explorer» так как, на мой взгляд, для данной цели она более дружелюбна.
Рис. 5. Подключение через утилиту AdExplorer.
Запустив AdExplorer, вы сразу сталкиваетесь с окном, предлагающим вам ввести имя домена, к которому вы хотите подключиться, а также имя Администратора и его пароль. Вводим, нажимаем «ОК».
После разворачиваем раздел нашего домена и видим скрытый до этого контейнер «Deleted Objects».
Рис. 6. Контейнер Deleted Objects
Разворачиваем контейнер Deleted Objects и не пугаемся количеству объектов хранящихся в нем, в моем примере, я легко нахожу удаленную запись пользователя Bill Gates по иконке и имени. (Рис.7.)
Теперь перед нами возникает другая проблема, как вернуть учетную запись обратно в оснастку “Active Directory User and Computers” и позволить пользователю полноценно работать, что он, собственно говоря, и делал до удаления. И опять перед вами есть два пути.
Первый путь является более сложным и предназначен для администраторов хорошо знакомых с алгоритмом удаления/ восстановления объектов Active Directory. Путь пролегает через использование уже знакомой вам утилиты Ldp.exe.
Суть процесса выглядит следующим образом. При удалении и попадании учетной записи в «Deleted Objects » к имени пользователя добавляется DEL , а также в атрибутах объекта пользователь атрибут «isDeleted» переходит в состояние TRUE, что значит истина, а на языке простых смертных состояние включен. Соответственно что бы учетка вернулась в нормальное состояние, нам необходимо используя Ldp.exe выключить этот атрибут и заменить то, что имеем на нормальное имя. Повторюсь еще раз это более сложный путь, и я его описывать не буду. Для тех, кто выбирает сложные есть Google и встроенная справка.
Рис.7. Удаленный объект в Deleted Objects
Рис. 8. Adrestore
Мы пойдем по второму пути, а именно воспользуемся утилитой командной строки от Sysinternals под названием «AdRestore». Не путайте, пожалуйста, с «AdExplorer» у них похожие названия, но разное назначение. У кого данной утилиты еще нет, скачиваем ее с сайта Microsoft. Распаковываем данную утилиту на диск C:\ и запускаем с командной строки.
Синтаксис команды достаточно простой, чтобы восстановить пользователя Bill Gates я ввел утилиту с ключом “-r” и явно указал имя пользователя для восстановления. Если вы хотите посмотреть полный список доступных объектов, вводите AdRestore без ключа.
Итак, объект восстановлен, теперь мы можем его обнаружить в оснастке «Active Directory User and Computers»
Рис. 9 Пользователь после восстановления.
Что же мы видим, учетная запись оказывается отключенной и при попытке включить ее на экране, появляется ошибка, говорящая о невозможности обновить пароль.
Теперь я могу сформулировать третий вывод. При удалении учетной записи и помещения ее в контейнер Deleted Objects теряются все атрибуты записи, кроме SID, ObjectGUID, LastKnownParent и SAMAccountName и при возвращении записи, указанным способом они не восстанавливаются. В том числе и пароль пользователя.
Что такое SID вы уже знаете, ObjectGUID это еще один идентификатор нашего объекта, LastKnownParent это путь контейнеру в котором находился объект до удаления, а SAMAccountName – имя для входа пользователя. Все остальное, увы, так легко не вернется.
Поэтому вам придется сменить пароль, включить учетную запись и заново ввести все атрибуты.
В статье Джил Киркпатрика (Gil Kirkpatrick) под названием «Восстановление объектов-захоронений Active Directory» есть краткое описание того, что мы может путем некой манипуляции заставить атрибуты объектов сохраняться при удалении. И естественно при восстановлении они также будут доступны. Я пойду дальше и распишу этот процесс. Сразу скажу, что атрибуты уже удаленных записей это не вернет.
План наших действий будет такой:
1. Откроем оснастку ADSI Edit
2. Выберем «Подключиться к» или «Connect to»
3. В появившемся окне выбрать подключение к разделу Схема нашей Active Directory
4. Найти нужный нам атрибут и зайти в его свойства.
5. В свойствах атрибута найти параметр «searchflags»
6. Включить третий бит в значении параметра «searchflags»
Пугаться плана не стоит, сейчас мы подробно разберемся в данном процессе. Я буду выполнять данную операцию на Windows Server 2008R2 Beta, но на младшей версии Windows Server 2003 процесс будет аналогичным.
Рис.10 Запускаем ADSI Edit и выбираем «Connect to»
Рис 11. В появившемся окне выбираем подключение в Схеме Active Directory. (Schema)
На данном моменте начинается самое интересное, развернув схемы в правой части оснастки, вы получите огромный список атрибутов. И чтобы найти нужный вам как минимум нужно знать, как он называется в схеме. Названия атрибутов, которые указаны в свойствах объекта Active Directory в схеме часто несколько отличаются.
Рис. 12 Список атрибутов.
Я приведу пример соотношения имен в свойствах объекта и схеме следующей иллюстрацией, созданной Ильей Сазоновым в его блоге. Если вы хотите посмотреть полную картину соотношений, то советую перейти по следующей ссылке.
Рис.13 Имена атрибутов Active Directory в схеме. (Указаны красным цветом)
Проверять данную процедуру я буду на атрибуте Company (Компания). В данном случае имя атрибута в схеме такое же. Для того чтобы найти в длинном списке нужный нам атрибут, необходимо поставить курсов мыши на любой из атрибутов и начать набирать с клавиатуры:
CN= company
Причем набирать необходимо быстро и необязательно полностью, набрав например «CN= com» вы попадете на список атрибутов начинающихся с «com» и легко отыщите нужный.
Рис.14 Поиск нужного атрибута.
После нахождения нужного атрибута открываем его двойным щелчком мыши и на закладке «Attribute Editor» ищем параметр «searchflags». У каждого атрибута он свой и представлен десятичным числом. В моем случае «searchflags» равен 16.
Рис. 15 Параметр «searchflags» для атрибута «Company»
Если вы вернетесь на пару страниц вверх к списку того, что нужно сделать для сохранения атрибута при удалении, то увидите, что остался один пункт «Включить третий бит в значении параметра «searchflags»»
Для того чтобы перевести десятичное число 16 в двоичное я воспользуюсь инженерным калькулятором. В двоичном виде я получил «100000». Что значит включить третий БИТ? Значит, третий бит должен быть равен «1»
Находим третий бит. Считаем справа на лево.
«1 0 0 0 0 0»
Первый справа 0-й бит
Второй справа 1-й бит
Третий справа 2-й бит
Четвертый справа 3-йбит. Тот, который нужно включить.
Меняем его на «1» и получаем в двоичной системе «101000», что и переводим десятичную систему тем же инженерным калькулятором. Получаем «40». И именно эти «40» и ставим в значении «searchflags». Нажимаем «Ок» и закрываем все лишнее. Теперь для проверки правильности действий, вы можете создать новую учетную запись и ввести атрибут «Company». После чего ее удалить и восстановить с помощью утилиты «Adrestore». При правильном выполнении вышеописанной процедуры при восстановлении учетной записи атрибут «Company» не будет потерян.
Вывод третий. Да, мы можем прописать параметр «searchflags» и при восстановлении объекта Active Directory эти атрибуты теряться не будут. НО, следует помнить, что есть особенные атрибуты описывающий членство нашего пользователя в группах Active Directory. К сожалению, подобным образом защититься от его удаления нельзя. Существует способ восстановления членства в группах, но в данной статье он рассмотрен не будет, т.к требует знакомства еще с рядом понятий.
А сейчас я бы хотел перейти к новой возможности, которая стала доступна с выходом Windows Server 2008 R2 под названием «Active Directory Recycle Bin» или Корзина удаленных объектов. Она предназначена для решения как раз наших проблем. Для начала немного теории. Жизненный цикл цикл объекта «Active Directory» в любой версии Windows Server выглядит одинаково. (Рис.16) Разница лишь в сроке хранения захороненного объекта. (tombstoneLifetime). По умолчанию в Windows Server 2008 R2 «Active Directory Recycle Bin» отключена.
Рис. 16 Жизненный цикл объекта Active Directory.
При включении «Active Directory Recycle Bin» схема удаления несколько меняется. Главное преимущество которое мы получаем, это возможность восстановить удаленный объект с сохранением все атрибутов без перезагрузки и резервной копии. («типа link-valued» – как пример «Членство в группах» и «типа non-link-valued» – как пример «Компания»)
Рис. 17 Жизненный цикл объекта Active Directory при включенной «Active Directory Recycle Bin».
При включенной корзине после удаления объекты также попадают в контейнер «Deleted Objects», но теперь с сохранением всех атрибутов, объекту присваивается статус «logically deleted» и находятся, он в таком состоянии в течение определенного времени, на схеме время показано как «Deleted object lifetime». Пока не истекло это время, вы можете спокойно восстановить объект из корзины без каких либо последствий.
По прошествии времени «Deleted object lifetime», у объекта меняется статус на «recycled object» и большинство его атрибутов удаляется. После чего он продолжает храниться в течении «Recycled object lifetime» промежутка. По окончании, которого он удаляется из базы.
Какие же требования нам необходимо соблюсти, чтобы начать использовать функционал новой корзины. Все достаточно жестко.
Необходимо:
a) Убедить, что все контроллеры домена в лесу работают под управлением Windows Server 2008 R2
b) Поднять уровень нашего леса до Windows Server 2008 R2
c) Если лес изначально создавался на базе Windows Server 2003 – осуществить обновление схемы
Примечание: Для обновления схемы: выполнить adprep /forestprep на контроллере домена с ролью «schema master», выполнить adprep /domainprep /gpprep на контроллере домена с ролью «infrastructure operations master». Если есть контроллер домена только для чтения (RODC) запустить на нем adprep /rodcprep.
Ну что ж, теперь давайте проверим новый функционал. В моей лабораторной среде только один контроллер домена под управлением Windows Server 2008 R2, так что подготовительные пункты а) и с) я опускаю. Первый по причине отсутствия других контроллеров домена, второй поскольку я поднимал лес на Windows Server 2008 R2 изначально.
Но поднятие уровня леса мне придется осуществить. На текущий момент мой уровень леса стоит По-умолчанию Windows Server 2008. Можете осуществить поднятие классически через оснастку «Active Directory Domain and Trust», а можно воспользоваться Active Directory PowerShell.
Рис.18 Поднятие уровня леса (Click Start, click Administrative Tools, right-click Active Directory PowerShell)
При этом необходимо выполнить:
Set-ADForestMode –Identity testlab.local -ForestMode Windows2008R2Forest
Постойте! Скажут те из вас кто хорошо знаком с Active Directory. Ведь для поднятия леса нам необходимо сначала поднять уровень домена? Да, в Windows Server 2003 вам нужно было сделать именно так. В Windows Server 2008 R2 автоматически поднимает уровень доменов, упрощая достижение цели на несколько кликов мышью.
Все предварительные этапы пройдены и теперь мы готовы включить «Active Directory Recycle Bin». Сделаем это опять же из «Active Directory PowerShell» выполнив командлет:
Enable-ADOptionalFeature –Identity ‘CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=testlab,DC=local’ –Scope Forest –Target ‘testlab.local’
Рис. 19 Включение «Active Directory Recycle Bin»
Естественно при выполнении команд не забудьте поменять имя домена, заменив testlab.local на имя вашего домена.
Теперь задача выполнена и «Active Directory Recycle Bin» работает.
Что хотелось бы отметить:
А) Приятного графического способа работы с «Active Directory Recycle Bin» на текущий момент нет. Майкрософт рекомендует два способа работы с корзиной. Первый через утилиту Ldp.exe. Второй через командлеты «Get-ADObject-Filter» и «Restore-ADObject» .
Б) Лично я использовал для восстановления объектов утилиту “AdRestore”. При включенной корзине все атрибуты и пароль пользователя восстановились вместе с учетной записью.
В) Время, выделяемое на «Deleted object lifetime» и «Recycled object lifetime» можно менять. Если время «Deleted object lifetime» не задано явно, а по умолчанию оно не задано, то равно продолжительности параметра «tombstoneLifetime», т.е 180-и дням. Остается еще один параметр «Recycled object lifetime» – период времени, когда атрибуты уже уничтожены, но объект еще существует, при определении этого времени используется параметр «tombstoneLifetime». Именно в нем это время и прописывается.