Comment déchiqueter récursivement une arborescence de répertoires?

48

J'ai une arborescence de répertoires que je voudrais déchiqueter avec l'utilitaire 'shred' de Linux. Malheureusement, shred n'a pas d' -Roption pour le déchiquetage récursif.

Comment déchiqueter une arborescence de répertoires entière de manière récursive?

Steve V.
la source

Réponses:

46

Utilisez la findcommande pour exécuter shredrécursivement:

find <dir> -type f -exec shred {} \;
Jamesallman
la source
Cela fonctionne-t-il sans l'option -depth? Est-ce que cela fonctionne sur les systèmes de fichiers journalisés modernes?
utilisateur inconnu
@userunknown Non, shred ne fonctionne pas sur les systèmes de fichiers de journalisation modernes. Pour plus d’informations, veuillez consulter man shred.
FanaticD
Notez également que cette méthode ne tentera même pas d'effacer les noms de fichiers , donc toutes les données stockées de cette manière seront définitivement laissées derrière ( srmla réponse de @ Cookie tentera au moins de résoudre ce problème).
ntninja
Utilisez-le -exec shred {} +pour le rendre plus rapide car shred accepte plusieurs arguments.
Sumit le
28

Attention aux lambeaux!

De la page de manuel shred:

ATTENTION: notez que shred repose sur une hypothèse très importante: le système de fichiers écrase les données en place. C'est la manière traditionnelle de faire les choses, mais de nombreux systèmes de fichiers modernes ne répondent pas à cette hypothèse. Voici des exemples de systèmes de fichiers sur lesquels shred n’est pas efficace ou n’est pas toujours efficace dans tous les modes de système de fichiers:

  • Systèmes de fichiers journalisés, tels que ceux fournis avec AIX et Solaris (et JFS, ReiserFS, XFS, Ext3, etc.)

  • Systèmes de fichiers qui écrivent des données redondantes et continuent même si certaines écritures échouent, tels que les systèmes de fichiers basés sur RAID

  • systèmes de fichiers qui créent des instantanés, tels que le serveur NFS de Network Appliance

  • systèmes de fichiers en cache dans des emplacements temporaires, tels que les clients NFS version 3

  • systèmes de fichiers compressés

Dans le cas des systèmes de fichiers ext3, la clause de non-responsabilité ci-dessus s'applique (et l'efficacité de shred est donc limitée) uniquement en mode data = journal, journal qui enregistre des données en plus des métadonnées. Dans les modes données = ordonné (par défaut) et données = écriture, shred fonctionne normalement. Les modes de journalisation Ext3 peuvent être modifiés en ajoutant l'option data = quelque chose aux options de montage d'un système de fichiers particulier dans le fichier / etc / fstab, comme indiqué dans la page de manuel de mount (man mount).

De plus, les sauvegardes du système de fichiers et les miroirs distants peuvent contenir des copies du fichier qui ne peuvent pas être supprimées et qui permettront de récupérer ultérieurement un fichier déchiqueté.

Solution: Utilisez un système de fichiers chiffré et supprimez simplement vos fichiers.

Utilisateur inconnu
la source
+1 pour le pointeur sur le lambeau, j'avais un cas similaire avant. Cela ne fonctionnait pas sur NFS de NetApp. NetApp utilise WAFL et qui utilise la copie sur écriture, y compris le méta-enregistrement, donc son droit. Le dernier système ZFS de Solaris est un autre cas où Shred Sheds.
Nikhil Mulley
6
C'est une mauvaise solution. Un système de fichiers crypté n'est sécurisé que s'il est verrouillé (et donc non monté). Dès que votre système d'exploitation est opérationnel, les données sont à prendre en charge.
oleks
3
@oleks: L'utilisation shredet le cryptage des données empêchent la lecture des données sur un périphérique de stockage hors connexion (pensez vol ou police), le cryptage des données offrant l'avantage supplémentaire de protéger tous les fichiers, pas seulement ceux qui ont été supprimés (correctement). Une fois le système de fichiers monté, nous retrouvons de bonnes anciennes autorisations Unix dans les deux cas, et la protection des données redevient une tâche de la sécurité du système d'exploitation et de la bonne administration du système. Le chiffrement de système de fichiers d'Upfront n'est certainement pas pire en termes de protection des données au repos que d'utilisation stratégique shred!
ntninja
12

Utilisez plutôt la suppression sécurisée.

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

Terminé. La suppression sécurisée est beaucoup plus paranoïaque que shred, avec 38 passages au lieu de 3. Pour effectuer un passage rapide, utilisez

srm -rfll pathname

fll vous fournit un générateur de données moins aléatoire, et un seul passage.

