Как уволенный инженер полгода ходил в прод через забытую вики: анатомия факапа
Отключить доменную почту и заблокировать Active Directory — это только 20% оффбординга. Разбираем реальный кейс, как бывший сотрудник полгода спокойно заглядывал во внутренние сервисы, и почему ручной чек-лист увольнения всегда даёт сбой.

Пятница, 17:45. Ведущий бэкендер компании на 120 человек подписывает обходной лист, жмёт руки коллегам и уходит в закат к конкурентам.
HR отправляет стандартное письмо в техподдержку: *«Просьба заблокировать доступы Иванову И.И.»*. Дежурный сисадмин открывает консоль Active Directory, нажимает Disable-ADAccount, ставит галочку в Jira-тикете и уходит пить пиво с чистой совестью.
Через семь месяцев компания проводит плановый аудит логов Nginx перед сертификацией безопасности.
И внезапно обнаруживает: все эти семь месяцев с IP-адреса одного из домашних провайдеров каждую неделю происходили аккуратные входы во внутреннюю базу знаний компании, просмотр схем сетевой архитектуры и скачивание документации по новым релизам.
Кто заходил? Тот самый Иванов.
Как? Очень просто: шесть лет назад корпоративную Wiki развернули на отдельной виртуальной машине с локальной базой пользователей в PostgreSQL, потому что «надо было быстро, а LDAP прикрутим потом». «Потом», разумеется, не наступило никогда.
---
Анатомия ложной безопасности: почему ADUC не спасает
Большинство технических руководителей искренне уверены, что если у них есть Active Directory (или FreeIPA, или OpenLDAP), то процесс оффбординга у них под контролем. Нажал кнопку — и человека нет.
В реальности ландшафт сервисов средней ИТ-компании выглядит как слоёный пирог из костылей:
| Категория сервиса | Как там авторизовался Иванов | Что произошло при Disable-ADAccount |
|---|---|---|
| Корпоративная почта | Exchange / Google Workspace | Доступ заблокирован |
| GitLab | LDAP Bind | Пароль не подходит, но Personal Access Token на ноутбуке продолжает работать |
| Внутренняя Wiki | Локальная база (локальный логин/пароль) | Доступ активен, пароль не менялся |
| Grafana (мониторинг) | Базовая авторизация (admin:admin или личный логин) | Доступ активен |
| VPN (OpenVPN) | Сертификат на ноутбуке без проверки CRL | Туннель поднимается до истечения срока сертификата |
| Sentry (ошибки прода) | Приглашение по личной почте GitHub | Доступ активен, видны стектрейсы с токенами и данными клиентов |
В итоге из 10 критических точек входа заблокированной оказалась ровно половина.
---
Почему ручной чек-лист увольнения всегда даёт сбой
Классическая попытка решить проблему зомби-доступов — это составление сакрального документа: «Регламент вывода сотрудника из эксплуатации».
В этом регламенте обычно содержится 25 пунктов:
1. Заблокировать в AD;
2. Отозвать лицензию в CRM;
3. Зайти в админку базы знаний и перевести в Inactive;
4. Отозвать сертификат OpenVPN и перегенерировать CRL;
5. Удалить из Mattermost;
6. Проверить токены GitLab...
Знаете, какова вероятность того, что дежурный админ в запарке спринта выполнит все 25 пунктов без единой ошибки? Около нуля.
Достаточно, чтобы:
- Админ заболел, и увольнением занимался стажёр;
- Увольнение произошло экстренно в выходной день;
- Полгода назад отдел маркетинга втихаря поднял для себя новый сервис и никому о нём не сказал.
Ручной контроль распределённых доступов математически обречён на появление «дыр».
---
Как это устроено, когда не нужно надеяться на человеческий фактор
Единственный способ гарантировать 100% блокировку сотрудника в момент увольнения — это лишить сервисы права иметь собственные базы пользователей и собственные сессии авторизации.
В архитектуре с централизованным шлюзом доступа (OwnGate):
1. Сервисы не хранят пароли и учётки. Никаких локальных юзеров в Grafana, GitLab, Wiki или Sentry. Все сервисы делегируют аутентификацию шлюзу по OIDC / SAML.
2. Единая точка валидации. При каждом обращении сервис либо валидирует короткоживущий токен (срок жизни — 5–15 минут), либо шлюз форсированно отзывает сессию через Backchannel Logout.
3. Один клик. Когда HR блокирует сотрудника в кадровой системе или Active Directory, шлюз моментально получает событие (или видит флаг disabled при очередной проверке).
В эту же секунду:
- Текущие веб-сессии во всех открытых вкладках браузера аннулируются;
- Все выпущенные шлюзом токены доступа признаются недействительными;
- Попытка подключиться к VPN отбивается на этапе шлюзовой проверки второго фактора;
- Личные токены и сессии превращаются в тыкву.
Сисадмину больше не нужно помнить список из тридцати админок и молиться, чтобы ничего не забыть. Один тумблер в каталоге — и бывший коллега становится просто посетителем с улицы.