В Linux имеется платформа аудита, которая позволяет узнать обо всех случаях доступа к файлу, его изменениях или запуске. Также можно вести наблюдение за изменением целых директорий.
Как установить auditd (auditctl)
В Debian, Linux Mint, Kali Linux, Ubuntu и их производных для установки выполните команду:
sudo apt install auditd
В Arch Linux, Manjaro, BlackArch и их производных данный пакет называется audit и входит в core репозиторий, следовательно, он предустановлен по умолчанию.
В CentOS для установки выполните команду:
yum install audit
Как запустить монитор доступа и изменений файла
Необходимо начать с добавления правил. Следующая команда добавляет монитор доступа и изменения файла /etc/resolv.conf:
sudo auditctl -w /etc/resolv.conf -p wa
Это пример команды с другой нотацией, но выполняет она идентичное действие — мониторит все изменения и доступ к файлу /etc/resolv.conf:
sudo auditctl -a always,exit -F path=/etc/resolv.conf -F perm=wa
Проверить, какие правила добавлены, можно следующей командой:
sudo auditctl -l
Хотя правило добавлено, служба аудита ещё не запущена. Для её запуска выполните команду:
sudo systemctl start auditd.service
Если вы хотите добавить данную службу в автозагрузку, то выполните:
sudo systemctl enable auditd.service
Запуск auditd без перевода в фон
Предыдущая команда запустит auditd как демон, то есть служба в фоне. Если вам это не нужно и вы хотите запустить auditd на переднем плане, то вместо использования systemctl выполните следующую команду:
sudo auditd -f
В этом случае все события с отслеживаемыми файлами или папками будут отображаться в стандартном выводе. При этом файл журнала не будет вестись.
Это полезно при отладке правил, либо если вам нужно проследить за событиями в короткий промежуток времени.
Как просмотреть журнал auditd
Журнал auditd хранится в файле /var/log/audit/audit.log. Но вместо того, что просматривать его напрямую, можно воспользоваться утилитой ausearch, например:
sudo ausearch -f /etc/resolv.conf
Если будет выведено
<no matches>
значит данный файл ещё не трогала ни одна программа.
Если события произошли, там будут примерно следующие записи:
---- time->Sun May 16 07:02:16 2021 type=PROCTITLE msg=audit(1621137736.023:543): proctitle=6765646974002F6574632F7265736F6C762E636F6E66 type=PATH msg=audit(1621137736.023:543): item=1 name="/etc/resolv.conf" inode=160660 dev=103:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.023:543): item=0 name="/etc/" inode=131073 dev=103:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1621137736.023:543): cwd="/home/mial" type=SYSCALL msg=audit(1621137736.023:543): arch=c000003e syscall=257 success=no exit=-17 a0=ffffff9c a1=55da2dd00770 a2=800c1 a3=1b6 items=2 ppid=78750 pid=78751 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2 comm="pool-gedit" exe="/usr/bin/gedit" key=(null) ---- time->Sun May 16 07:02:16 2021 type=PROCTITLE msg=audit(1621137736.023:544): proctitle=6765646974002F6574632F7265736F6C762E636F6E66 type=PATH msg=audit(1621137736.023:544): item=1 name="/etc/resolv.conf" inode=160660 dev=103:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.023:544): item=0 name="/etc/" inode=131073 dev=103:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1621137736.023:544): cwd="/home/mial" type=SYSCALL msg=audit(1621137736.023:544): arch=c000003e syscall=257 success=yes exit=11 a0=ffffff9c a1=55da2dd00770 a2=20041 a3=1b6 items=2 ppid=78750 pid=78751 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2 comm="pool-gedit" exe="/usr/bin/gedit" key=(null) ---- time->Sun May 16 07:02:16 2021 type=PROCTITLE msg=audit(1621137736.029:545): proctitle=6765646974002F6574632F7265736F6C762E636F6E66 type=PATH msg=audit(1621137736.029:545): item=4 name="/etc/resolv.conf" inode=163335 dev=103:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=CREATE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.029:545): item=3 name="/etc/resolv.conf" inode=160660 dev=103:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=DELETE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.029:545): item=2 name="/etc/.goutputstream-VQ4G30" inode=163335 dev=103:02 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=DELETE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.029:545): item=1 name="/etc/" inode=131073 dev=103:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=PATH msg=audit(1621137736.029:545): item=0 name="/etc/" inode=131073 dev=103:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0 type=CWD msg=audit(1621137736.029:545): cwd="/home/mial" type=SYSCALL msg=audit(1621137736.029:545): arch=c000003e syscall=82 success=yes exit=0 a0=7ff2a409a5a0 a1=7ff2a40a2da0 a2=0 a3=11 items=5 ppid=78750 pid=78751 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=2 comm="pool-gedit" exe="/usr/bin/gedit" key=(null)
Чтобы узнать, какая программа выполнила действие, смотрите строку «exe=».
Как остановить службу auditd
Чтобы удалить службу из автозагрузки, выполните команду:
sudo systemctl disable auditd.service
Если вы попытаетесь остановить службу следующей командой:
sudo systemctl stop auditd.service
То вы получите сообщение, что это не удалось, так как операция отклонена:
Failed to stop auditd.service: Operation refused, unit auditd.service may be requested by dependency only (it is configured to refuse manual start/stop). See system logs and 'systemctl status auditd.service' for details.
Для остановки службы выполните команду:
sudo auditctl --signal TERM
Как удалить все правила отслеживания изменений папок и файлов
Чтобы удалить сразу все правила, выполните команду:
sudo auditctl -D
Возможно удаление отдельных правил (как по отслеживаемому событию, так и по привязанному идентификатору).
Ошибка «Error opening /var/log/audit/audit.log (Нет такого файла или каталога)»
Если вы получили ошибку
Error opening /var/log/audit/audit.log (Нет такого файла или каталога)
То она означает, что служба audit не была запущена (вы забыли её запустить, она не запустилась из-за ошибки, либо вы запустили её на переднем плане).
Примеры настройки auditd
Чтобы посмотреть все системные вызовы, сделанные определённой программой:
sudo auditctl -a always,exit -S all -F pid=1005
Чтобы увидеть файлы, открываемые определённым пользователем:
sudo auditctl -a always,exit -S openat -F auid=510
Чтобы увидеть неудачные вызовы openat:
sudo auditctl -a always,exit -S openat -F success=0
Для слежения за изменениями файла (два способа выражения):
sudo auditctl -w /etc/shadow -p wa sudo auditctl -a always,exit -F path=/etc/shadow -F perm=wa
Для рекурсивного слежения за директорией на предмет изменений (два способа выражения):
sudo auditctl -w /etc/ -p wa sudo auditctl -a always,exit -F dir=/etc/ -F perm=wa
Чтобы посмотреть, получал ли администратор доступ к файлам пользователя:
sudo auditctl -a always,exit -F dir=/home/ -F uid=0 -C auid!=obj_uid
Файлы auditd
- /etc/audit/auditd.conf — конфигурационный файл для демона audit
- /etc/audit/audit.rules — правила audit для загрузки во время запуска
- /etc/audit/rules.d/ — директория, содержащая индивидуальные наборы правил для компиляции в один файл с помощью augenrules
- /etc/audit/plugins.d/ — директория, содержащая индивидуальные файлы конфигураций плагинов
- /var/run/auditd.state — сообщение о внутреннем состоянии
Документация по auditd
В данной статье показано, как начать использовать auditd для отслеживания изменений в файле и отслеживанию доступа к файлу.
Возможности auditd не исчерпываются показанными примерами и имеется несколько утилит, с множеством настроек и опций, которые позволяют очень гибко настраивать правила мониторинга происходящего в файловой системе, а также выполнять другие сопутствующие действий.
С помощью man вы можете ознакомиться со следующей документацией:
- auditd.conf
- auditd-plugins
- ausearch
- aureport
- auditctl
- augenrules
- audit.rules
Связанные статьи:
- Как удалить метаданные файла на Linux (50%)
- Как найти дубликаты файлов на Linux с помощью dupeGuru (50%)
- Как проверить дисковое пространство на Linux с командой df (50%)
- Какие есть полезные инструменты с интерфейсом командной строки для системных администраторов Linux (50%)
- PhotoRec: восстановление удалённых и потерянных фотографий и файлов на картах памяти и жёстких дисках (50%)
- Что такое монтирование и как пользоваться командой mount (РЕШЕНО) (RANDOM - 50%)