---
title: "Аудит системных событий на Linux-серверах"
description: "Аудит системных событий на Linux-серверах с помощью auditd. Установка, настройка, создание правил. Документация и инструкции по настройке облачных серверов Timeweb Cloud."
---

# Аудит системных событий

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

Для поддержания безопасности и стабильности системы важно следить за ее состоянием. В основном это достигается с помощью мониторинга, анализа логов, а также — аудита системных событий. Хотя аудит сам по себе не является средством защиты от нежелательных действий, он полезен для обнаружения нарушений в безопасности и их дальнейшего устранения.

Специальная утилита — `auditd` — позволяет вести мониторинг системных действий и анализировать их. Система аудита устанавливает триггеры на функции, ответственные за обработку системных вызовов (обращений к функциям ядра, без которых не может быть произведена ни одна операция в системе), после чего эти триггеры срабатывают согласно пользовательским правилам. Информация об всех действиях записывается в журнал и после может быть проанализирована администратором.

С помощью `auditd` можно отслеживать, например, такие события, как запуск и завершение работы системы; запуск и остановка приложений; доступ к файлам и изменение прав на них; изменение информации о пользователе или группе; установка сетевого соединения, изменение настроек сети и многое другое.

## Установка

В системе CentOS пакет `audit`, как правило, установлен по умолчанию.

Для установки на Debian / Ubuntu выполните:

```shell
sudo apt install auditd
```

В пакет входит несколько утилит:

-   `auditctl` — управление системой аудита, получение информации о состоянии системы, добавление и удаление правил;
-   `autrace` — аудит событий, вызываемых процессами (аналогично `strace`);
-   `ausearch` — поиск событий в журналах;
-   `aureport` — создание отчетов о работе аудита.

