Область применимости
Таблица типов записей относится к RHEL 7/8. Руководство RHEL 9 описывает устройство аудита. Применимость типов записей сверяйте с версией пакета. Для поиска нужны версии audit, PAM и OpenSSH на исследуемом хосте.
Событие зависит от поддержки аудита приложением/PAM-цепочкой, работы подсистемы и сохранения данных. Правила системных вызовов сами по себе не гарантируют, что любое приложение создаст USER_AUTH. Не искать этот тип в произвольном syslog как обязательный числовой Event ID. Для Альт см. отдельный паспорт; Astra/РЕД ОС требуют собственных проверок.
Иллюстрация записи
Сокращённый пример записи. Данные условные:
type=USER_AUTH msg=audit(1700000000.100:901): pid=2450 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="demo.user" exe="/usr/sbin/sshd" hostname=? addr=192.0.2.25 terminal=ssh res=failed'
Набор полей может отличаться по приложению и конфигурации. Сохранять raw вместе с удобочитаемой интерпретацией.
| Поле | Смысл и ловушка |
|---|---|
| type | Тип этой записи; это не результат попытки |
| msg=audit(timestamp:serial) | Время и serial для связывания записей одного audit event |
| uid | Учётная запись процесса, сообщающего событие; при sshd значение 0 не означает, что клиент — root |
| auid | Исходный loginuid при его наличии; в pre-auth контексте может быть unset |
| ses | Audit session при её наличии; unset нельзя использовать как уникальную общую сессию |
| acct | Учётная запись, участвующая в проверяемой операции; это не всегда actor административного изменения |
| exe / pid | Локальное приложение, отправившее запись; не удалённый клиентский процесс |
| addr / terminal | Контекст запроса, если заполнен; не гарантия личности и полного сетевого пути |
| op / res | Этап и его результат; не подменять результатом всего подключения |
Поля и loginuid описаны в Audit Reference. Значение 4294967295 в приведённой иллюстрации обозначает unset; формат показа зависит от инструмента. Для атрибуции нужно проверить его представление в выбранной среде.
Поиск
Команды чтения за текущие сутки; нужны права на журнал.
sudo ausearch -m USER_AUTH -ts today --raw
sudo ausearch -m USER_AUTH -ts today -i
Если получен нужный serial, например 901, повторить выборку в фактическом интервале нужного события:
sudo ausearch -a 901 -ts today --raw
901 заменить своим ID; timestamp примера выше не соответствует команде за текущие сутки. Для расследования старых данных выбрать реальный диапазон и узел. Синтаксис -m, -a, -ts, raw/interpret и input — upstream ausearch(8).
При анализе перенесённого raw-файла:
ausearch -if ./sanitized-audit.log -m USER_AUTH --raw
Имя файла — пример. -i может интерпретировать идентификаторы по текущей среде анализа; сохранять числовые значения и учитывать историческое соответствие UID/имени.
Как связывать записи
В одном audit event несколько записей могут иметь общие timestamp/serial; пример структуры — руководство RHEL 7. При центральном сборе нужны также узел и контекст загрузки/времени; serial не является глобальным UUID.
Аутентификация, авторизация и начало сеанса могут быть разными audit events с разными serial. Их связывают по контексту процесса/сессии/учётной записи и времени, а не искусственно объявляют одним событием. Не все записи имеют одинаковые поля.
Что делать с результатом
Для ausearch код завершения 1 неоднозначен: возможны отсутствие совпадений, ошибка аргументов или небольшая ошибка доступа/чтения. Сохраните stderr и проверьте доступность входного файла; по одному коду 1 нельзя заключать, что событий нет.
Отказ: проверить этап и настройки приложения, ожидаемый метод входа, частоту и источник. Возможны ошибка пользователя или неактуальные credentials. Успех: искать последующие этапы и подтверждение начала сеанса; не утверждать его по одному USER_AUTH. Пустая выборка: проверить auditd, реальные log_file/период, права, ротацию и поддержку аудита приложением. Ни один из вариантов сам по себе не устанавливает атаку.
Связи: Журнал аудита в словаре, российский профиль, сценарий создания учётной записи. Для создания пользователя ищется ADD_USER, а не USER_AUTH и не выдуманный USER_ADD.