Швидке відновлення випадково видалених об’єктів active directory

На щастя в нагоді певні знання Active Directory, зокрема уривчасті знання про якісь «об'єктах-надгробках» (Tombstone Objects).

Насправді в Active Directory вбудована непогана захист «від дурня», такого наприклад, як я. Це ті самі Tombstone-об'єкти. Видалення з бази AD відбувається не відразу, в цьому і є щастя. Для початку об'єкт і пов'язані з ним атрибути поміщається в прихований контейнер «Deleted Objects», набуваючи при цьому деякі відмітні ознаки «віддаленого об'єкта», а саме:

1. З'являється аттрибут isDeleted. що може приймати булеві значення True і False. Він сигналізує про те, що об'єкт позначений, як віддалений.

2. У значенні атрибута distinguishedName після імені об'єкта з'являється прапор ADEL.

3. З'являється додатковий атрибут Tombstone Lifetime. який веде відлік часу життя об'єкта-пам'ятника, після закінчення якого об'єкт видаляється назавжди.

Кожні 15 хвилин (за замовчуванням) по контейнеру Deleted Objects пробігає Складальник сміття (Garbage Collector або Executioner), який зчитує у знаходяться в контейнері об'єктів значення аттрибута Tombstone Lifetime, об'єкти, значення цього атрибута у яких досягло граничного значення, видаляються. І ось тепер назавжди. За замовчуванням об'єкти можуть зберігається у вигляді об'єктів-пам'яток протягом 60 днів (хоча Microsoft рекомендує збільшити це значення до 120 днів)

Значення аттрібутаTombstone Lifetime може бути змінено з використанням ADSIEdit. Перейдіть до cn = directory Service, cn = windowsNT, cn = services, cn = configuration, dc = company, dc = com (замінивши природно dc = company, dc = com на Ваші реальні дані). Клацніть правою кнопкою миші на контейнері CN = Directory Service і виберіть Properties. Знайдіть Tombstone Lifetime в списку атрибутів, натисніть кнопку Edit і введіть кількість днів, необхідне для зберігання вилучених об'єктів.

Отже, провідного програміста ми видалили. Що робити? Варіант з Authoritative Restore мені не підходив по ряду причин:

  • Була потрібна перезавантаження контролера домену для входу в режим відновлення Active Directory (Active Directory Restore Mode)
  • Я не був упевнений в актуальності, та й наявності бекапа в принципі.
  • Часу було занадто мало

Було вирішено піти іншим шляхом:

Для відновлення віддаленого об'єкта в принципі достатньо видалити атрибут isDeleted і змінити значення distinguishedName.

Запустивши Ldp.exe. вибираємо з меню Connections команду Connect.

Швидке відновлення випадково видалених об'єктів active directory
У вікні вказуємо NetBios ім'я контролера домену та порт LDAP, як відомо - 389.

1. Якщо поточний користувач є членом групи Enterprise Admins, то використовуємо контекст поточного користувача.

2. У всіх інших випадках - вводимо облікові дані користувача що входить до групи Enterprise Admins.

Далле, Вам потрібно включити відображення скриторго каталогу Deleted Objects, для чого в меню Options вибираємо команду Controls.

Швидке відновлення випадково видалених об'єктів active directory

У вікні, в полі Load Predefined з спадаючого списку вибираємо Return deleted objects.

Далі вибираємо в меню View пункт Tree. для відображення дерева контейнерів в лівій панелі.

У вікні Tree view в поле BaseDN вибираємо корінь лісу, в моєму випадку це DC = ad, DC = webzavod, DC = ru.

Двічі клацнувши на корені дерева отримуємо список Контенери, в якому шукаємо контейнер CN = Deleted Objects, DC = ad, DC = webzavod, DC = ru. природно замінивши мої дані своїми. Розкриваємо контейнер і знаходимо в ньому віддалений об'єкт, який необхідно відновити. У мене він називався приблизно так:

CN = Oleg Krylov ADEL: 41057e80-84fd-4c96-8e54-26886519b6e8, CN = Deleted Objects, DC = ad, DC = webzavod, DC = ru

Зверніть увагу на прапор ADEL. Він є :)

У правій панелі ми бачимо той самий злощасний аттрибут isDeleted: TRUE. Ось воно як вийшло то ...

Далі все відбувається дуже швидко:

1. Виділяємо об'єкт в лівій панелі.

2. Правим кліком викликаємо контекстне меню, вибираємо в ньому пункт Modify.

3. У розділі Edit Entry, в поле Attribute вводимо isDeleted. в панелі Operation вибираємо Delete. потім тиснемо Enter. В результаті в поле Entry List з'являється рядок [Delete] isDeleted:

4.Далі, не роблячи дій щодо застосування внесених змін міняємо distiguishedName. Для цього:

  • У розділі Edit Entry, в поле Attribute вводимо ім'я аттрибута, тобто distiguishedName
  • У розділі Edit Entry, в поле Values ​​вводимо значення аттрибута lastKnownParent. яке беремо в правій панелі, в списку атрибутів об'єкта. У моєму випадку це OU = Webzavod, DC = ad, DC = webzavod, DC = ru
  • На самому початку значення додаємо ім'я об'єкта, знову ж в моєму випадку CN = Oleg Krylov. не забувши поставити кому!
  • В результаті отримуємо значення аттрибута CN = Oleg Krylov, OU = Webzavod, DC = ad, DC = webzavod, DC = ru
  • У розділі Operation. вибираємо чекбокс - Replace. тиснемо кнопку Enter

5. У поле Entry List з'являється другий рядок, зі значенням: [Replace] distinguishedName: CN = Oleg Krylov, OU = Webzavod, DC = ad, DC = webzavod, DC = ru

6. Далі, переконавшись, що обрані прапори Synchronous і Extended натискаємо кнопку Run

Про успішний результат нам просигналізує запис в правій панелі вигляду:

*** Call Modify ...
ldap_modify_ext_s (ld, 'CN = Oleg KrylovADEL: 41057e80-84fd-4c96-8e54-26886519b6e8, CN = Deleted Objects, DC = ad, DC = webzavod, DC = ru', [2] attrs, SvrCtrls, ClntCtrls);
Modified «CN = Oleg KrylovADEL: 41057e80-84fd-4c96-8e54-26886519b6e8, CN = Deleted Objects, DC = ad, DC = webzavod, DC = ru».

Відкриваємо Active Directory Users and Computers, у відповідному OU (тому самому, звідки був видалений злощасний об'єкт) знаходимо його живим і здоровим, правда в трохи відключеному ссостояніі. При спробі включення отримуємо помилку виду:

Швидке відновлення випадково видалених об'єктів active directory

Для включення потрібно змінити пароль.

Все, я врятований! Для того різання цього фокусу мені потрібно півтори хвилини. Єдина незручність - необхідність зміни пароля. Але думаю, в світлі можливих проблем з остаточною втратою користувача це дрібниці!

Величезну подяку хочу висловити Gary Olsen за пристойну статтю

Артему Синіцин за підтримку в перші хвилини шоку і всякі фрази підбадьорливого спрямування ( «Не сси, все нормально»)

І звичайно ж Степану Голосунову (див. Фото на початку), гідно переніс роль жертви, за розуміння.

Як бачите, не кожна «безвихідна» ситуація насправді безвихідна.