systemd-journald и логи приложений: для входа и последующих действий обычно нужно сопоставлять неск олько источников. Начните с одного безопасного тестового файла, убедитесь, что событие находится по ключу, и только затем расширяйте набор правил.Какие журналы нужны для аудита безопасности Linux
Linux Audit Framework получает от ядра структурированные события аудита по активным правилам. Служба auditd записывает их обычно в /var/log/audit/audit.log. Это источник для контроля доступа к выбранным файлам, системных вызовов и запусков процессов, но не универсальная запись всего, что делал администратор.
Источники образуют [аудиторский след](/baza-znaniy/glossariy/audit-trail) вместе: один журнал не заменяет остальные.
| Источник | Что обычно содержит | Когда смотреть |
|---|---|---|
| Linux Audit / auditd | Структурированные события ядра: доступ к объектам по правилам, execve, изменения атрибутов, часть событий PAM | Нужно установить, какой процесс и от чьей исходной сессии выполнил контролируемое действие |
| systemd-journald | Сообщения systemd и служб, включая sshd при журнальном выводе в journal | Нужны оперативная диагностика служб, сообщения SSH, PAM и системы |
| Журнал аутентификации | Успешные и неудачные попытки входа, сообщения PAM и sudo, если их пишет syslog | Нужно проверить входы SSH, локальные входы и ошибки аутентификации |
| Журналы приложений | Действия внутри СУБД, веб-приложения, панели управления или иной службы | Нужен контекст операции, которого нет на уровне ОС |
wtmp, btmp, lastlog | Учёт завершённых входов, неудачных входов и последнего входа пользователя | Нужна быстрая сводка по сессиям, а не полный контекст события |
Зависимость от дистрибутива и версии
auditd.conf различаются между Debian/Ubuntu, RHEL-совместимыми системами и их версиями. В типичной конфигурации пакет называется auditd, unit — auditd.service, а постоянные фрагменты правил лежат в /etc/audit/rules.d/. Перед изменением сверяйте синтаксис с руководствами auditctl(8), audit.rules(7), auditd.conf(5), ausearch(8) и документацией своего дистрибутива.Определите события до настройки auditd
Правило аудита должно отвечать на конкретный вопрос: «кто изменил конфигурацию приложения», «кто запускал привилегированную программу», «кто менял учётные записи». У каждого правила укажите цель, владельца, критичные объекты, ожидаемый поток событий и срок хранения. Это помогает отделить полезные записи от шума и поддерживать конфигурационное соответствие.
- Для обычного сервера обычно начинают с критичных конфигураций конкретной роли: например, каталога конфигурации приложения, файлов учётных записей и настроек удалённого доступа.
- Для серверов с административными входами полезен контроль запусков процессов с эффективным UID 0, но только после оценки объёма.
- Для расследования входов сохраняют события auditd, сообщения SSH/PAM и данные о сессиях.
- Не добавляйте наблюдение за всем
/etc,/usr,/varили всеми системными вызовами без сценария: это может резко увеличить поток записей, нагрузку и время поиска.
Широкие правила сначала проверяют на одном хосте
execve и рекурсивное наблюдение за системными каталогами могут создавать большой объём событий. Сначала измерьте поток на одном сервере в обычный и пиковый период, проверьте свободное место и поиск по ключу. Затем документируйте принятое правило и переносите его на остальные однотипные хосты.Проверьте службу auditd и активные правила
Первичная проверка Linux Audit
Команды подходят для систем с systemd и установленными утилитами audit userspace. Выполняйте их с правами root или через sudo.
- 1Проверьте наличие утилит и пакетаВ Debian/Ubuntu проверьте пакет через
dpkg -l auditd; в RHEL-совместимых системах —rpm -q auditи при необходимостиrpm -q audit-libs. Если пакет отсутствует, установите пакет, предусмотренный репозиторием и документацией своего выпуска. После установки должны быть доступны как минимумauditctl,ausearchиaureport. - 2Проверьте состояние службыВыполните
systemctl status auditd. Ожидаемый результат — состояниеactive (running). Способ включения и запуска сверяйте с документацией выпуска. В Debian/Ubuntu с systemd обычно применяютsystemctl enable --now auditd. В RHEL-совместимых системах для автозапуска используютsystemctl enable auditd, а для непосредственного запуска документация auditd предписываетservice auditd start. После запуска повторите проверку. На системах без systemd используйте штатный менеджер служб своего дистрибутива. - 3Посмотрите состояние ядра и загруженные правилаВыполните
auditctl -sиauditctl -l. Первая команда показывает состояние подсистемы, включая режим включения аудита; вторая — правила, активные в ядре сейчас. Пустой список не доказывает ошибку службы, но означает, что специальных правил контроля объектов не загружено. - 4Проверьте постоянную конфигурациюПосмотрите файлы
*.rulesв/etc/audit/rules.d/и итоговый/etc/audit/audit.rules, если он используется вашим выпуском. В конфигурациях сaugenrulesфрагменты обычно объединяются в итоговый файл при загрузке. Правило, видимое только вauditctl -lи отсутствующее в постоянных файлах, исчезнет после перезагрузки или штатной перезаг рузки правил.
sudo auditctl -s && sudo auditctl -lsudo find /etc/audit/rules.d -maxdepth 1 -type f -name '*.rules' -print 2>/dev/null; sudo test -r /etc/audit/audit.rules && sudo sed -n '1,220p' /etc/audit/audit.rulesДобавьте постоянное правило auditd для файла или каталога
Для современных правил контроля файлов предпочтителен syscall-формат с path для одного файла или dir для каталога. Поле perm=wa означает запись и изменение атрибутов; не добавляйте r, если чтение не является сценарием контроля, поскольку оно часто создаёт лишние события. Ключ -k задаёт понятную метку, по которой затем ищут записи.
# Тестовый файл: создайте его до загрузки правила.
-a always,exit -F arch=b64 -F path=/etc/audit-test.conf -F perm=wa -k audit-test-file
# Пример для существующего каталога конфигурации конкретного приложения.
# Замените путь и ключ на свои. Правило действует рекурсивно ниже каталога,
# но не переходит на вложенную смонтированную файловую систему.
# -a always,exit -F arch=b64 -F dir=/etc/myapp -F perm=wa -k myapp-config-changearch=b64 соответствует 64-битным системным вызовам. Если хост запускает 32-битные приложения, добавляют эквивалентное правило с arch=b32 после проверки поддержки архитектуры. Старый watch-синтаксис -w путь -p wa -k ключ может встречаться в готовых политиках, но документация audit userspace рекомендует syscall-правила с path или dir как более производительный вариант.
Проверьте правило на безопасном тестовом файле
- 1Создайте тестовый объектСоздайте
/etc/audit-test.confс безвредным содержимым, напримерsudo sh -c 'printf "# audit test\n" > /etc/audit-test.conf'. Этот файл не должен использоваться службой или содержать секреты. - 2Сохраните правило в rules.dСоздайте файл
/etc/audit/rules.d/30-local-file-watch.rulesс первым правилом из примера. Выберите уникальный ключaudit-test-file: он станет устойчивым условием поиска. - 3Загрузите постоянный набор правилНа системах с
augenrulesвыполнитеsudo augenrules --load. Если дистрибутив использует другой штатный механизм, примените его. Затем выполнитеsudo auditctl -lи убедитесь, что правило с путём и ключом активно. Ошибка загрузки требует проверки синтаксиса, порядка файлов и сообщений службы, а не временного отключения аудита. - 4Вызовите контролируемое изменениеИзмените тестовый файл:
sudo sh -c 'printf "changed\n" >> /etc/audit-test.conf'. После команды найдите событие по ключу. Ожидаемый результат — одна или несколько связанных записей с путём файла и ключом правила. - 5Убедитесь в постоянствеПосле плановой перезагрузки либо штатной загрузки набора снова проверьте
auditctl -l. Если правило пропало, оно было загружено только временно черезauditctlили не попало в механизм постоянной конфигурации.
sudo augenrules --load && sudo auditctl -lКонтроль запусков привилегированных команд
Для контроля запусков от имени привилегированной учётной записи можно аудитировать системный вызов execve, когда эффективный UID процесса равен 0. Условие auid>=1000 обычно исключает системные учётные записи, а auid!=unset — процессы без исходной пользовательской сессии. Границу UID выбирают по локальной политике, а не копируют без проверки.
# Запуски программ с EUID 0 из пользовательских сессий.
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=unset -k privileged-exec
# Добавьте аналог с arch=b32, только если на хосте допустимы 32-битные приложения.
# -a always,exit -F arch=b32 -S execve -F euid=0 -F auid>=1000 -F auid!=unset -k privileged-execauditd не записывает все действия root
execve, а не полную историю командной оболочки. Shell builtins, действия через уже открытый файловый дескриптор, операции внутри долгоживущего процесса и обходные пути могут не дать ожидаемой записи. При компрометации с высокими привилегиями атакующий также может пытаться менять аудит или заполнить хранилище. Поэтому события execve сопоставляют с sudo, PAM, journald и журналами приложений.Как читать и искать события через ausearch и aureport
Одно действие обычно состоит из нескольких записей с общим идентификатором события. Поля имеют разный смысл: AUID — login UID, назначенный при входе и наследуемый процессами сессии; для процессов вне пользовательского входа он может быть unset. UID — реальный UID процесса; EUID — эффективный UID, участвующий во многих проверках доступа, но не заменяющий FSUID, capabilities и другие механизмы полномочий; ses — идентификатор сессии ауди та; exe — путь к исполняемому файлу; key — метка сработавшего правила аудита.
Например, пользователь ivan входит по SSH и запускает sudo vi /etc/audit-test.conf. У процесса редактора EUID обычно будет 0, поскольку права получены через sudo, но AUID останется UID ivan. Именно AUID связывает действие с исходной пользовательской сессией; поиск только по UID или EUID может дать другой ответ.
`-i` просит утилиту интерпретировать числовые UID и другие значения в читаемый вид. Доступные форматы времени и состав отчётов зависят от версии audit userspace.
| Задача | Команда | Что проверить |
|---|---|---|
| Найти изменения тестового файла | sudo ausearch -k audit-test-file -i | Ключ, путь, время, AUID/EUID и результат |
| Ограничить поиск периодом | sudo ausearch -k audit-test-file -ts today -i | События с начала текущего дня; для точного интервала используйте дату и время в формате, принятом ausearch вашей версии |
| Найти действия исходного пользователя | sudo ausearch -ul ivan -ts today -i | AUID, или login UID: пользователь, от имени которого была открыта исходная сессия |
| Найти запуск конкретного файла | sudo ausearch -x /usr/bin/sudo -ts today -i | Поле exe; путь должен совпадать с записанным в событии |
| Найти неуспешные события | sudo ausearch -sv no -ts today -i | Записи с неуспешным результатом; причина зависит от типа события |
| Получить сводку аутентификации | sudo aureport --auth --failed -i | Сводный отчёт по неудачным событиям аутентификации, попавшим в Linux Audit |
| Посмотреть сводку входов | sudo aureport --login -i | События входа и сессий, если они передаются в Linux Audit |
sudo ausearch -k audit-test-file -ts today -iДля анализа привилегированных запусков используйте ключ: sudo ausearch -k privileged-exec -ts today -i. В найденном событии сопоставьте AUID, EUID, ses, exe, путь и результат. aureport удобен для сводки, но исходные записи ausearch важнее, когда нужно понять контекст одной операции.
Где проверить входы SSH и локальные сессии Linux
Для входов SSH используйте несколько источников. В Debian и Ubuntu сообщения аутентификации часто находятся в /var/log/auth.log; в RHEL-совместимых системах — в /var/log/secure. Это зависит от rsyslog, journald и конфигурации PAM/sshd: файл может отсутствовать, а сообщения могут храниться только в journal или быть перенаправлены в другое место.
sudo journalctl -u sshd.service -u ssh.service --since todaysudo grep -E 'sshd|sudo|session' /var/log/auth.log /var/log/secure 2>/dev/null | tail -n 200Срок хранения зависит от ротации файлов, лимитов journald, настройки logrotate и политики хранения.
| Команда | Назначение | Ограничение |
|---|---|---|
last | Список учтённых успешных входов из wtmp | Не показывает все детали аутентификации и зависит от сохранности/ротации wtmp |
sudo lastb | Список неудачных входов из btmp, если файл ведётся | Часто требует root; наличие записей зависит от PAM и настроек |
lastlog | Последний зарегистрированный вход каждого пользователя | Это не история входов; современные системы могут иметь иной механизм хранения или ограниченную актуальность данных |
who или w | Текущие интерактивные сессии | Не заменяет историю и не показывает завершённые подключения |
aureport --login -i | Сессии, зарегистрированные Linux Audit | Зависит от интеграции PAM и политики аудита |
Настройте хранение и ротацию журнала auditd
Проверьте /etc/audit/auditd.conf до добавления шумных правил. Существенные параметры обычно включают log_file, log_file_mode, max_log_file, num_logs, max_log_file_action, пороги свободного места space_left и admin_space_left, а также действия space_left_action, admin_space_left_action, disk_full_action и disk_error_action. Допустимые значения действий зависят от ве рсии auditd и политики дистрибутива.
max_log_fileзадаёт максимальный размер отдельного файла журнала в мегабайтах, аnum_logs— количество файлов, сохраняемых при ротации.max_log_file_action = ROTATEобычно используется для ротации файлов; вариантkeep_logsсохраняет файлы и требует особенно тщательного контроля места.- Пороги
space_leftиadmin_space_leftзадают раннее и критическое предупреждение о свободном месте. Реакцией могут быть журналирование, уведомление, выполнение программы, приостановка аудита, переход в однопользовательский режим или остановка системы — выбирайте только предусмотренные вашей версией действия. - Действие при полном диске — компромисс между сохранением аудита и доступностью сервиса. Решение должно быть утверждено владельцем сервера: остановка или однопользовательский режим мо жет вызвать простой, а игнорирование события — потерю наблюдаемости.
- Ограничьте доступ к каталогу и файлам аудита: обычно читать их должны только root и уполномоченная группа. Проверьте владельца и режимы прав после ротации.
sudo grep -E '^(log_file|log_file_mode|max_log_file|num_logs|max_log_file_action|space_left|space_left_action|admin_space_left|admin_space_left_action|disk_full_action|disk_error_action)' /etc/audit/auditd.conf; sudo df -h /var/log /var/log/audit 2>/dev/nullЛокальный журнал не равен долговремен ному хранению
max_log_file_action = ROTATE старые файлы удаляются после достижения настроенного количества ротаций. При KEEP_LOGS они сохраняются, но локальный объём не ограничивается автоматически и хранилище может заполниться. Требуемый срок хранения рассчитывают по реальному потоку событий, размеру хранилища и обязательствам организации. Внешнее защищённое хранение и корреляция событий безопасности рассматриваются отдельно в статье «Централизованный сбор журналов безопасности: события, корреляция и оповещения».Когда включать immutable rules
Режим -e 2 — это неизменяемое правило аудита: после его применения активные правила нельзя изменить до перезагрузки. Его размещают последней строкой постоянного набора правил, например в завершающем файле с лексикографически поздним именем. Это повышает устойчивость конфигурации, но не заменяет защиту привилегированных учётных записей и внешнее хранение журналов.
# Добавляйте только после проверки всех остальных правил.
-e 2Сначала проверка, затем immutable
-e 2 нельзя штатно добавить, удалить или перезагрузить активное правило до следующей перезагрузки. До включения проверьте синтаксис, загрузку, события по ключам, свободное место и аварийную процедуру. Если постоянный файл с -e 2 уже загружается при старте, для будущего изменения удалите эту строку из постоянной конфигурации, перезагрузите сервер и только после этого примените новый набор правил.Диагностика auditd service failed, immutable rules и заполнения диска
Проблема
auditd не запускается или имеет состояние failed
Возможные причины
- Ошибка синтаксиса или порядка правил
- Недоступен каталог журнала, неверны права либо закончилось место
- Несовместимый параметр `auditd.conf` или проблема пакета/службы
- Активный immutable-режим не позволяет перезагрузить правила
Решение
Сначала сохраните текст ошибки и выполните systemctl status auditd --no-pager и journalctl -u auditd -b --no-pager. Затем проверьте свободное место командой df -h, права и доступность каталога журнала, синтаксис недавно изменённых файлов rules.d, а также вывод auditctl -s. Исправьте конкретную причину в постоянной конфигурации и повторите штатную загрузку. Не отключайте auditd как способ устранения ошибки.
Как избежать
Изменяйте правила по одному, проверяйте их на тестовом хосте, контролируйте место до расширения аудита и сохраняйте известный рабочий набор конфигурации.
Проблема
Журнал auditd заполняет диск
Возможные причины
- Слишком широкое правило или неожиданный поток событий
- Недостаточная ротация либо чрезмерно долгий локальный срок хранения
- Неудачная реакция на переполнение или неработающая ротация
Решение
Определите, какие ключи и типы событий создают поток, через ausearch и размер файлов журнала. Не удаляйте журналы до фиксации ситуации и проверки требований хранения. Затем сузьте чрезмерно широкое правило, скорректируйте утверждённые параметры ротации и выделите достаточное место. Проверьте, что выбранные действия при порогах свободного места действительно поддерживаются установленной версией auditd.
Как избежать
Измеряйте объём событий перед массовым развёртыванием, настраивайте предупреждение раньше полного диска и отдельно планируйте [централизованное журналирование](/baza-znaniy/glossariy/centralized-logging), если локальный срок хранения недостаточен.
Проблема
Правила стали immutable и не изменяются
Возможные причины
- В активный набор загружено завершающее правило `-e 2`
Решение
Проверьте постоянные файлы на строку -e 2, подготовьте исправленный набор без этой строки и запланируйте перезагрузку. До перезагрузки активную неизменяемую конфигурацию менять нельзя. После старта убедитесь, что правила загружены без immutable, внесите и проверьте нужные изменения, а затем возвращайте -e 2 последним правилом.
Как избежать
Включайте immutable только после тестирования полного набора и фиксируйте процедуру изменения правил, включая окно перезагрузки.
Границы auditd и Lynis
Lynis можно запускать локально командой sudo lynis audit system, если инструмент установлен и его использование одобрено для хоста. Он проверяет конфигурацию и формирует рекомендации, но не подтверждает факт компрометации и не заменяет поиск по журналам. Результаты Lynis рассматривайте как гипотезы для проверки в рамках hardening Linux-сервера и управления уязвимостями сервера.
Если есть признаки взлома
Термины в статье
- Linux Audit Framework
- Linux Audit Framework — подсистема аудита Linux, регистрирующая заданные события ядра и ОС в структурированных записях для расследований, контроля доступа и соответствия требованиям.
- Lynis
- Lynis — инструмент аудита защищённости Unix-подобных систем, проверяющий настройки ОС и служб по набору тестов и выдающий рекомендации по усилению конфигурации.
- auditd
- auditd — служба Linux Audit, принимающая от ядра сообщения аудита, в том числе отобранные по правилам, и записывающая их в журнал для расследований, анализа доступа и проверки соответствия.
- Аудиторский след
- Аудиторский след — упорядоченный по времени набор записей о действиях и изменениях, позволяющий установить, кто, когда, над чем и с каким результатом выполнил операцию, а также откуда поступил запрос.
- Журнал аудита
- Журнал аудита — защищаемая совокупность записей о значимых действиях и изменениях с указанием времени, субъекта, объекта, результата и контекста для расследования и контроля.
- Журнал аутентификации
- Журнал аутентификации — набор записей о попытках подтверждения личности, их результатах и данных, необходимых для расследования и контроля доступа.
- Инцидент информационной безопасности
- Инцидент информационной безопасности — выявленное или обоснованно подозреваемое событие, нарушающее политику защиты либо создающее угрозу конфиденциальности, целостности или доступности.
- Конфигурационное соответствие
- Конфигурационное соответствие — степень, в которой фактические параметры ИТ-объекта отвечают утверждённой политике, шаблону или базовой линии.
- Корреляция событий безопасности
- Корреляция событий безопасности — анализ связанных записей из одного или нескольких источников для выявлен ия общей цепочки действий, аномалии или признаков инцидента.
- Неизменяемое правило аудита
- Неизменяемое правило аудита — управляющая настройка Linux Audit, блокирующая изменение активной конфигурации аудита до перезагрузки системы.
- Правило аудита
- Правило аудита — элемент конфигурации системы аудита, определяющий, какие события или операции подлежат регистрации и при каких условиях.
- Привилегированная учётная запись
- Привилегированная учётная запись — учётная запись с правами управления системами, данными или политиками доступа, превышающими полномочия обычного пользователя.
- Событие аудита
- Событие аудита — действие, попытка действия или изменение состояния, регистрируемое системой согласно политике аудита для последующей проверки.
- Событие безопасности
- Событие безопасности — наблюдаемое действие или изменение состояния системы либо сети, значимое для защиты; оно может быть штатным, связанным с ошибкой или подозрительным.
- Централизованное журналирование
- Централизованное журналирование — сбор и хранение журналов разных систем в общем сервисе для унифицированного поиска, контроля целостности и анализа.
