Простой файловый аудит в Linux на основе inotify-tools

17.03.2012

Иногда возникает задача быстро организовать простой файловый аудит на сервере для отслеживания изменения или удаления файлов на каком-нибудь из сайтов. Для решения подобной задачи хорошо подходит использование демона auditd. Тем не менее, иногда встречается ситуация, в которой использование auditd невозможно, т.к. поддержка системы аудита отключена в ядре, например при использовании OpenVZ ядер в Debian (2.6.32-5-openvz-amd64).

При попытке использовать auditd на такой системе, запуск или добавление правила ни к чему не приводят, например попытка включить auditd

root@somewhere:~# auditctl -e 2
возвращает сообщение The audit system is disabled, а в логах появляется следующая запись:

/var/log/audit/audit.log:
type=DAEMON_START msg=audit(1332003085.918:8717): auditd start, ver=1.7.13 format=raw kernel=2.6.32-5-openvz-amd64 auid=4294967295 pid=1788 res=success
type=DAEMON_ABORT msg=audit(1332003085.921:8718): auditd error halt, auid=4294967295 pid=1788 res=failed

В этом случае на помощь приходит пакет inotify-tools (Википедия)

Установка в Debian:

apt-get install inotify-tools

Пакет включает в себя две утилиты — inotifywait и inotifywatch. Утилиты отслеживают изменения в файловой системе, inotifywait используется для ожидания события в файловой системе и последующей его обработки, а inotifywatch собирает общую статистику изменений. Очень важно, что обе утилиты умеют отслеживать изменения рекурсивно, при использовании ключа -r. Таким образом

inotifywait -r /var/www

отследит любые файловые изменения в директории /var/www. Кроме того, использование ключа -e позволяет указать, какие именно событие нам интересно, например,

inotifywait -e delete -r /var/www

будет ждать удаления какого либо файла или директории внутри /var/www.

Список событий доступен в «man inotifywait»

Для организации аудита удаления и изменения файлов и директорий, используем следующий bash-script watch.sh 1:

#!/bin/sh
inotifywait -e delete -e modify -r -m $1 | while read dir events file; do
  echo "$(date) : $events : $dir$file"
done

Запустим скрипт командой:

./watch.sh /var/www/yoursite.ru/www

где /var/www/yoursite.ru/www — директория вашего сайта. Параметры -e delete -e modify указывают inotifywait ждать события изменения и удаления файлов.

Работа с удаленным сервером подразумевает использование ssh, поэтому для постоянного аудита воспользуемся командой screen (Википедия). Screen позволяет использовать множетсво терминальных сессий, в том числе — в фоновом режиме.

Установка:

apt-get install screen

Теперь запустим команду аудита ваших файлов:

screen /bin/bash -c "./watch.sh /var/www/yoursite.ru/www > yoursite.files.log"

Для перевода мониторинга в фоновый режим и возврата в консоль ssh нажмите Ctrl+A, затем d. Для просмотра работающего screen воспользуйтесь командами screen -ls.  Для возврата в screen — команду screen -r.

Теперь, когда вы вернулись в консоль ssh, вы можете просмотреть лог действий с вашими файлами, например, с помощью

tail yoursite.files.log

или

tail -f yoursite.files.log

для наблюдения изменений в режиме реального времени.

Формат лога будет выглядеть следующим образом:

Птн Мар 16 15:16:35 MSK 2012 : DELETE : /var/www/yoursite.ru/www/новый файл
Птн Мар 16 15:16:46 MSK 2012 : DELETE : /var/www/yoursite.ru/www/test.html
Птн Мар 16 15:16:55 MSK 2012 : DELETE : /var/www/yoursite.ru/www/without-test.html
Птн Мар 16 15:22:41 MSK 2012 : DELETE : /var/www/yoursite.ru/www/новый файл
Птн Мар 16 15:22:48 MSK 2012 : DELETE : /var/www/yoursite.ru/www/wwewew

1 Оригинальный скрипт — http://www.opennet.ru/tips/info/1774.shtml , слегка адаптирован.

Метки: , , , ,

Оставить комментарий

CAPTCHA изображение