Короткий ответ
journalctl по sshd не заменяет auditd: нужны syscall/file watches на /etc/passwd, /etc/sudoers, sudoers.d, ключи, execve для sudo/su по политике. На Ubuntu установите auditd, правила кладите в /etc/audit/rules.d/*.rules, загружайте augenrules --load. Проверка: auditctl -l, ausearch -f /etc/sudoers. Не ставьте -a never,task «чтобы не тормозило» как постоянный режим. Не отключайте AppArmor: это другой слой. Хост host.example (10.0.20.10), пользователь admin.
Симптомы и как отличить
systemctl status auditdinactive;auditctl -senabled 0;- после смены sudoers нет записи в audit;
- только rsyslog auth, без syscall.
| Нужен след | Инструмент |
|---|---|
| Failed SSH password | journal ssh / auth.log |
| Кто открыл sudoers | audit watch |
| AVC SELinux | audit на RHEL; на Ubuntu AppArmor в journal |
| Удаление логов | защита journal |
Возможные причины
- Пакет не установлен.
audit.rulesпустой /-a never,task.- Правила в
/etc/audit/audit.rulesзатираются, аrules.dпуст (наоборот тоже бывает). - Переполнен диск audit,
space_left_actionignore. - Контейнер без CAP_AUDIT_CONTROL — auditd на хосте, не в госте без прав.
- Правила с синтаксической ошибкой, загрузка оборвалась.
Диагностика
dpkg -l auditd | grep ^ii
systemctl status auditd --no-pager -l
sudo auditctl -s
sudo auditctl -l | head
ls -l /etc/audit/rules.d/ /etc/audit/auditd.confТест следа (на тестовом файле, не ломая sudoers):
sudo touch /etc/myservice/audit-test
sudo auditctl -w /etc/myservice/audit-test -p wa -k testkey
echo test | sudo tee /etc/myservice/audit-test
sudo ausearch -k testkey -ts recent
sudo auditctl -W /etc/myservice/audit-test -p wa -k testkeyЕсли даже это пусто — демон/ядро audit не работают, не «мало правил».
Диск:
df -h /var/log/audit
sudo grep -E 'space_left|admin_space|disk_full|max_log_file' /etc/audit/auditd.confРешение
Сценарий A. Установка и разумный минимум
sudo apt-get update
sudo apt-get install -y auditd audispd-plugins
sudo systemctl enable --now auditdФайл /etc/audit/rules.d/40-identity.rules (пример проверяемого минимума):
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k sshd_cfg
-w /etc/ssh/sshd_config.d/ -p wa -k sshd_cfg
-w /home/admin/.ssh/authorized_keys -p wa -k ssh_keysSudo exec (узко, не весь execve системы):
-w /usr/bin/sudo -p x -k sudo_exec
-w /usr/bin/su -p x -k su_execИммутабельность правил после загрузки (осторожно: снять только ребутом):
# в 99-finalize.rules в конце, когда набор стабилен
-e 2На первом внедрении не включайте -e 2, пока не отладите. Иначе правка правил потребует reboot.
sudo augenrules --check
sudo augenrules --load
sudo auditctl -lНа 22.04/24.04 augenrules собирает /etc/audit/audit.rules. Не держите противоречивый ручной файл без понимания порядка.
Сценарий B. Журналы не крутятся
В auditd.conf: разумный max_log_file, max_log_file_action = rotate, num_logs. disk_full_action = syslog (или single в high-security, это уже жёстко). Не ignore на заполнении, если вам нужен след.
Вынос копии: audisp syslog plugin / remote. Связка с логами без следа.
Сценарий C. Слишком шумно
Не -a never,task. Сужайте ключи, исключите частые пути. auditctl -a exclude,never -F msgtype=... только с пониманием.
Для пользователей см. аудит учёток и sudo широкий.
Что писать в правила сверх identity. Полезный узкий набор на app-сервере: watch на /etc/crontab, /etc/cron.d, /etc/systemd/system (wa), exec на /usr/bin/passwd. Не включайте сразу -a always,exit -F arch=b64 -S execve на хосте 1С: получите гигабайты и dropped events (auditctl -s backlog). Сначала identity, через неделю — cron/systemd, потом точечные syscall по результатам IR.
Ubuntu и auditd.service: после augenrules --load проверьте, что enabled 1 пережил reboot. Если audit=0 в cmdline GRUB — правила бесполезны; уберите параметр, не «для производительности».
Буфер: auditctl -s lost/backlog. Рост lost = слишком шумно или диск тормозит. Сужайте, не audit=0.
Интерпретация ausearch -k sudoers: смотрите auid, uid, exe, success. auid=4294967295 часто unset (системные). Для человека ожидайте auid учётки admin. Корреляция с journalctl _COMM=sudo даёт команду, audit — факт записи файла.
Контейнеры: правила на хосте видят exe=/usr/bin/docker. Это нормально. Не ставьте auditd в каждый контейнер без CAP_AUDIT.
Синхронизация времени: без NTP метки audit вводят в заблуждение при сверке с SIEM. Не отключайте chrony «чтобы не мешал».
Как проверить, что проблема устранена
systemctl is-active auditd
sudo auditctl -s | grep enabled
sudo auditctl -l | grep -E 'passwd|sudoers'
sudo ausearch -k sudoers -ts todayСделайте innocuous правку в тестовом drop-in sudoers через visudo и найдите SYSCALL. SSH admin жив. AppArmor enforce.
aureport --summary за сегодня не пустой после нагрузки.
Если не помогло
enabled 0после load: синтаксис, смотритеjournalctl -u auditd.- Правила есть, ausearch пуст: время TZ,
-ts recent, или watch на каталог vs файл. - Контейнер: ставьте auditd на hypervisor/хост.
- Ubuntu с SELinux не штатно; на Rocky
ausearch -m AVC— неsetenforce 0. - Производительность БД: профилируйте конкретные syscall правила, не выключайте весь audit навсегда.
Профилактика
- Правила в ansible, ключи стабильные.
- Мониторинг: auditd active, рост логов,
space_left. - IR playbook:
ausearchпо key identity/sudoers/ssh_keys. - Иммутабельность
-e 2только после пилота.
FAQ
auditd vs journald
Разные буферы. journal удобен для unit. audit — syscall и watches, устойчивее к «просто не логируем приложение». Оба нужны.
Можно ли audisp → SIEM сразу
Да, syslog plugin. Сначала локальные правила должны вообще срабатывать.
Watch на /etc целиком
Шумно и тяжело. Список файлов лучше.
Docker и audit
События хоста. Root в контейнере с bind /etc будет виден как процесс docker. Это не повод не ставить правила.
Нужен ли audit для PCI «на всё execve»
Иногда требуют. Начните с identity/sudo/sshd, потом расширяйте. Слепой -a always,exit -S execve на busy хосте — шторм.