Biscuit
la source
Cela résout-il le problème mentionné dans unix.stackexchange.com/a/27075/18886 ?
Ian Dunn
Comment pourrait-il? Non
Cookie
Notez que cette méthode présente un avantage supplémentaire par rapport aux findméthodes proposées qui essaieront également d’effacer les noms de fichiers stockés en renommant les fichiers avant de les tronquer et de les dissocier.
ntninja
Les méthodes @ntninja basées sur la recherche utilisent shred et shred renomme les fichiers avant de les supprimer. Alors même avantages non?
tuxayo le
11

En combinant cette réponse avec les options les plus connues pour le déchiquetage, utilisez ce lien de débordement de pile " Suppression de fichiers de manière permanente et sécurisée sur CentOS ":

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

Éditer: Sachez que la meilleure solution pour détruire un fichier unique impose une synchronisation qui enregistre les modifications sur le support avant de supprimer le fichier car certains systèmes de fichiers journalisés, voire tous, disposent d’un tampon.

Si possible, la commande find devrait appeler un script shell sur le fichier qui s'exécute:

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

sur chaque fichier.

im3r3k
la source
Après avoir lu et recherché de nombreuses réponses, j’ai trouvé (à mon humble avis) que cette réponse était la plus complète. J'ajouterais seulement que puisque shred ne supprime pas les répertoires que j'ai ajoutés rm -rvf $1au script shell (où $ 1 est le fichier / path / to / votre / fichier transmis à partir de l' {}extension find... -exec)
JoelAZ
4
shred effectue déjà une opération fsync (2) après chaque passe. C'est précisément parce que vous devez forcer les modifications de fichier à atteindre le disque avant le prochain passage.
Angel
Que fait depthici? Aussi incertain à propos de la barre oblique inverse de fin
geneorama 12/12
5
find /your/directory -exec shred {} \;

la source
Upvote, mais James vous a battu par une minute pour l'accepter.
Steve V.
Cela fonctionne-t-il sans l'option -depth? Est-ce que cela fonctionne sur les systèmes de fichiers journalisés modernes?
utilisateur inconnu
3
find [dirname] -depth -type f -exec shred -n1 {} \;

Ceci effectue une recherche en profondeur des fichiers dans le répertoire [nom du répertoire], puis exécute la shred -n1commande sur chaque fichier. Lors de la suppression de fichiers et / ou de répertoires, l'ajout -depthpar défaut est une bonne habitude, même si cela n'est pas strictement nécessaire dans ce cas. Lors de l'exécution de ce type de commande avec, rm -rfau lieu de shred, il -depthest nécessaire de s'assurer que les répertoires ne sont pas supprimés avant que le contenu des répertoires ne soit supprimé (ce qui provoque des erreurs).

Alexandre
la source
3
Vous devriez utiliser shred -N 1, car la valeur par défaut, le déchiquetage 3 fois, est l'huile de serpent. Soit une fois suffit, soit 30 fois ne fonctionnent pas.
utilisateur inconnu
Fournir une commande simple comme réponse n'est pas la meilleure façon de répondre à une question. Je recommanderais d'ajouter une petite explication sur le fonctionnement de la ligne et les limitations possibles liées à son utilisation.
n0pe
0

La shredméthode la plus complète que j'ai trouvée, qui inclut également la suppression de répertoire, consiste à findappeler un script pour avoir shred:

  • écraser le fichier
  • synchroniser
  • puis supprimez
  • et finalement appelez rm pour supprimer les noms de répertoire.

Cette méthode gère également correctement les noms de fichiers contenant des espaces.

Tout d'abord - le shredscript (j'ai nommé le mien dirShredder.shet je l'ai stocké dans le /rootrépertoire:

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

Ensuite, appelez le script comme suit:

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

Assurez-vous de marquer le killit.shfichier executable ( chmod +x) et bien sûr de mettre à jour le chemin du répertoire que vous voulez déchiqueter et dirShredder.shsi vous le stockez ailleurs.

NOTA BENE - shredprésente des problèmes liés aux systèmes de fichiers de copie sur écriture (ZFS, BTRFS, etc.) et même aux systèmes de fichiers journalisés. Il n’existe pas de véritable "meilleur" moyen de traiter ce problème que j’ai trouvé, à part les "systèmes de fichiers cryptés", mais je ne suis pas sûr de l’efficacité de ce système après coup.
Le plus proche possible semble être d’écraser tous les espaces vides du disque avec des données aléatoires après vos opérations de destruction (pas de zéros, cela ne semble pas toujours fiable). De plus, les disques SSD peuvent également prendre en compte d’autres facteurs (comme TRIM).

Je n'entre pas dans ceux-ci, il y a d'autres réponses de Stack (la réponse de @user unknown dans cette question, par exemple) et de nombreuses discussions à travers le réseau qui couvrent ces sujets afin de les rechercher si vous avez besoin de ce niveau de sécurité.

JoelAZ
la source