Корзина Active Directory: как за 30 секунд вернуть удалённого пользователя со всеми правами
Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш и за 15 лет администрирования Windows-инфраструктур видел десятки случаев, когда HR-менеджер «случайно» удалял из AD не того сотрудника, а админ потом сутки восстанавливал доступы из бэкапа. Если у вас включена корзина Active Directory — этот сценарий решается одной командой PowerShell за полминуты, без откатов, без перезагрузок контроллера и без нервов. Если не включена — пора это исправить, и вот пошаговый гид.
Зачем нужна корзина Active Directory
Раньше, до Windows Server 2008 R2, единственным штатным способом восстановления удалённого объекта был механизм tombstone reanimation — «оживление» надгробия. Это работало, но возвращало объект без большинства атрибутов: без членств в группах, без описания, без должности, иногда даже без UPN. Восстановленный таким способом пользователь по факту был пустой оболочкой со старым SID, и админу приходилось вручную возвращать его во все группы доступа. На крупном домене с сотней групп это занимало часы.
Корзина Active Directory (AD Recycle Bin) решает проблему радикально. При включённой корзине удалённые объекты не превращаются в tombstone сразу, а проходят промежуточную стадию «logical deletion» — длительностью 180 дней по умолчанию. Все атрибуты и связи сохраняются, и одной командой Restore-ADObject объект возвращается на исходное место со всеми правами.
Проверка состояния корзины перед включением
Прежде чем что-то включать, я всегда проверяю текущее состояние. На любом контроллере домена откройте PowerShell от имени администратора:
Get-ADOptionalFeature -Filter * | Select-Object Name, EnabledScopes, RequiredDomainMode
Если в выводе у строки Recycle Bin Feature поле EnabledScopes пустое — корзина не активирована. Также убедитесь, что функциональный уровень леса не ниже Windows Server 2008 R2:
Get-ADForest | Select-Object Name, ForestMode
Get-ADDomain | Select-Object Name, DomainMode
Если у вас стоит более ранний уровень — сначала придётся повысить его командой Set-ADForestMode. Помните: повышение функционального уровня необратимо, понизить обратно нельзя.
Включение корзины Active Directory
Когда все проверки пройдены, включаем корзину одной командой. Делать это нужно на контроллере с ролью FSMO Schema Master, иначе репликация может задержаться:
Enable-ADOptionalFeature -Identity 'Recycle Bin Feature' `
-Scope ForestOrConfigurationSet `
-Target 'corp.example.ru' -Confirm:$false
Подтверждать включение нужно осознанно: отключить корзину после активации невозможно. Это лимит платформы Microsoft, а не наша придирка. Зато никаких побочных эффектов на работе домена не появляется — функция включается прозрачно для пользователей.
После включения дождитесь завершения межсайтовой репликации (типично 15–60 минут на средних доменах). Проверить статус репликации:
Get-ADReplicationPartnerMetadata -Target * -Scope Server |
Select-Object Server, Partner, LastReplicationSuccess
Срок хранения удалённых объектов и его настройка
По умолчанию удалённый объект хранится в корзине 180 дней. После этого он переходит в стадию tombstone (надгробие) и теряет большинство атрибутов. Срок жизни задаётся атрибутом msDS-deletedObjectLifetime на объекте контейнера CN=Directory Service. Я рекомендую увеличивать его до 365 дней, особенно для компаний с длинными отпускными циклами и проектами «уволили — потом вернули»:
$ds = "CN=Directory Service,CN=Windows NT,CN=Services," + `
(Get-ADRootDSE).ConfigurationNamingContext
Set-ADObject -Identity $ds -Partition (Get-ADRootDSE).ConfigurationNamingContext `
-Replace @{ "msDS-deletedObjectLifetime" = 365 }
Учтите: чем длиннее срок, тем больше места занимает база NTDS.dit. На домене 5 000 пользователей с активной ротацией кадров за год база может вырасти на 1–2 ГБ. Это не критично, но мониторить надо.
Восстановление пользователя через PowerShell
Допустим, вашего бухгалтера Иванову уволил кадровик в спешке, а через час выяснилось, что увольнение оформляется только следующим месяцем. В классическом сценарии без корзины — это два часа работы и звонок директору. С включённой корзиной — две команды:
# Находим объект по имени, отображаются только удалённые
Get-ADObject -Filter {DisplayName -eq "Иванова Анна Петровна"} `
-IncludeDeletedObjects -Properties *
# Восстанавливаем по DN или ObjectGUID
Get-ADObject -Filter {SamAccountName -eq "ivanova"} `
-IncludeDeletedObjects | Restore-ADObject
После выполнения объект возвращается в исходную OU с теми же членствами, паролем, должностью, телефоном и атрибутом userAccountControl. Я рекомендую сразу проверить через Get-ADUser ivanova -Properties MemberOf — все группы доступа должны быть на месте.
Если объекты с одинаковым именем удалялись несколько раз, фильтруйте по дате удаления:
Get-ADObject -Filter {SamAccountName -eq "ivanova"} `
-IncludeDeletedObjects -Properties WhenChanged |
Sort-Object WhenChanged -Descending | Select-Object -First 1 |
Restore-ADObject
Восстановление через Active Directory Administrative Center
Не все админы любят PowerShell, и для них Microsoft встроила удобный графический интерфейс. Откройте Active Directory Administrative Center (dsac.exe) на любом контроллере или member-сервере с RSAT. В дереве слева — ваш домен, контейнер Deleted Objects. В нём — все удалённые за 180 дней объекты с фильтром по дате, типу и имени.
Правый клик на нужном объекте → Restore вернёт его в исходный OU. Если исходного контейнера уже нет (например, OU тоже удалили) — выберите Restore To... и укажите целевой контейнер. Этот же интерфейс умеет показывать атрибуты удалённого объекта без восстановления — полезно, когда нужно вспомнить, в каких группах состоял пользователь.
Восстановление целой OU с пользователями
Самый сложный сценарий — когда удалили целое подразделение. Здесь важен порядок: восстанавливать нужно строго от родительских контейнеров к дочерним. Сначала OU, потом вложенные OU, и только в конце — пользователей и компьютеры. Если попытаться восстановить пользователя раньше его OU, команда упадёт с ошибкой «The specified target object is not a directory object».
# Восстанавливаем родительскую OU
Get-ADObject -Filter {Name -eq "Бухгалтерия"} `
-IncludeDeletedObjects | Restore-ADObject
# Затем все объекты, что были внутри (по lastKnownParent)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=corp,DC=example,DC=ru" `
-Filter {lastKnownParent -eq "OU=Бухгалтерия,DC=corp,DC=example,DC=ru"} `
-IncludeDeletedObjects -SearchScope OneLevel | Restore-ADObject
Я рекомендую делать это поэтапно, с проверкой после каждого шага. На крупных OU с 50+ объектами лучше написать скрипт с обработкой ошибок и логированием.
Реальный кейс: 78 удалённых пользователей за вечер
В августе 2025 года к нам в АйТи Фреш обратилась логистическая компания (190 рабочих мест, домен на 4 контроллера). Их штатный администратор написал PowerShell-скрипт для массового отключения уволенных за квартал и случайно поменял Disable-ADAccount на Remove-ADUser. За три минуты из домена исчезли 78 учётных записей, включая нескольких действующих топ-менеджеров.
Когда мы приехали (через час после звонка), бэкап был — но полностью свежий, ночной. Восстановление через DSRM заняло бы 6–8 часов с остановкой одного контроллера и риском нарушения репликации. К счастью, корзина AD у них была включена ещё нашими предшественниками. Мы написали скрипт, который выгрузил все удалённые за последний день объекты, отфильтровал по времени удаления и восстановил их пакетом:
$cutoff = (Get-Date).AddHours(-3)
Get-ADObject -SearchBase "CN=Deleted Objects,DC=cargo,DC=local" `
-Filter {ObjectClass -eq "user" -and WhenChanged -gt $cutoff} `
-IncludeDeletedObjects -SearchScope OneLevel |
ForEach-Object {
try {
Restore-ADObject -Identity $_.ObjectGUID
Write-Host "OK: $($_.SamAccountName)" -ForegroundColor Green
} catch {
Write-Host "FAIL: $($_.SamAccountName) - $_" -ForegroundColor Red
}
}
Весь процесс занял 12 минут. 78 пользователей вернулись со всеми членствами в группах (а это 240+ групп безопасности на сетевые ресурсы, права в 1С, доступ к VPN). Без корзины такая авария обошлась бы клиенту в день простоя и 80–100 тыс. руб. восстановительных работ.
Что НЕ восстанавливает корзина AD
Корзина — это инструмент логического восстановления внутри AD. Она не возвращает:
- Связанные объекты вне AD — почтовые ящики Exchange после Recipient Update, сертификаты в шаблонах, профили Citrix.
- Файлы, к которым у пользователя был доступ — права на NTFS, конечно, остаются на ресурсе по SID, но если SID полностью «утоплен», ACL придётся править.
- Lingering objects на сторонних контроллерах, не получивших репликацию вовремя.
- Изменения схемы и удалённые атрибуты схемы — только сами объекты пользователей, групп, компьютеров и OU.
Поэтому корзина — необходимое, но не достаточное условие безопасности AD. Регулярный бэкап системного состояния контроллеров через Windows Server Backup или Veeam B&R остаётся обязательным.
Best practices для корзины AD от АйТи Фреш
За 15 лет работы с доменами я выработал короткий чек-лист, который применяю на каждом новом проекте миграции AD:
- Включать корзину сразу после поднятия первого домена в лесу, не откладывая.
- Увеличивать
msDS-deletedObjectLifetimeдо 365 дней — задним числом восстановление просьб «вспомнили через полгода» происходит регулярно. - Делегировать право восстановления отдельной группе AD Operators — не давать всем админам, чтобы видеть в логах кто что восстанавливал.
- Настроить аудит на контейнер CN=Deleted Objects и Live Reports в Splunk/Wazuh для контроля массовых удалений.
- Раз в квартал делать тестовое восстановление — удалили тестового пользователя, восстановили, сверили атрибуты.
- Никогда не использовать
Remove-ADUser -Recursiveна OU без двойной проверки — лучше скрипт с явным-Confirmна каждом объекте.
Что делать, если корзина не была включена
Этот раздел для тех, кто пришёл сюда уже после аварии. Без включённой корзины удалённый объект превращается в tombstone, у которого вычищено 90 % атрибутов. Возможные пути восстановления:
- Tombstone reanimation через ldp.exe или Restore-ADObject. Сработает только в течение Tombstone Lifetime (180 дней), вернёт объект без членств, без атрибутов профиля. Дальше — ручной труд.
- Восстановление из бэкапа в режиме DSRM. Перезагрузка контроллера в Directory Services Restore Mode, восстановление NTDS.dit из бэкапа, авторитативное восстановление нужных объектов через ntdsutil. На домене 1000+ пользователей — 4–8 часов работы и риск нарушения репликации.
- Восстановление через изолированную виртуальную машину. Поднимаем копию контроллера из бэкапа на отдельной сети, экспортируем нужные объекты в LDIF и импортируем в продакшн. Безопаснее, но дольше.
Если у вас нет ни корзины, ни свежего бэкапа, ни компетенций для DSRM — звоните, мы помогаем с такими задачами регулярно. Чаще всего восстановление 10–20 учётных записей укладывается в 4–6 часов работы.
Включите корзину AD до того, как она вам понадобится
Я выезжаю на бесплатный аудит AD к каждому новому корпоративному клиенту в Москве и в радиусе 50 км от МКАД. За 2–3 часа смотрим состояние домена, включаем корзину, проверяем бэкапы, настраиваем аудит критичных операций. Никаких обязательств, никаких разовых счетов.
Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш
FAQ — частые вопросы по корзине Active Directory
- С какой версии Windows Server работает корзина AD?
- Корзина Active Directory доступна начиная с Windows Server 2008 R2. Для её включения требуется уровень леса не ниже Windows Server 2008 R2. Включение необратимо — отключить корзину после активации нельзя.
- Сколько времени удалённый объект хранится в корзине?
- По умолчанию объект хранится 180 дней (msDS-deletedObjectLifetime) — за это время его можно восстановить со всеми атрибутами. После — переходит в стадию tombstone и теряет большинство атрибутов.
- Восстанавливаются ли членства в группах при использовании корзины?
- Да, при включённой корзине AD пользователь возвращается со всеми членствами в группах безопасности и распространения. Это ключевое отличие от старого механизма tombstone reanimation.
- Можно ли восстановить целую OU с пользователями?
- Да, но восстанавливать нужно строго в обратном порядке удаления — сначала родительская OU, затем дочерние OU и только потом сами объекты пользователей и компьютеров.
- Что делать, если корзина не была включена и объект уже удалён?
- Тогда поможет только восстановление из бэкапа Active Directory с использованием режима DSRM или утилиты ntdsutil — сложно, долго и с риском нарушить репликацию. Лучше включить корзину сразу после развёртывания домена.