Wie zerkleinere ich rekursiv einen gesamten Verzeichnisbaum?

47

Ich habe einen Verzeichnisbaum, den ich mit dem Linux-Dienstprogramm 'shred' vernichten möchte. Leider hat shred keine -RMöglichkeit zum rekursiven Shreddern.

Wie kann ich einen gesamten Verzeichnisbaum rekursiv zerreißen?

Steve V.
quelle

Antworten:

45

Verwenden Sie den findBefehl, um shredrekursiv auszuführen :

find <dir> -type f -exec shred {} \;
Jamesallman
quelle
Funktioniert es ohne die Option -depth? Funktioniert es auf modernen Journal-Dateisystemen?
Benutzer unbekannt
@userunknown Nein, shred funktioniert nicht auf modernen Journal-Dateisystemen. Genauere Informationen finden Sie unter man shred.
FanaticD
Beachten Sie auch, dass diese Methode nicht einmal versucht, Dateinamen zu löschen , so dass alle so gespeicherten Daten definitiv zurückbleiben ( srmvon @ Cookies Antwort wird zumindest versucht, dieses Problem zu lösen).
ntninja
Verwenden -exec shred {} +Sie diese Option , um den Vorgang zu beschleunigen, da shred mehrere Argumente akzeptiert.
Sumit
28

Vorsicht vor Fetzen!

Aus der Shred-Manpage:

VORSICHT: Beachten Sie, dass Shred von einer sehr wichtigen Annahme abhängt: Das Dateisystem überschreibt die vorhandenen Daten. Dies ist die traditionelle Vorgehensweise, aber viele moderne Dateisystemdesigns erfüllen diese Annahme nicht. Im Folgenden sind Beispiele für Dateisysteme aufgeführt, auf denen shred nicht oder nicht in allen Dateisystemmodi wirksam ist:

  • Dateisysteme mit Protokollstruktur oder Journaled File Systems, wie sie mit AIX und Solaris (und JFS, ReiserFS, XFS, Ext3 usw.) geliefert werden

  • Dateisysteme, die redundante Daten schreiben und auch dann weiterarbeiten, wenn einige Schreibvorgänge fehlschlagen, z. B. RAID-basierte Dateisysteme

  • Dateisysteme, die Snapshots erstellen, z. B. der NFS-Server von Network Appliance

  • Dateisysteme, die an temporären Speicherorten zwischengespeichert werden, z. B. NFS-Clients der Version 3

  • komprimierte Dateisysteme

Im Fall von ext3-Dateisystemen gilt der oben genannte Haftungsausschluss (und Shred ist daher von begrenzter Wirksamkeit) nur im data = journal-Modus, bei dem zusätzlich zu den Metadaten auch Dateidaten aufgezeichnet werden. Sowohl in den Modi data = ordered (Standard) als auch data = writeback funktioniert shred wie gewohnt. Ext3-Journal-Modi können geändert werden, indem die Option data = something zu den Mount-Optionen für ein bestimmtes Dateisystem in der Datei / etc / fstab hinzugefügt wird, wie in der Mount-Manpage (man mount) dokumentiert.

Darüber hinaus können Dateisystemsicherungen und Remotespiegel Kopien der Datei enthalten, die nicht entfernt werden können und die eine spätere Wiederherstellung einer geschredderten Datei ermöglichen.

Lösung: Verwenden Sie ein verschlüsseltes Dateisystem und löschen Sie einfach Ihre Dateien.

