GNU/Linux >> Tutoriels Linux >  >> Linux

Retrouver les fichiers perdus avec Scalpel

En tant qu'administrateur système, une partie de votre responsabilité consiste à aider les utilisateurs à gérer leurs données. L'un des aspects essentiels de cette opération est de s'assurer que votre organisation dispose d'un bon plan de sauvegarde et que vos utilisateurs effectuent leurs sauvegardes régulièrement ou n'ont pas à le faire car vous avez automatisé le processus.

Cependant, parfois le pire arrive. Un fichier est supprimé par erreur, un système de fichiers est corrompu ou une partition est perdue, et pour une raison quelconque, les sauvegardes ne contiennent pas ce dont vous avez besoin.

Comme nous l'avons vu dans Comment prévenir et récupérer d'une suppression accidentelle de fichiers sous Linux, avant d'essayer de récupérer des données perdues, vous devez d'abord découvrir pourquoi les données sont manquantes. Il est possible qu'un utilisateur ait simplement égaré le fichier ou qu'il existe une sauvegarde dont l'utilisateur n'a pas connaissance. Mais si un utilisateur a effectivement supprimé un fichier sans sauvegarde, vous savez que vous devez récupérer un fichier supprimé. Cependant, si une table de partition est brouillée, les fichiers ne sont pas vraiment perdus et vous pouvez envisager d'utiliser TestDisk pour récupérer la table de partition ou la partition elle-même.

Que se passe-t-il si la récupération de votre fichier ou de votre partition ne réussit pas ou ne l'est que partiellement ? Ensuite vient le temps de Scalpel. Scalpel effectue des opérations de découpage de fichiers basées sur des modèles décrivant des types de fichiers uniques. Il recherche ces modèles sur la base de chaînes binaires et d'expressions régulières, puis extrait le fichier en conséquence.

Cet outil n'est pas actuellement maintenu, mais il est toujours fiable, compilant et fonctionnant exactement comme prévu. Si vous utilisez Red Hat Enterprise Linux (RHEL) 7, RHEL 8 ou Fedora, vous pouvez télécharger les programmes d'installation RPM de Scalpel, ainsi que sa dépendance, libtre , de klaatu.fedorapeople.org.

Commencer avec Scalpel

Scalpel est livré avec une liste complète des types de fichiers et leurs caractéristiques d'identification les plus uniques. Parfois, un fichier peut être identifié par un texte prévisible en tête et en queue :

htm    n    50000   <html         </html>

Alors qu'à d'autres moments, des codes hexadécimaux énigmatiques sont nécessaires :

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Scalpel s'attend à ce que vous dupliquiez /etc/scalpel.conf modifiez votre copie pour inclure les types de fichiers que vous espérez récupérer et pour exclure les types de fichiers dont vous savez que vous n'en avez pas besoin. Par exemple, si vous savez que vous n'avez pas ou ne vous souciez pas de .fws fichiers, puis commentez cette ligne hors du fichier. Cela peut accélérer le processus de récupération et réduire les faux positifs.

Dans le fichier de configuration, le format d'une définition de fichier est, de gauche à droite :

  • L'extension du fichier.
  • Si l'en-tête et le pied de page sont sensibles à la casse (y ou n ).
  • La taille de fichier minimale et maximale que vous souhaitez que Scalpel trouve.
  • Un en-tête standard qui identifie le début du fichier.
  • Un pied de page standard qui identifie la fin du fichier.

Le footer champ est facultatif. Si aucun pied de page n'est fourni, alors Scalpel extrait le nombre d'octets que vous avez défini comme valeur maximale du type de fichier.

Vous constaterez peut-être qu'un effort de récupération ne récupère qu'une partie d'un fichier, comme ce JPG en grande partie récupéré :

Ce résultat signifie que vous devez probablement augmenter la valeur maximale des limites du fichier, puis réanalyser, afin que la fin du fichier puisse également être récupérée :

Définir de nouveaux types de fichiers

Tout d'abord, faites une copie du fichier de configuration de Scalpel. Si tous vos utilisateurs génèrent des données similaires, vous n'aurez peut-être besoin que d'un seul fichier de configuration pour l'ensemble de votre organisation. Ou, vous trouverez peut-être préférable d'avoir un fichier de configuration par département.

Pour ajouter vos propres types de fichiers à une configuration Scalpel, commencez par une investigation médico-légale.

Pour les fichiers texte, vous avez idéalement une structure prévisible que vous pouvez anticiper. Par exemple, un fichier XML commence probablement par <xml et se termine par </xml . Les fichiers binaires sont également prévisibles. Utiliser le hexdump , vous pouvez afficher un en-tête typique du type de fichier que vous souhaitez définir. Voici les résultats pour un XCF, le fichier graphique en couches par défaut de GIMP :