Основные настройки демона `auditd` (формат логов, частота обновления, максимальный размер и др.) находятся в конфигурационном файле `/etc/audit/auditd.conf`. Как правило, стандартной конфигурации достаточно для эффективной работы с аудитом, но вы можете дополнительно изменить настройки по своему усмотрению. Подробную информацию о каждом параметре можно получить, например, [здесь](https://www.opennet.ru/man.shtml?topic=auditd.conf&category=5&russian=0), либо выполнив `man auditd.conf`.

## Создание правил

Настройка правил выполняется с помощью утилиты `auditctl` и следующих опций:

-   `-l` — вывести список созданных правил (если выполнить команду сразу после установки `auditd`, список правил будет пустым);
-   `-а` — добавить новое правило;
-   `-d` — удалить правило из списка;
-   `-D` — удалить все правила.

Для создания нового правила используется команда:

```shell
sudo auditctl -a список,действие -S имя_системного_вызова -F фильтр
```

**Список** — это список событий, в который нужно добавить правило. Для упрощения можно воспринимать список как фильтр, позволяющий сделать правило точнее. 

Существует пять списков:

-   `task` — события, связанные с созданием процессов;
-   `entry` — события, происходящие при входе в системный вызов;
-   `exit` — события, происходящие во время выхода из системного вызова;
-   `user` — события, использующие параметры пользовательского пространства (`uid`, `pid` и `gid`);
-   `exclude` — используется для исключения событий.

На практике в основном используются `entry` и `exit`.

**Действие** — определяет, что нужно выполнить после события: записать его в журнал (`always`) или не записывать (`never`).

**Имя системного вызова** — при обращении к какому вызову должен срабатывать триггер и перехватываться событие (например, `open`, `close`, `exit`, и т.д.)

**Фильтр** — необязательная опция, которая используется для указания дополнительных параметров. Например, если нужно отслеживать обращения к файлам из каталога `/etc`, можно указать его в данном параметре:

```shell
sudo auditctl -a exit,always -S open -F path =/etc/
```

Можно использовать более одного фильтра, например, дополнительно уточнить, что нас интересуют только события, связанные с изменением файлов: `w` (write) и `a` (attribute change):

```shell
sudo auditctl -a exit,always -S open -F path=/etc/ -F perm=wa
```

При создании правил слежения за файлами можно не указывать имя системного вызова (опцию `-S`):

```shell
sudo auditctl -a exit,always -F path=/etc/ -F perm=wa
```

Чтобы следить за конкретным файлом, можно использовать еще более сокращенный вариант (опция `-p` здесь заменяет `perm`):

```shell
sudo auditctl -w /etc/passwd -p wa
```

## Файл audit.rules

Задавать правила возможно как через консоль, так и путем сохранения их в файле  `/etc/audit/audit.rules`, в этом случае они будут действовать постоянно.

Синтаксис правил точно такой же, нужно только опустить саму команду `auditctl`, например:

```shell
-w /etc/passwd -p wa
```

В начале файла обычно задаются метаправила, определяющие базовые настройки:

```shell
# Удалить все ранее созданные правила
-D 

# Задать количество буферов, в которых будут храниться сообщения 
-b 320 

# Действие при переполнении буферов: 0 — ничего не делать; 1 — отправить сообщение в dmesg, 2 — отправить ядро в панику 
-f 1
```

Далее указываются пользовательские правила.

Ниже приведены примеры правил для отслеживания различных событий.

```shell
# Наблюдение за конфигурационными файлами системы аудита 
-w /etc/audit/auditd.conf -p wa 
-w /etc/audit/audit.rules -p wa

# Наблюдение за журнальными файлами 
-w /var/log/audit/ 
-w /var/log/audit/audit.log 

# Настройки и задания at 
-w /var/spool/at 
-w /etc/at.allow 
-w /etc/at.deny 

# Файлы паролей и групп 
-w /etc/group -p wa 
-w /etc/passwd -p wa 
-w /etc/shadow 

# Конфигурационные и журнальные файлы входа в систему 
-w /etc/login.defs -p wa 
-w /etc/securetty 
-w /var/log/faillog 
-w /var/log/lastlog 

# Список и имена хостов 
-w /etc/hosts -p wa 

# Стартовые скрипты демонов 
-w /etc/init.d/ 
-w /etc/init.d/auditd -p wa 

# Настройки сервера SSH 
-w /etc/ssh/sshd_config 

# Изменение прав доступа к файлам 
-a entry,always -S chmod -S fchmod -S chown -S chown32 -S fchown -S fchown32 -S lchown -S lchown32 

# Создание, открытие или изменение размеров файлов 
-a entry,always -S creat -S open -S truncate -S truncate64 -S ftruncate -S ftruncate64 

# Создание и удаление каталогов 
-a entry,always -S mkdir -S rmdir 

# Удаление или создание ссылок 
-a entry,always -S unlink -S rename -S link -S symlink 

# Монтирование файловых систем 
-a entry,always -S mount -S umount -S umount2
```

После внесения изменений в конфигурационный файл необходимо перезапустить `auditd`, чтобы они вступили в силу:

```shell
sudo service auditd restart
```

## Анализ журналов аудита

Журнальные файлы системы аудита хранятся по пути `/var/log/audit`. Для работы с ними используются утилиты `aureport` и `ausearch`, которые, обладая очень большим количеством опций, позволяют получать информативные отчеты из файлов журнала согласно заданным параметрам.

Полный список опций можно просмотреть с помощью `man aureport` (и `man ausearch` для второй утилиты) либо в различных источниках в сети, например, [здесь](https://www.opennet.ru/man.shtml?topic=aureport&category=8&russian=0).

Например, для получения отчета о файлах необходимо использовать `aureport` с опцией `-f`:

```shell
sudo aureport -f
```

Отчет можно ограничить только определенным промежутком времени:

```shell
sudo aureport --start месяц/день/год часы:минуты:секунды --end месяц/день/год часы:минуты:секунды

# Например:

sudo aureport -f --start 08/20/20 12:00 --end 08/20/20 13:00
```

Время можно указывать также с помощью параметров:

-   `now` (сейчас),
-   `recent` (десять минут назад),
-   `today` (сегодня, начиная с полуночи),
-   `yesterday` (вчерашний день),
-   `this-week` (неделя),
-   `this-month` (месяц),
-   `this-year` (год). 

Вывод команды содержит очень много информации, поэтому его можно сократить с помощью опции `--summary`, чтобы получить сводку обращений к каждому файлу. 

```shell
sudo aureport -f -i --start recent --summary
```

При обнаружении подозрительной попытки доступа, можно найти процесс, который ее произвел:

```shell
sudo aureport -f -i --start today | grep /etc/passwd
```

Далее с помощью `ausearch` можно проанализировать каждое событие отдельно:

```shell
sudo auserch -a номер_события
```

С помощью `ausearch` можно находить события и по другим параметрам, например:

По идентификатору пользователя (опция `-ui`):

```shell
sudo ausearch -ui 1111 --interpret
```

(Опция `--interpret` или `-i` позволяет выводить данные в удобном для чтения формате.)

По имени исполняемого файла (опция `-x`):

```shell
sudo ausearch -x /путь/к/файлу
```

По имени демона (опция `-tm`):

```shell
sudo ausearch -tm cron
```

По системному вызову (опция `-sc`):

```shell
sudo ausearch -sc ptrace
```

Для ограничения вывода определенным промежутком времени можно использовать тот же синтаксис, что для `aureport`.

Полный список опций `ausearch` можно просмотреть с помощью `man ausearch` или в различных источниках в сети, например, [здесь](https://www.opennet.ru/man.shtml?topic=ausearch&category=8&russian=0).