Benutzer unbekannt
quelle
+1 für Zeiger auf Shred, hatte ich einen ähnlichen Fall vor. Auf NetApps NFS hat es nicht funktioniert. NetApp verwendet WAFL und verwendet Copy-on-Write einschließlich Metajournalling. Auch mit dem neuesten ZFS von Solaris gibt es einen weiteren Fall, in dem Shred-Sheds zum Einsatz kommen.
Nikhil Mulley
6
Das ist eine schlechte Lösung. Ein verschlüsseltes Dateisystem ist nur sicher, solange es gesperrt (und nicht gemountet) ist. Sobald Ihr Betriebssystem läuft, sind die Daten verfügbar.
oleks
3
@Moleks: Sowohl die Verwendung shredals auch die Datenverschlüsselung verhindern das Lesen der Daten von einem Offline-Speichergerät (z. B. Diebstahl oder Polizei). Die Datenverschlüsselung bietet den zusätzlichen Vorteil, dass alle Dateien geschützt werden, nicht nur die (ordnungsgemäß) gelöschten. Sobald das Dateisystem gemountet ist, haben wir in beiden Fällen wieder die alten Unix-Berechtigungen, und der Datenschutz wird wieder zu einer Aufgabe der Betriebssystemsicherheit und der ordnungsgemäßen Systemadministration. Upfront-Dateisystemverschlüsselung ist beim Schutz von Daten in Ruhe definitiv nicht schlechter als die strategische Nutzung von shred!
ntninja
12

Verwenden Sie stattdessen sicheres Löschen.

sudo apt-get install secure-delete
srm -r pathname

Getan. Sicheres Löschen ist viel paranoider als Shred. Verwenden Sie statt 3 38 Durchgänge. Verwenden Sie für einen schnellen Durchgang

srm -rfll pathname

Mit fll erhalten Sie einen weniger zufälligen Datengenerator und nur einen einzigen Durchgang.

Plätzchen
quelle
Behebt es das in unix.stackexchange.com/a/27075/18886 erwähnte Problem ?
Ian Dunn
Wie könnte es Nein
Cookie
Beachten Sie, dass diese Methode den zusätzlichen Vorteil gegenüber den vorgeschlagenen findMethoden hat, die versuchen, gespeicherte Dateinamen zu löschen, indem sie Dateien umbenennen, bevor sie abgeschnitten und die Verknüpfung aufgehoben werden.
ntninja
Auf @ntninja find basierende Methoden verwenden shred und shred benennt Dateien um, bevor das Löschen abgeschlossen ist. Also die gleichen Vorteile, oder?
Tuxayo
11

Kombinieren Sie diese Antwort mit den bekanntesten Shred-Optionen, indem Sie diesen Stapelüberlauflink " Dateien dauerhaft und sicher unter CentOS löschen " verwenden:

find <directory> -depth -type f -exec shred -v -n 1 -z -u {} \;

Bearbeiten: Beachten Sie, dass die beste Antwort für das Shreddern einer einzelnen Datei eine Synchronisierung erzwingt, bei der Änderungen auf das Medium geschrieben werden, bevor die Datei gelöscht wird, da einige oder alle aufgezeichneten Dateisysteme über einen Puffer verfügen.

Wenn möglich, sollte der Befehl find ein Shell-Skript für die folgende Datei aufrufen:

shred -v -n 1 /path/to/your/file #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u /path/to/your/file #overwriting with zeroes and remove the file

auf jeder Datei.

im3r3k
quelle
Nachdem ich viele Antworten gelesen und recherchiert hatte, fand ich (imho) diese Antwort am gründlichsten. Ich möchte nur hinzufügen, dass da shred keine Verzeichnisse entfernt, ich an rm -rvf $1das Shell-Skript angehängt habe (wobei $ 1 der / path / to / your / file ist, der von der {}Erweiterung in der übergeben wurde find... -exec)
JoelAZ
4
shred führt bereits nach jedem Durchgang einen fsync (2) durch. Gerade weil Sie die Dateiänderungen erzwingen müssen, um die Festplatte vor dem nächsten Durchgang zu erreichen.
Angel
Was macht depthman hier? Unsicher ist auch der nachgestellte Backslash
geneorama 12.12.18 um 17.04
5
find /your/directory -exec shred {} \;

