Überwachen Sie Änderungen an einer Verzeichnisstruktur ohne Rootzugriff

851
artlung

Ich hatte kürzlich einen Vorfall, bei dem einige Dateien versehentlich gelöscht wurden. Dies sind Dateien auf einem freigegebenen Webhosting-Konto (FreeBSD), die Verzeichnisstruktur ist jedoch tief.

Meine Neigung ist es, selbst etwas in PHP oder Python zu schreiben, das dies tut:

  1. Durchsuchen Sie jedes Verzeichnis nach der Anzahl der darin enthaltenen Dateien
  2. Speichern Sie diese Daten, wahrscheinlich in einer MySQL-Datenbank
  3. Führen Sie täglich einen Bericht aus, der mich über die Aktivitäten informiert (ich habe also festgestellt, dass das Upload-Verzeichnis 3 neue Dateien enthält oder dass das Miniaturverzeichnis 10 Dateien weniger enthält oder sogar per Datei angegeben wird, dass es geändert wurde (Vielleicht braucht es von jeder Datei einen Hash und speichert das?).
  4. Führe einen täglichen Cron-Job mit den Änderungen vom Vortag aus (oder einen wöchentlichen Cron-Job mit Änderungen von der Woche davor oder wann immer es sinnvoll ist)

Aber ich habe das Gefühl, dass die Leute dies vor mir gemacht haben. Gibt es das und ich weiß es einfach nicht?

0

1 Antwort auf die Frage

1
Kanji

Wenn Sie nur mit dem Hinzufügen oder Entfernen von Dateien befasst sind, können Sie eine Kombination aus find und diff verwenden, um Änderungen zu überwachen: -

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) 

Wenn Sie jedoch wissen möchten (oder möchten), ob sich der Inhalt einer Datei geändert hat, enthält FreeBSD ein Dienstprogramm namens [mtree] [1], das verwendet werden kann, um Änderungen zwischen einer Verzeichnishierarchie und einer erwartete Baseline: -

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) 

Für beide Methoden ist es möglicherweise ratsam, die Baseline-Datei unveränderlich zu machen ("chflags uchg baseline.file"). Dies sollte das versehentliche Löschen Ihrer Dateien durch andere Personen als root (einschließlich sich selbst) verhindern.