Linux Audit System: auditd для безопасности сервера — АйТи Фреш

Linux Audit System: auditd для безопасности сервера

Linux Audit System: auditd для безопасности сервера

Что такое Linux Audit System и зачем она нужна

Linux Audit System — это подсистема ядра, которая фиксирует системные события: обращения к файлам, системные вызовы, изменения прав доступа, попытки аутентификации. Не путайте с просмотром логов приложений — auditd работает на уровне ядра и перехватывает события до того, как приложение может их скрыть.

Зачем это нужно на практике? Представьте: с сервера утекли данные. Nginx пишет access.log, но кто залез в /etc/shadow или скопировал базу данных — из логов приложений не узнать. Именно здесь auditd незаменим. Мы развёртываем его на всех серверах клиентов, где есть персональные данные или финансовая информация.

Типичные задачи, которые решает linux audit system:

  • Отслеживание изменений конфигурационных файлов — /etc/passwd, /etc/sudoers, SSH-ключи
  • Мониторинг запуска привилегированных команд — sudo, su, все команды от root
  • Аудит доступа к конфиденциальным файлам и каталогам
  • Фиксация попыток несанкционированного входа
  • Соответствие требованиям 152-ФЗ, ISO 27001, PCI DSS

Установка и первоначальная настройка auditd

В большинстве дистрибутивов auditd уже есть в репозитории. На Debian/Ubuntu — одна команда и готово.

Установка и запуск

Установка и первый запуск:

# Debian / Ubuntu
apt install auditd audispd-plugins -y
systemctl enable --now auditd

# RHEL / CentOS / Rocky
dnf install audit audit-libs -y
systemctl enable --now auditd

# Проверяем статус
systemctl status auditd
auditctl -s  # Состояние подсистемы ядра

После запуска auditd начинает писать в /var/log/audit/audit.log. Пока без правил — только базовые события аутентификации.

Настройка auditd.conf

Главный конфиг — /etc/audit/auditd.conf. Ключевые параметры, которые мы меняем на каждом сервере:

# Максимальный размер лог-файла (МБ)
max_log_file = 100

# Что делать при заполнении: rotate — ротация
max_log_file_action = rotate

# Сколько файлов хранить
num_logs = 10

# Что делать при нехватке места (space_left_action)
space_left_action = SYSLOG
admin_space_left_action = SUSPEND

# Запись на диск: sync — надёжнее, но медленнее
flush = INCREMENTAL_ASYNC

На серверах с требованиями compliance мы ставим max_log_file = 200 и num_logs = 30 — 6 ГБ истории. Для большинства клиентов хватает 10 файлов по 100 МБ.

Правила аудита: синтаксис и примеры

Правила — это сердце всей системы. Без них auditd пишет минимум. С хорошо настроенными правилами вы знаете всё, что происходит на сервере.

Синтаксис правил auditctl

Два типа правил: watch (наблюдение за файлами) и syscall (перехват системных вызовов):

# Watch-правило: наблюдение за файлом или каталогом
# -w путь -p права -k ключ
auditctl -w /etc/passwd -p wa -k user_changes
#   -p wa: w=запись, a=смена атрибутов
#   доступные флаги: r(чтение), w(запись), x(выполнение), a(атрибуты)

# Syscall-правило: перехват системных вызовов
# -a действие,фильтр -F поле=значение -S системный_вызов -k ключ
auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k root_exec
#   always,exit — всегда при выходе из syscall
#   arch=b64 — 64-битные вызовы (добавьте b32 для 32-битных)
#   euid=0 — только от root

