Lorsqu'on supprime des fichiers (en utilisant la commande rm ou une interface graphique), le système de fichier ne supprime pas réellement les données mais juste le pointeur qui permet d'y accéder, appelé un inode. Ce comportement permet d'augmenter largement les performances du système de fichier. En effet dans le cas contraire, il faudrait autant de temps pour écrire ou pour supprimer un fichier. En ne supprimant que l'inode, la suppression est instantanée.
Cependant, il existe des cas où l'on souhaite réellement que les données soient supprimées (pour être sûr que les données ne soient pas récupérables). Dans ce cas, certains systèmes de fichiers permettent de modifier leur comportement pour qu'ils détruisent réellement les données, au prix d'une baisse de performance. Libre à chacun d'évaluer sa priorité entre la performance et la confidentialité.
Pourquoi ne pas juste avoir un outil pour effacer les données de fichiers uniquement lorsqu'on le souhaite? C'est ce que je me suis demandé hier soir et je vous livre mes quelques réflexions. Un prototype en shell me semble assez trivial à écrire:
TAILLE=`du -b ${1}|cut -f1` #nombre d'octets du fichier
dd bs=1 count=$TAILLE if=/dev/zero of=fichier_a_supprimer
rm fichier_a_supprimer
Cependant, le système d'exploitation doit pouvoir mettre les données en cache et donc ne pas les écrire car la suppression arrivera probablement avant le vidage du cache. Un simple "sync" entre la commande "dd" et "rm" devrait contourner ce problème.
D'un autre côté, pourquoi créerr une nouvelle commande alors que ça pourrait être intégré à "rm" via une nouvelle option?
Voilà ce à quoi un script shell pourrait ressembler (appelons-le "rwrm" pour ReWrite and ReMove ou "destroy", parce que ça fait impressionnant) :
#! /bin/sh
# détruit les données du fichier passé en paramètre puis l'efface
# j'espère qu'il n'y a pas de spécificités bash...
SCRIPTNAME="rwrm"
ARGS=1
f_usage() {
echo "Syntaxe: ${SCRIPTNAME} fichier_a_supprimer"
}
# Vérifie si le script est correctement appelé.
if [ $# -ne ${ARGS} ]
then
f_usage
exit 1
fi
if [ ! -f ${1} ]
then
echo "${1} introuvable (ou n'est pas un fichier)."
exit 2
fi
TAILLE=`du -b ${1}|cut -f1` # nombre d'octets du fichier
#sync # utile?
dd bs=1 count=$TAILLE if=/dev/zero of=${1}
rm ${1}
# fin du script
Note pour le jour où j'aurais du temps à perdre: l'implémentation en C me semble facile à réaliser.
# SHRED(1)
Posté par stricaud . Évalué à 10.
# Et aussi
Posté par Nicolas Noirbent . Évalué à 2.
Ce qui signifie que « bêtement » réécrire des 0 par dessus le fichier cible ne détruira en aucun cas les données initiales sur la partition du disque dur sous-jacent; je n'évoque même pas les cas ou ladite partition est en réalité un volume LVM / une partition RAID.
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 3.
(Sans prendre en compte la journalisation) Ah bon, et ils font quoi alors ? (je te prie de donner au moins un lien pour prouver ce que tu vas dire)
[^] # Re: Et aussi
Posté par fleny68 . Évalué à 8.
Ce qui fait qu'effacer physiquement le fichier avec shred ne garantit pas que les données ne se retrouvent pas ailleurs sur le disque.
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 2.
Tout le problème de son raisonnement est là, shred ne fait pas changer de taille les fichiers (à part qu'il doit arrondir aux blocs de 512 octets, mais le fs ne devrait pas changer de place le fichier dans les limites d'un bloc)
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 4.
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 4.
[^] # Re: Et aussi
Posté par Boa Treize (site web personnel) . Évalué à 3.
[^] # Re: Et aussi
Posté par fleny68 . Évalué à 2.
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 2.
[^] # Re: Et aussi
Posté par wismerhill . Évalué à 2.
http://en.wikipedia.org/wiki/Copy-on-write
[^] # Re: Et aussi
Posté par pix (site web personnel) . Évalué à 1.
LFS: A Log Structured File System for Linux that Supports Snapshots
- http://lwn.net/Articles/234441/
- http://logfs.org/logfs/
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 1.
Dans le cas général, je ne vois pas pourquoi un FS utiliserait ça, et c'est pas ton lien qui le montre. Dans les cas particuliers, ça peut être utilisé pour faire des backups par exemple, comme avec ext3cow [http://www.ext3cow.com/] (mais ce n'est pas le ext3 qu'on trouve dans linux, attention).
[^] # Re: Et aussi
Posté par wismerhill . Évalué à 1.
http://en.wikipedia.org/wiki/Btrfs
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 1.
Selon la page btrfs, copy-on-write est utilisé pour les snapshots (rien à voir avec le sujet), et dans le cas de "clonage" de fichier, lors d'un "cp", donc avec 2 inodes différents, ce qui n'affecte en rien l'effet du shred. Ce lien ne sert donc à rien.
La page zfs parle aussi de copy-on-write pour les snapshots (ce qui n'a toujours rien à voir), ainsi que pour avoir des "transactions" sur les fichiers, ce qui est en rapport avec le sujet, et effectivement c'est mauvais signe pour shred.
Tu remarqueras que les exemples que tu donnes n'ont rien à voir avec ceux invoqués dans le post initial : ext3 et xfs.
[^] # Re: Et aussi
Posté par wismerhill . Évalué à 1.
Le fait que le copy-on-write ne soit utilisé que dans certains cas particulier implique malgré tout que, sur ces systèmes de fichiers, on n'a pas de garantie que les données sensibles ne traînent pas ailleurs sur le disque dur, à moins de connaître parfaitement l'historique d'utilisation de son FS et d'être sur que l'on n'a pas utilisé les fonctionnalités en question.
[^] # Re: Et aussi
Posté par Psychofox (Mastodon) . Évalué à 2.
zfs fait toujours du copy-on-write. C'est aussi la raison pour laquelle il n'y a pas d'outil de fsck par exemple, car ça ne servirait à rien.
La page wikipedia explique juste plus bas que l'usage du copy-on-write facilite la création de snapshots, ce qui est évident.
[^] # Re: Et aussi
Posté par KiKouN . Évalué à 2.
[^] # Re: Et aussi
Posté par Octabrain . Évalué à 2.
# c'est la course
Posté par theblatte . Évalué à 4.
Sinon, pas mieux que les commentaires au-dessus...
# Tout est dans le commentaire.
Posté par Axioplase ıɥs∀ (site web personnel) . Évalué à 2.
# rm ne supprime pas toujours l'i-node
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 10.
# Raté
Posté par Thomas Petazzoni (site web personnel) . Évalué à 10.
Raté, l'inode c'est ce qui référence les données. Le pointeur, c'est une entrée de répertoire, ou dentry dans la terminologie du noyau.
# outils et outillage
Posté par bubar🦥 (Mastodon) . Évalué à 3.
Ce qui serait peut être intéressant, c'est de pouvoir proposer une "corbeille" dans laquelle l'utilisateur peut faire un "glisser déposer" des dits fichiers, et avoir toutes données et références écrasées. Dit comme cela, c'est facile, mais même en utilisant de zouettes outils tout prêt, l'exerice reste 'dur'.
Sinon sincèrement mon nanavis est que cela met en lumière une possibilité, et améliore la compréhension pour l'utilisateur de son système, et ça c'est bien :p Mais une fois un peu éclairé, il souhaitera peut être plutôt se préparer des espaces dédiés à la manipulation de données sensibles.
[^] # Re: outils et outillage
Posté par Olorim . Évalué à 2.
Mais bon, avant de parler de graphique, il faudrait que le mécanisme soit fiable déjà : le meilleur moyen, c'est d'écrire un fichier au même endroit avec du contenu aléatoire de même taille que le précèdent et de de supprimer ce fichier ensuite. Ok, coté performance ça doit pas être le pied, mais je vois pas de meilleur moyen...
[^] # Re: outils et outillage
Posté par Octabrain . Évalué à 4.
[^] # Re: outils et outillage
Posté par Fabimaru (site web personnel) . Évalué à 1.
[^] # Re: outils et outillage
Posté par Fabimaru (site web personnel) . Évalué à 2.
http://toastytech.com/guis/os24_1stscreen.gif
[^] # Re: outils et outillage
Posté par Kerro . Évalué à 4.
# Les attributs des fichiers d'un système de fichiers Linux
Posté par Frédéric Massot (site web personnel) . Évalué à 7.
Et bien non, si il y a bien un attribut pour la mise à zéro des blocs d'un fichier lors de sa suppression, il n'est pas respecté par les noyaux actuel. Extrait de la page du manuel de chattr :
Quand un fichier avec l'attribut « s » est supprimé, ses blocs sont mis à zéro et écrits sur le disque. Remarque : assurez-vous de lire la section sur les bogues et limitations à la fin de ce document.
Les attributs « c », « s » et « u » ne sont pas respectés par les systèmes de fichiers ext2 et ext3 tels qu'ils sont implémentés dans les noyaux Linux actuels. La gestion de ces attributs pourrait être implémentée dans des versions futures des systèmes de fichiers ext2 et ext3.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.