quelle
Upvoted, aber James hat dich um eine Minute geschlagen, um zu akzeptieren.
Steve V.
Funktioniert es ohne die Option -depth? Funktioniert es auf modernen Journal-Dateisystemen?
Benutzer unbekannt
3
find [dirname] -depth -type f -exec shred -n1 {} \;

Dies führt eine Tiefensuche nach Dateien im Verzeichnis [dirname] durch und führt dann den shred -n1Befehl für jede Datei aus. Wenn Sie Dateien und / oder Verzeichnisse entfernen, ist das Hinzufügen -depthals Standard eine gute Angewohnheit, auch wenn dies in diesem Fall nicht unbedingt erforderlich ist. Wenn Sie mit dieser Art von Befehl ausführen rm -rfstatt shred, -depthbenötigt wird , um sicherzustellen , dass Verzeichnisse nicht gelöscht , bevor der Inhalt der Verzeichnisse versucht wird gelöscht werden (also Fehler verursacht).

Alexander
quelle
3
Sie sollten es verwenden shred -N 1, da es standardmäßig 3-mal zerkleinert wird und Schlangenöl ist. Entweder ist ein Mal ausreichend oder 30 Mal funktionieren nicht.
Benutzer unbekannt
Das Bereitstellen eines einfachen Befehls als Antwort ist nicht die beste Möglichkeit, eine Frage zu beantworten. Ich würde empfehlen, eine kleine Erklärung über die Funktionsweise der Leitung und die möglichen Einschränkungen bei der Verwendung hinzuzufügen.
Nr.
0

Die gründlichste shredMethode, die ich gefunden habe, einschließlich des Entfernens von Verzeichnissen, besteht darin find, ein Skript aufzurufen, um Folgendes zu erhalten shred:

  • überschreibe die Datei
  • synchronisieren
  • dann löschen
  • und rufen Sie schließlich rm auf, um die Verzeichnisnamen zu entfernen.

Diese Methode behandelt auch Dateinamen mit Leerzeichen.

Zuerst das shredSkript (ich habe meins benannt dirShredder.shund im /rootVerzeichnis gespeichert :

shred -v -n 1 "$1" #overwriting with random data
sync #forcing a sync of the buffers to the disk
shred -v -n 0 -z -u "$1" #overwriting with zeroes and remove the file
rm -rvf "$1" # call rm to remove the directories

Rufen Sie das Skript dann folgendermaßen auf:

find /volume1/pathToShred/ -mindepth 1 -depth -exec /root/dirShredder.sh "{}" \;

Stellen Sie sicher, dass Sie die killit.shausführbare Datei ( chmod +x) markieren und den Pfad für das Verzeichnis, in das Sie den Shred-Vorgang ausführen möchten, und für das Verzeichnis, in dem Sie die Datei dirShredder.shspeichern möchten, aktualisieren .

NOTA BENE - shredProbleme mit Copy-on-Write-Dateisystemen (ZFS, BTRFS usw.) und sogar mit Journaling-Dateisystemen. Es gibt keinen wirklich akzeptierten "besten" Weg, um damit umzugehen, den ich anders als "verschlüsselte Dateisysteme" gefunden habe, aber ich bin mir nicht sicher, wie effektiv dies nachträglich ist.
Am ehesten können Sie nach dem Shreddern den gesamten freien Speicherplatz auf dem Laufwerk mit zufälligen Daten überschreiben (keine Nullen, dies scheint nicht immer zuverlässig zu sein). SSDs können auch andere Aspekte berücksichtigen (z. B. TRIM).

Ich gehe hier nicht auf diese ein, es gibt andere Stack-Antworten (die Antwort von @user unknown in dieser Frage zum Beispiel) und zahlreiche Diskussionen im gesamten Netz, die diese Themen behandeln. Suchen Sie sie daher heraus, wenn Sie diese Sicherheitsstufe benötigen.

JoelAZ
quelle