До поиска
Зафиксировать target account/ID, систему-владельца identity, примерный период и timezone. Просмотр имени в /etc/passwd или AD показывает текущее состояние, но сам по себе не отвечает на вопрос об авторе создания. Наличие shell history не заменяет аудит успешной операции.
Выбор ветки
| Среда | Где искать | Что должно быть собрано | Ограничение |
|---|---|---|---|
| Windows: local account | Security на компьютере-владельце локальной учётной записи, provider Security-Auditing, 4720 | Audit User Account Management: Success; сохранённый журнал | Не искать автоматически только на DC |
| AD: domain account | Security на DC, который обработал создание; при неизвестном узле — централизованный сбор/нужные DC | Тот же тип аудита с достаточным охватом DC | Сбор с одного произвольного DC может быть неполным |
| Linux: local account | Linux Audit ADD_USER при поддерживаемом пути создания; дополнительно контекст sudo/session | Работающий аудит и приложение, регистрирующее операцию; история ещё хранится | Прямая правка файлов/нестандартный provisioning может не дать ожидаемый тип |
| Российские Linux | Применимая схема конкретного дистрибутива; Альт-паспорт | Версия/профиль, audit/PAM и пути, проверенные отдельно | Не приравнивать все три ОС к одному RHEL-примеру |
| IdP / application user | Административный аудит identity-сервера, например Keycloak | User events и admin events настраиваются отдельно | Пользователь мог быть импортирован, синхронизирован или создан сервисом; ОС-log не даёт полного ответа |
Windows-ветки опираются на Microsoft 4720. Linux-тип — Audit Reference: ADD_USER. IdP-ветка — Keycloak 26.4.7: auditing admin events.
Windows и Active Directory
Для Windows различайте сервер участник домена и контроллер AD. Команда читает Security через Windows PowerShell 5.1.
Get-WinEvent -FilterHashtable @{
LogName='Security'
ProviderName='Microsoft-Windows-Security-Auditing'
Id=4720
StartTime=(Get-Date).AddDays(-7)
} -MaxEvents 100 | Select-Object TimeCreated, MachineName, Id, Message
Запрос выполняется на нужном узле либо в соответствующей копии журнала. Это первые 100 записей в интервале, а не гарантия полного покрытия. Для большего объёма сузить диапазон/цель либо обработать всё с контролем полноты. Синтаксис — Get-WinEvent.
Из 4720 извлечь именованные XML-поля: SubjectUserSid/Name/Domain — контекст инициатора; TargetSid/UserName/DomainName — созданный объект; SubjectLogonId — связующий контекст сеанса на том же узле. Затем проверить смежные записи входа и источник процесса, если они собраны. Не использовать локализованный текст как стабильную схему.
Пример, не экспорт:
host=lab-dc-01 event=Security-Auditing/Security/4720
subject=LAB\svc-provisioning target=LAB\demo.user
subject_logon_id=0x123456
Корректный предварительный вывод: операция записана в контексте svc-provisioning. Чтобы назвать человека, нужны журналы приложения provisioning, сессии/API и процедура доступа к этому сервисному аккаунту. По одной этой записи человек не установлен.
Linux
Пример чтения:
sudo ausearch -m ADD_USER -ts today --raw
sudo ausearch -m ADD_USER -ts today -i
Проверить acct/идентификатор созданного пользователя, результат, exe/pid, uid, auid, ses, время и узел. uid=0 отражает привилегированный контекст процесса, а auid, если установлен и корректен, помогает связать с исходным login. Сопоставление с sudo/входом и автоматизацией — самостоятельный шаг, не доказательство по одному числу. Для CLI-поиска источник — upstream ausearch.
Российские ОС и IdP
Для Альт использовать отдельный паспорт и проверить генерацию ADD_USER на выбранном способе создания. Для Astra документ latest перечисляет /var/log/auth.log как источник изменений учётных записей, но для SE 1.8 с конкретным профилем нужен точный паспорт и проверка: Astra: регистрация. Для РЕД ОС 8 и Astra Linux используйте документацию своей редакции: расположение журналов и правила регистрации могут отличаться.
В Keycloak различать создание администратором, self-registration и синхронизацию внешнего хранилища. Нужны подходящие events и настроенное сохранение. Не включать запись representation без оценки того, какие данные она содержит; в текущей карточке никаких настроек не меняется.
Если следов нет
Для ausearch код завершения 1 неоднозначен: возможны отсутствие совпадений, ошибка аргументов или небольшая ошибка доступа/чтения. Сохраните stderr и проверьте доступность входного файла; по одному коду 1 нельзя заключать, что событий нет.
Проверить хранилище identity, правильный узел, охват коллектора, политику до действия, права чтения, период/часы и retention. Возможно, нужное действие не регистрировалось или произошло иным путём. Итог тогда: «по доступным источникам инициатор не установлен», а не «никто не создавал».
Следующие шаги по исходной задаче: сопоставить изменение прав/группы, входы и использование созданной записи. Данные о создании пользователя не заменяют аудит GRANT в СУБД, создание Kubernetes ServiceAccount или облачного ключа — у них свои сценарные ветки.