Відновлення видалених елементів (об’єктів tombstone) в active directory
Відновлення видалених елементів (об'єктів «tombstone») в Active Directory
Як відбувається процес видалення об'єктів в Active Directory?
При видаленні об'єкта Active Directory, не відбувається його моментального знищення з бази Active Directory, об'єкт позначається для планового видалення. Чому так зроблено? Об'єкти можуть редагуватися на будь-якому контролері домена в лісі, потім зміни повинні бути реплікуються на інші сервера. Тому об'єкт видалення в цьому середовищі не може бути відразу видалений, тому що при цьому буде вилучений і об'єкт реплікації.
Час зберігання об'єктів «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 структури дескриптора безпеки.)
- Біт «заборонити видалення» (0x80000000) не встановлено в атрибуті systemFlags об'єкта.
- Для атрибута isCriticalSystemObject об'єкта не встановлено значення «True».
- Дескриптор безпеки об'єкта дає відповідні права доступу користувачу для видалення об'єкта. (Конкретніше, користувачеві дозволяють видалити сам об'єкт і видалити дочірній об'єкт з батьківського об'єкта.)
- Об'єкт не є об'єктом перехресних посилань (objectClass = crossRef) для існуючого контексту іменування.
- У об'єкта немає ніяких підлеглих об'єктів. (Якщо операція видалення по протоколу LDAP включає ідентифікатор об'єкта управління «видалити дерево» по протоколу LDAP, Active Directory автоматично видалить підлеглі об'єкти, якщо їх атрибут isCriticalSystemObject не встановлено в значення «True». Це захищає критичні системні об'єкти від ненавмисного видалення в ході операції видалення об'єктів дерева. Зрозуміло, ви можете видалити ці об'єкти індивідуально.)
- Об'єкт не є критичним внутрішнім об'єктом (наприклад, це не об'єкт nTDSDSA для контролера домену або не об'єкт заповнення для попередніх об'єктів головних об'єктів NC).
Якщо визначено, що об'єкт дійсно може бути видалений, Active Directory починає переводити об'єкт в стан «tombstone».
Спочатку Active Directory видаляє непотрібні атрибути об'єкта, залишаючи лише позначені в таблиці нижче і ті, які за схемою повинні зберігатися у об'єкта «tombstone».
Атрибути, збережені в об'єкті «tombstone».
Жорстко задані для збереження атрибути
Потім вона змінює:
- Відносне различающееся ім'я (RDN) об'єкта на CN =
\ 0ADEL: , де \ 0A означає символ ASCII перекладу рядка, а - це 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.
При видаленні об'єкти «tombstone» очищаються від багатьох атрибутів, і якщо ви вирішите реанімувати віддаленого користувача або групу вам доведеться відновлювати членство в групах або будь-які інші зв'язки з іншими об'єктами, які вам можуть знадобитися. Крім того ви не зможете реанімувати об'єкти видалені з розділу Configuration.
Для прикладу я створив через оснащення 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.
Відновлення об'єктів за допомогою 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 - це безкоштовна утиліта командного рядка, розроблена командою Sysinternals покликана спростити спосіб відновлення об'єктів «tombstone».
Для прикладу я знову видалив користувача і групу з домену.

У неї дуже простий синтаксис, якщо ми запустимо програму без будь-яких параметрів
Вона видасть нам список виявлених об'єктів «tombstone» в AD.

Для відновлення об'єктів потрібно набрати
Ми можемо скористатися фільтрацією по імені об'єкта як для відображення об'єктів, так і для їх відновлення.
Adrestore.exe dead - для пошуку всіх об'єктів «tombstone» містять в назві * dead *

Adrestore.exe -r dead - для реанімації всіх об'єктів «tombstone» містять в назві * dead *. Якщо таких об'єктів буде кілька, система буде задавати питання про відновлення по кожному їх об'єктів.

Не забуваємо після реанімування скинути пароль і активувати користувача, так само поправити його членство в групах та інші атрибути.
Основні її можливості

Не забуваємо після реанімування скинути пароль і активувати користувача, так само поправити його членство в групах та інші атрибути.