Файловый аудит в Linux: как посмотреть дерево каталогов для удалений?

У меня на сервере запущен скрипт форума и как-то небольшое количество вложений начинает теряться. Я хочу узнать, что их удаляет и в какое время. Как я могу настроить Linux audd (auditctl) для просмотра дерева каталогов (вложения хранятся в многоуровневом дереве каталогов), чтобы отслеживать там удаление файлов?

Может быть, я должен использовать какой-то другой инструмент для этого?

4 ответа

Это ответ, который я написал на предыдущий вопрос:

Обычно, если вы хотите знать, что делает процесс / пользователь / файл без необходимости запускать lsof против него 24/7, вы используете Auditctl.

Предполагая, что у вас есть контроль аудита ядра недавних выпусков, это простая операция. (Это в Debian-fu, если вы работаете с Red Hat при необходимости)

# apt-get install auditd

Убедитесь, что он работает (/etc/init.d/auditd status).

auditctl -a entry,always -F arch=b64 -S open -F pid=<process id>

Замените b64 на b32, если вы используете 32-битную арку, open можно заменить любым системным вызовом или словом "all".

Для получения дополнительной информации прочитайте man-страницу auditl.

Вы можете использовать этот метод и попросить его отслеживать системный вызов "unlink".

Параметр -w полезен для просмотра файлов / каталогов, но, как объясняет man-страница, есть предостережения.

-w путь Вставить наблюдение за объектом файловой системы в пути. Вы не можете вставить часы в каталог верхнего уровня. Это запрещено ядром. Подстановочные знаки также не поддерживаются и генерируют предупреждение. Наблюдение за работой осуществляется путем внутреннего отслеживания inode. Это означает, что если вы поместите часы в каталог, вы увидите то, что кажется файловыми событиями, но на самом деле это просто обновление метаданных. Делая это, вы можете пропустить несколько событий. Если вам необходимо просмотреть все файлы в каталоге, рекомендуется размещать отдельные часы для каждого файла. В отличие от правил аудита syscall, часы не влияют на производительность в зависимости от количества правил, отправленных ядру.

Может быть, можно использовать incron?

Хотя рекомендация fenix audd кажется идеальной, вам может пригодиться IDS файловой системы, такой как AIDE. К сожалению, он вряд ли будет достаточно мелкозернистым для того, что вы пытаетесь изолировать.

Я часто пишу сценарии для решения проблем, подобных тем, что вы описываете. Если вы не можете достичь желаемого с помощью рекомендуемых решений, напишите что-нибудь самостоятельно. Это часто не очень сложно.

Пара идей. Ты можешь использовать strace чтобы увидеть, что делает ваше приложение, но оно может генерировать журнал журналов и замедлять работу системы.

Другая идея заключается в использовании inotifywait, затем lsof/fuser в файле, чтобы увидеть, что его использует. Вы можете попробовать запустить этот скрипт с высоким приоритетом (если можете), чтобы информация была максимально точной. Это, вероятно, не поймать unlink вызов, так как файл будет удален до доставки события.

Другие вопросы по тегам