У меня на сервере запущен скрипт форума, и как-то начинает теряться небольшое количество вложений. Я хочу узнать, что их удаляет и в какое время. Как я могу настроить Linux auditd (auditctl) для просмотра дерева каталогов (вложения хранятся внутри многоуровневого дерева каталогов), чтобы отслеживать удаление файлов в нем?
Может мне для этого нужен какой-нибудь другой инструмент?
Это ответ, который я написал на предыдущий вопрос:
Обычно, если вы хотите знать, что делает процесс / пользователь / файл, без необходимости запускать lsof против него 24/7, вы используете auditctl.
Предполагая, что у вас есть недавний контроль аудита ядра, это простая операция. (Это в Debian-fu, если вы используете Red Hat translate, как это необходимо)
# 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'
Подробнее читайте на странице руководства auditctl.
Вы можете использовать этот метод и попросить его следить за системным вызовом unlink.
Параметр -w полезен для просмотра файлов / каталогов, но, как объясняется на странице руководства, есть предостережения.
-w путь Вставить наблюдение за объектом файловой системы в путь. Вы не можете вставить часы в каталог верхнего уровня. Это запрещено ядром. Подстановочные знаки также не поддерживаются и будут генерировать предупреждение. Часы работают путем внутреннего отслеживания inode. Это означает, что если вы поместите часы в каталог, вы увидите то, что выглядит как файловые события, но на самом деле это просто обновление метаданных. Поступая так, вы можете пропустить несколько мероприятий. Если вам нужно просмотреть все файлы в каталоге, рекомендуется установить отдельное наблюдение для каждого файла. В отличие от правил аудита системных вызовов, часы не влияют на производительность в зависимости от количества правил, отправленных ядру.
Может быть Incron может быть использован?
Хотя рекомендация fenix auditd кажется идеальной, вы можете найти IDS файловой системы, например Помощник полезно. К сожалению, он вряд ли будет достаточно детальным для того, что вы пытаетесь выделить.
Я часто пишу сценарии для решения проблем, подобных тем, которые вы описываете. Если вы не можете добиться желаемого с помощью рекомендованных решений, напишите что-нибудь самостоятельно. Часто это не очень сложно.
Пара идей. Ты можешь использовать strace
чтобы увидеть, что делает ваше приложение, но оно может создавать журнал журналов и замедлять работу системы.
Другая идея - использовать inotifywait
, затем lsof/fuser
в файле, чтобы узнать, что его использует. Вы можете попробовать запустить этот сценарий с высоким приоритетом (если сможете), чтобы информация была как можно более точной. Вероятно, он не поймает unlink
вызовите, так как файл исчезнет до доставки события.