Неактивные учётные записи в Active Directory: поиск и блокировка

Разовый аудит домена находит ошибки конфигурации. Эта статья — про ежемесячную рабочую процедуру: выгрузить список неактивных учётных записей, спросить владельца и заблокировать поимённо. Не гоняйте конвейер отключения на весь домен: среди «тихих» окажутся сервисные записи и люди в длительном отпуске. Увольнение по-прежнему закрывайте в день события, не ждите отчёта о неактивности: чек-лист отзыва прав. Для Linux-серверов та же задача решается другими средствами: неактивные учётные записи Linux.
Статья опирается на логику направления «Управление доступом» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. Срез типичных ошибок AD: аудит Active Directory.
Что должно получиться
| Уровень | Что это значит на практике |
|---|---|
| 2. Гигиенический | Неактивные учётные записи находятся по расписанию, подтверждаются у владельца и блокируются поимённо, а не копятся месяцами и не отключаются массовым конвейером |
Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.
Порог и исключения
Зафиксируйте порог в политике. CIS Controls v8.1 ориентирует отключать дремлющие записи примерно через 45 дней, где это поддерживается. На площадках с длинными отпусками часто берут 90 дней для обычных пользователей и 45 — для административных. Число одно на компанию, не «как получится в скрипте».
Исключения до выгрузки: сервисные учётки с владельцем, gMSA, учётки оборудования, задокументированный декрет или вахта. Их ведите рядом с заявками: заявка на доступ. Без строки в исключениях «это сервис» не принимайте.
Выгрузка списка
Модуль ActiveDirectory (RSAT). Команда только читает. Интервал 45.00:00:00 замените своим порогом. Нужен функциональный уровень домена не ниже Windows Server 2003 — иначе признак неактивности по этой команде недоступен (документация Microsoft).
Search-ADAccount -AccountInactive -TimeSpan 45.00:00:00 -UsersOnly |
Where-Object { $_.Enabled -eq $true } |
Select-Object Name, SamAccountName, LastLogonDate, DistinguishedName |
Export-Csv -Path inactive-users.csv -NoTypeInformation -Encoding UTF8
На экране и в CSV — включённые пользователи, которых команда считает неактивными. LastLogonDate опирается на реплицируемый штамп и может отставать на дни: не блокируйте человека, который заходил вчера на другую площадку, пока владелец не подтвердит. Компьютеры выгружайте отдельно (-ComputersOnly), не смешивайте с людьми.
Блокировка поимённо
Риск конвейера: команда без разбора в Disable-ADAccount отключит сервис и бухгалтера в отпуске. Отключайте по одному имени после ответа владельца:
Disable-ADAccount -Identity ИМЯ
Проверка: Get-ADUser ИМЯ -Properties Enabled | Select-Object Enabled — False. Документация: Search-ADAccount, Disable-ADAccount.
Подтверждение и журнал
- Раз в месяц отправьте CSV владельцам систем: «подтвердите, что человеку доступ ещё нужен» — срок ответа три рабочих дня.
- Молчание по обычной учётке = блокировка; молчание по привилегированной = блокировка в тот же день после напоминания.
- Запишите в журнал: дата выгрузки, сколько строк, сколько подтверждено, сколько отключено, какие исключения.
- Через 30 дней отключённую личную учётку архивируйте по политике хранения; сервисную не удаляйте без владельца системы.
Парольные правила для того, что остаётся живым: парольная политика.
Диагностика
| Симптом | Причина и что делать |
|---|---|
| Выгрузка пустая, а бывший сотрудник входит в SaaS | Искали только в AD. Добавьте почту, VPN и облачные сервисы из реестра активов |
| После отключения «упал» обмен между системами | Сервисная учётка без исключения. Верните, заведите владельца, запретите автоконвейер |
LastLogonDate расходится с реальным входом на день-два |
Атрибут реплицируется между контроллерами домена не мгновенно. Перед блокировкой проверяйте через Get-ADUser -Properties LastLogonDate на нескольких контроллерах или дождитесь подтверждения владельца |
| Список расходится с порогом в локальной политике другого подразделения | Разный порог в разных документах. Приведите к одному числу в общей политике |
Где это в модели зрелости
Материал относится к направлению «Управление доступом» (материалы направления, карта зрелости). Разовый аудит AD находит ошибки конфигурации. Эта процедура поддерживает гигиену: дремлющие записи не копятся месяцами. Это не PAM и не IDM — таблица, владелец и одна команда блокировки.
Как проверить
- В политике записан порог неактивности и список исключений.
- Есть CSV последней выгрузки не старше месяца.
- По трём случайным отключённым именам есть подтверждение владельца или отметка «молчание, порог вышел».
- Сервисные учётки не попали под массовое отключение.
- Команда
Search-ADAccountзапускается как чтение; блокировка — поштучно черезDisable-ADAccount.
Источники
- Microsoft Learn,
Search-ADAccount: learn.microsoft.com. - Microsoft Learn,
Disable-ADAccount: learn.microsoft.com. - CIS Controls v8.1, контроль 5 (дремлющие учётные записи). Это не закон РФ: cisecurity.org.
- Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.


