$ head --bytes 8 example.xcf | hexdump --canonical
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Cette sortie provient d'un système Red Hat Enterprise Linux 8. Sur les systèmes plus anciens, une syntaxe plus ancienne peut être nécessaire :

$ head --bytes 8 example.xcf | hexdump -C
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

La sortie canonique de hexdump affiche l'adresse dans la colonne à l'extrême gauche et les valeurs décodées à l'extrême droite. Dans la colonne centrale sont les octets hexadécimaux des 8 premiers octets de la première ligne du fichier XCF.

La plupart des fichiers binaires dans /etc/scalpel.conf ressemblent assez à cette sortie, sauf que ces valeurs sont précédées du \x séquence d'échappement pour indiquer que les nombres sont en fait des chiffres hexadécimaux. Par exemple, un fichier JPG ressemble à ceci dans le fichier de configuration :

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Comparez cette valeur avec un vidage hexadécimal de test des 6 premiers octets (car c'est le nombre d'octets scalpel.conf contient dans sa définition JPG) de n'importe quel fichier JPG sur votre système :

$ head --bytes 6 example.jpg | | hexdump --canonical
00000000  ff d8 ff e0 00 10                    |......|
00000006

Comparez le pied de page avec les 2 derniers octets pour correspondre à ce que le fichier de configuration affiche :

$ tail --bytes -2 example.jpg | hexdump --canonical
00000000  ff d9                        |..|
00000002

Ces valeurs correspondent, vous pouvez donc être sûr que les fichiers JPG valides commencent et se terminent probablement tous dans un ordre prévisible.

Remarque : L'entrée Ogg dans le scalpel.conf le fichier est trompeur, car il manque le \x séquence d'échappement. Si vous avez besoin de récupérer un fichier Ogg, corrigez-le ou remplacez sa définition.

Se rendre au travail

Maintenant, pour obtenir le même niveau de confiance pour tous les fichiers que vous devez récupérer (comme XCF, dans l'exemple précédent). Pour rappel, voici votre flux de travail pour définir les types de fichiers binaires communs au lecteur victime : 

  1. Obtenir les valeurs hexadécimales des premiers octets d'un type de fichier en utilisant le head --bytes n commande.
  2. Obtenez les derniers octets en utilisant le tail --bytes -n commande.
  3. Répétez ce processus sur plusieurs fichiers différents du même type pour confirmer la cohérence de ce modèle, en ajustant la longueur de vos modèles d'en-tête et de pied de page selon les besoins.
  4. Saisissez les valeurs d'en-tête et de pied de page dans votre configuration Scalpel personnalisée, en utilisant le \x notation pour identifier chaque octet comme un caractère hexadécimal.

Suivez cette séquence pour chaque type de fichier binaire important que vous devez récupérer.

Si un fichier est en texte brut, fournissez un en-tête et un pied de page communs, tels que #!/bin/sh pour les scripts shell, # (l'espace après le # est important) pour les fichiers Markdown avec un titre de niveau h1, <xml pour les fichiers XML, etc.

Lorsque vous êtes prêt à exécuter Scalpel, créez un répertoire dans lequel il pourra placer vos fichiers récupérés :

$ mkdir /run/media/seth/rescuer/scalped

Remarque : Ne créez pas ce répertoire sur le même volume qui contient les données perdues.

Si le lecteur victime n'est pas encore monté, montez-le, puis exécutez Scalpel :

$ scalpel -c my-scalpel.conf \
  -o /run/media/seth/rescuer/scalped \
  /run/media/seth/victim

Vous pouvez également exécuter Scalpel sur une image disque :

$ scalpel -c my-scalpel.conf \
  -o ~/scalped ~/victim.img

Lorsque Scalpel a terminé, passez en revue les fichiers dans votre répertoire de secours désigné.

Dans l'ensemble, il est préférable de faire des sauvegardes afin d'éviter toute récupération de fichiers. Mais, si le pire devait arriver, essayez Scalpel et sculptez soigneusement.


Linux
  1. Comment trouver des fichiers avec un certain sous-chemin ?

  2. Rechercher un fichier avec les commandes Rechercher et Localiser sous Linux

  3. Fichier de suppression Linux de taille 0

  4. Répertorier tous les fichiers d'images graphiques avec rechercher ?

  5. Comment lister les fichiers avec des chemins complets sous Linux ?

Commande de recherche Linux avec des exemples pratiques

Comment trouver des fichiers dans Debian 10

Comment trouver des fichiers basés sur l'horodatage sous Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Tutoriel sur la commande de recherche Linux (avec exemples)

Comment rechercher des fichiers avec des dizaines de critères avec la commande Bash Find