web-dev-qa-db-fra.com

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

J'ai une arborescence de répertoires que je voudrais détruire avec l'utilitaire Linux 'shred'. Malheureusement, shred n'a pas de -R option pour la destruction récursive.

Comment puis-je détruire une arborescence de répertoires entière récursivement?

50
Steve V.

Utilisez la commande find pour exécuter shred de manière récursive:

find <dir> -type f -exec shred {} \;
49
jamesallman

Méfiez-vous des lambeaux!

Depuis la page de manuel de shred:

ATTENTION: Notez que shred repose sur une hypothèse très importante: que le système de fichiers écrase les données en place. C'est la façon traditionnelle de faire les choses, mais de nombreuses conceptions de systèmes de fichiers modernes ne satisfont pas à cette hypothèse. Voici des exemples de systèmes de fichiers sur lesquels shred n'est pas efficace ou n'est pas garanti d'être efficace dans tous les modes de système de fichiers:

  • systèmes de fichiers journalisés ou structuré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

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

  • les systèmes de fichiers qui se cachent 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 la destruction est donc d'une efficacité limitée) uniquement en mode data = journal, qui journalisent les données en plus des métadonnées. Dans les modes données = ordonné (par défaut) et données = écriture différée, shred fonctionne comme d'habitude. Les modes de journalisation Ext3 peuvent être modifiés en ajoutant l'option data = something aux options de montage pour un système de fichiers particulier dans le fichier/etc/fstab, comme indiqué dans la page de manuel de montage (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 un fichier déchiqueté ultérieurement.

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

28
user unknown

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 la destruction, en utilisant 38 passes au lieu de 3. Pour effectuer une seule passe rapide, utilisez

srm -rfll pathname

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

16
Cookie

Combiner cette réponse avec les meilleures options connues pour déchiqueter en utilisant 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 {} \;

Modifier: sachez que meilleure réponse pour broyer un seul fichier force une synchronisation qui écrit les modifications sur le support avant de supprimer le fichier car certains ou tous les systèmes de fichiers journalisés ont un tampon.

Si possible, la commande find doit 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.

11
im3r3k
find /your/directory -exec shred {} \;
5
refp
find [dirname] -depth -type f -exec shred -n1 {} \;

Cela effectue une recherche approfondie des fichiers dans le répertoire [dirname], puis exécute le shred -n1 commande sur chaque fichier. Lors de la suppression de fichiers et/ou de répertoires, l'ajout de -depth par défaut est une bonne habitude, même si ce n'est pas strictement nécessaire dans ce cas. Lors de l'exécution de ce type de commande avec rm -rf au lieu de shred, -depth est nécessaire pour garantir que les répertoires ne sont pas supprimés avant que le contenu des répertoires ne soit supprimé (ce qui provoque des erreurs).

4
Alexander

La méthode shred la plus complète que j'ai trouvée, qui inclut également la suppression du répertoire, est d'avoir find appeler un script pour avoir shred:

  • écraser le fichier
  • synchroniser
  • puis supprimez
  • et enfin appeler 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 script shred (j'ai nommé le mien dirShredder.sh et stocké dans le /root ré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 ceci:

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

Assurez-vous de marquer le killit.sh fichier exécutable (chmod +x) et bien sûr mettre à jour le chemin du répertoire que vous souhaitez détruire et dirShredder.sh si vous le stockez ailleurs.

NOTA BENE - shred a des problèmes avec les systèmes de fichiers Copy-on-Write (ZFS, BTRFS, et al) et même avec les systèmes de fichiers de journalisation. Il n'y a pas vraiment de "meilleure" manière acceptée de traiter cela que j'ai trouvé autre que des "systèmes de fichiers chiffrés" mais je ne sais pas à quel point c'est efficace après coup.
. RÉDUIRE.)

Je ne vais pas entrer ici, il y a d'autres réponses Stack (la réponse de @user unknown dans cette question par exemple) et de nombreuses discussions sur le net qui couvrent ces sujets, alors recherchez-les si vous avez besoin de ce niveau de sécurité.

0
JoelAZ