Правила, заданные через auditctl, живут до перезагрузки. Постоянные правила — в файлах /etc/audit/rules.d/*.rules.

Базовый набор правил безопасности

Вот правила, которые мы кладём в /etc/audit/rules.d/security.rules на каждый новый сервер:

# /etc/audit/rules.d/security.rules

# Неизменяемость самих правил (требует перезагрузки для изменения)
# -e 2

# Учётные записи и аутентификация
-w /etc/passwd -p wa -k user_accounts
-w /etc/shadow -p wa -k user_accounts
-w /etc/group -p wa -k user_accounts
-w /etc/gshadow -p wa -k user_accounts
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

# SSH-ключи
-w /root/.ssh/ -p wa -k ssh_root
-w /home/ -p wa -k ssh_home

# Конфигурация системы
-w /etc/ssh/sshd_config -p wa -k sshd_config
-w /etc/pam.d/ -p wa -k pam_config
-w /etc/cron.d/ -p wa -k cron_config
-w /etc/crontab -p wa -k cron_config

# Все команды от root
-a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands
-a always,exit -F arch=b32 -S execve -F euid=0 -k root_commands

# Повышение привилегий
-a always,exit -F arch=b64 -S setuid -k priv_escalation
-a always,exit -F arch=b64 -S setresuid -k priv_escalation
-a always,exit -F arch=b64 -S setreuid -k priv_escalation

# Изменение прав доступа
-a always,exit -F arch=b64 -S chmod -k file_perm
-a always,exit -F arch=b64 -S chown -k file_perm
-a always,exit -F arch=b64 -S fchmod -k file_perm
-a always,exit -F arch=b64 -S fchown -k file_perm

# Применяем правила
augenrules --load
Анализ логов: ausearch и aureport

Анализ логов: ausearch и aureport

Собрать логи — половина дела. Уметь быстро найти нужное — вот что реально важно при расследовании инцидента. Два инструмента: ausearch для поиска конкретных событий и aureport для сводных отчётов.

ausearch: поиск событий

Основные сценарии использования ausearch:

# По ключу (нашим меткам из правил)
ausearch -k user_accounts -i
ausearch -k sudoers --start today -i

# По пользователю
ausearch -ua john -i
ausearch -ui 1001 --start yesterday --end today -i

# По времени
ausearch --start "02/14/2026 08:00:00" --end "02/14/2026 18:00:00" -i

# По типу события
ausearch -m USER_LOGIN -i   # Все входы в систему
ausearch -m SYSCALL -i -k root_commands | tail -50

# По результату (success/failure)
ausearch --success no -m USER_AUTH -i  # Только неудачные входы

# -i расшифровывает числовые UID/GID в имена

При расследовании инцидентов мы начинаем с ausearch -k sudoers -i — сразу видно, кто и когда менял sudoers, что обычно предшествует эскалации привилегий.

aureport: сводные отчёты

aureport строит агрегированные отчёты — удобно для ежедневного/еженедельного мониторинга:

# Общая сводка за период
aureport --start today

# Отчёт по аутентификации
aureport -au --start today

# Топ выполненных команд
aureport -x --summary

# Неудачные события
aureport --failed --start today

# Отчёт по изменениям файлов
aureport -f --start yesterday --end today

# Сводка по пользователям
aureport -u --summary

# Для cron (ежедневный отчёт)
aureport --start yesterday --end today > /tmp/audit_daily.txt
mail -s "Audit Report $(hostname) $(date +%F)" admin@itfresh.ru < /tmp/audit_daily.txt

Мониторинг критичных файлов и каталогов

Один из самых частых запросов от клиентов — «хотим знать, кто читает или изменяет вот этот каталог». Именно для этого watch-правила подходят идеально.

Правила для конкретных данных

Добавляем мониторинг под конкретные задачи клиентов:

# Мониторинг базы данных PostgreSQL
-w /var/lib/postgresql/ -p rwa -k pg_data
-w /etc/postgresql/ -p wa -k pg_config

# Мониторинг веб-корня (загрузки файлов)
-w /var/www/html/uploads/ -p wxa -k web_uploads

# Резервные копии
-w /backup/ -p rwa -k backup_access

# Конфигурация nginx
-w /etc/nginx/ -p wa -k nginx_config

# Монтирование устройств (риск вынести данные)
-a always,exit -F arch=b64 -S mount -k mount_ops
-a always,exit -F arch=b64 -S umount2 -k mount_ops

# Создание/удаление файлов в критичных каталогах
-a always,exit -F arch=b64 -S creat -F dir=/var/www -k web_file_create
-a always,exit -F arch=b64 -S unlinkat -F dir=/var/www -k web_file_delete

Флаг -p r (чтение) генерирует очень много событий на активных каталогах. Используйте его точечно — только там, где это действительно нужно для compliance.

Интеграция с SIEM и централизованный сбор

Один сервер — хорошо. Двадцать серверов — нужна централизация. Иначе при инциденте придётся лазить по каждому хосту отдельно.

audisp-remote: отправка на центральный сервер

Настройка отправки audit-событий на центральный сервер через audisp-remote:

# На всех клиентах — установка плагина
apt install audispd-plugins -y

# /etc/audisp/plugins.d/au-remote.conf
active = yes
direction = out
path = /sbin/audisp-remote
type = always
args = /etc/audisp/audisp-remote.conf
format = string

# /etc/audisp/audisp-remote.conf
remote_server = 10.0.0.50  # IP центрального сервера
port = 60
transport = tcp
enable_krb5 = no

# На центральном сервере — принимаем подключения
# /etc/audit/auditd.conf
tcp_listen_port = 60
tcp_max_per_addr = 10

systemctl restart auditd

Для крупных инсталляций мы используем rsyslog как промежуточный транспорт и отправляем события в Elasticsearch или Graylog — там уже полноценный SIEM с дашбордами и алертами.

Практический кейс: расследование инцидента

Практический кейс: расследование инцидента

Покажу реальный сценарий из практики — как auditd помог нам разобраться в инциденте за 20 минут.

Клиент — торговая компания. Сообщили: из базы данных клиентов исчезли записи. Кто, когда, как — неизвестно. DBA говорит «я не трогал». Начинаем расследование.

Шаги расследования

Последовательность действий при расследовании инцидента с данными:

# Шаг 1: Смотрим все события за период инцидента
ausearch --start "02/10/2026 00:00:00" --end "02/10/2026 23:59:59" -i \
  | grep -E "DELETE|DROP|TRUNCATE" | head -50

# Шаг 2: Кто подключался к PostgreSQL-порту
ausearch -k pg_data --start "02/10/2026" -i

# Шаг 3: Запуск psql от разных пользователей
ausearch -k root_commands -i | grep psql

# Шаг 4: Полная история конкретного пользователя за день
ausearch -ua dbadmin --start "02/10/2026" --end "02/10/2026" -i \
  | ausearch -m SYSCALL -i | grep -A3 "comm=\"psql\""

# Шаг 5: Успешные и неуспешные подключения к БД
ausearch -m USER_AUTH --start yesterday -i | grep postgres

В том случае выяснилось: подключение было с внутреннего IP, пользователь — системный аккаунт деплоя, который кто-то использовал вручную в 3 ночи. Без auditd этого было бы не установить.

Часто задаваемые вопросы

Нагрузка зависит от количества правил и объёма событий. При правильно настроенных правилах — 1-3% CPU. Не стоит ставить правила на exec всех процессов без фильтрации: лог переполнится и производительность упадёт. Используйте фильтры по uid, pid, ключевым путям.

По умолчанию в /var/log/audit/audit.log. Размер и ротация настраиваются в /etc/audit/auditd.conf — параметры max_log_file, max_log_file_action, num_logs. Для централизованного хранения используйте audisp-remote для отправки на SIEM.

Да, они не конфликтуют. SELinux/AppArmor контролируют доступ в реальном времени, auditd — фиксирует события для расследования. На практике используем оба слоя: AppArmor блокирует, auditd пишет журнал для разбора инцидентов.

Добавьте правило: -a always,exit -F arch=b64 -S unlinkat -F dir=/path/to/dir -k file_delete. Затем ausearch -k file_delete -i покажет пользователя, время и полный путь. Без предварительного правила восстановить эту информацию невозможно.

Используйте audisp-plugins: плагин syslog отправляет события в rsyslog, откуда можно маршрутизировать на email или SIEM. Другой вариант — скрипт на auditctl watch + inotifywait для конкретных файлов с немедленным уведомлением в Telegram через curl.

#linux audit system #auditd настройка #безопасность linux #ausearch #aureport

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 💬 MAX: +7 903 729-62-41 ✈️ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.