Мониторинг изменений в дереве каталогов без корневого доступа

746
artlung

Недавно у меня произошел инцидент, когда некоторые файлы были случайно удалены. Это файлы в общей учетной записи веб-хостинга (FreeBSD), но дерево каталогов глубоко.

Я склонен написать что-то сам на PHP или Python, что делает это:

  1. Сканирование каждого каталога на количество файлов, содержащихся в каждом
  2. Храните эти данные, вероятно, в базе данных MySQL
  3. Ежедневно запускайте отчет, в котором сообщается, где находится активность (поэтому я вижу, что в каталоге выгрузки есть 3 новых файла, или в каталоге миниатюр содержится на 10 файлов меньше, или даже для каждого файла сообщается, что он изменился (может быть, он берет хэш каждого файла и сохраняет его?).
  4. Запускайте ежедневное задание cron с изменениями предыдущего дня (или еженедельное задание cron с изменениями предыдущей недели или любого другого интервала, который имеет смысл)

Но я чувствую, что это то, что люди сделали до меня. Это существует, а я просто не знаю?

0

1 ответ на вопрос

1
Kanji

Если вас интересуют только файлы, добавляемые или удаляемые, вы можете использовать комбинацию find и diff для отслеживания изменений: -

find /some/dir -print > file-list.expected # baseline  # Add/remove files  find /some/dir -print > file-list.current diff file-list.expected file-list.current # look for changes  mv file-list.old file-list.new # update baseline (optional) 

Однако, если вам нужно (или вы хотите) узнать, изменилось ли содержимое файла, FreeBSD поставляется с утилитой [mtree] [1], с помощью которой можно сообщать о любых найденных изменениях между иерархией каталогов и ожидаемый базовый уровень: -

mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # baseline  # Add/remove/change files  mtree -f baseline.mtree -p /some/dir # look for changes mtree -c -i -n -K cksum -p /some/dir > baseline.mtree # update baseline (optional) 

Для любого из этих методов целесообразно сделать базовый файл неизменным («chflags uchg baseline.file»), что должно помочь предотвратить случайное удаление ваших файлов кем-либо, кроме root (включая вас).

Похожие вопросы