Monitorar alterações em uma árvore de diretórios sem acesso root

0

Recentemente tive um incidente em que alguns arquivos foram excluídos acidentalmente. Estes são arquivos em uma conta de hospedagem compartilhada (FreeBSD), mas a árvore de diretórios é profunda.

Minha inclinação é escrever algo em PHP ou Python que faça isso:

  1. Analise cada diretório para o número de arquivos contidos em cada
  2. Armazene esses dados, provavelmente em um banco de dados MySQL
  3. Gere um relatório diariamente que me diz onde há atividade (então, eu veria que o diretório de uploads tem 3 novos arquivos, ou que o diretório thumbnails tem 10 arquivos a menos nele, ou mesmo em uma base por arquivo, diga-me que ele foi alterado (talvez seja necessário um hash de cada arquivo e armazene isso?).
  4. Executar uma tarefa cron diária com as alterações do dia anterior (ou tarefa cron semanal com alterações da semana anterior ou qualquer intervalo que faça sentido)

Mas eu sinto que isso é algo que as pessoas fizeram antes de mim. Isso existe e eu simplesmente não sei?

    
por artlung 01.07.2010 / 03:45

1 resposta

1

Se você está preocupado apenas com arquivos sendo adicionados ou removidos, você pode usar uma combinação de encontrar e diferenciar para monitorar as alterações: -

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)

No entanto, se você precisa (ou quer) saber se o conteúdo de um arquivo também foi modificado, o FreeBSD vem com um utilitário chamado [mtree] [1] que pode ser usado para relatar quaisquer mudanças encontradas entre um diretório hierarquia e uma linha de base esperada: -

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)

Para qualquer método, pode ser prudente tornar seu arquivo de linha de base imutável ("chflags uchg baseline.file"), o que deve ajudar a impedir a exclusão acidental de seus arquivos por qualquer pessoa que não seja root (incluindo você).

    
por 01.07.2010 / 05:54