Sauvegarde cryptée sous Ubuntu

Lundi 9 juin 2008 16:38

Voici la traduction d’un très bon tuto en italien du Blog Haumako que j’ai suivi pour faire ma procédure de sauvegarde.

Ce constat n’est pas nouveaux, mais une sauvegarde périodique de notre travail est essentielle pour prévenir une possible perte de données liée à une défaillance de de disque dur, un vol ou encore un effacement accidentel. De plus et dans la plupart des cas, les données que nous voulons sauvegarder contiennent des informations privées, des projets en cours de réalisation ou bien encore des documents confidentiels venant de notre société. Voilà donc pourquoi crypter ses sauvegardes, est quelque chose d’important. Nous verrons dans cet article comment créer une procédure de sauvegarde simple et automatique sous Ubuntu (et Linux en général) avec les outils d’archivage (tar) et de cryptographie (gpg).

Avant de procéder à la réalisation de ce script, il me paraît intéressant de présenter dans les grandes lignes le fonctionnement  et la manière dont on va utiliser tar et gpg. Pour ceux qui sont déjà des familiers de ces 2 outils, vous pouvez passer directement à la partie réalisation de la procédure de sauvegarde.

Tar

Tar est un des premiers outils qu’un utilisateur de système Linux apprend à connaître. Une de ses caractéristiques tient dans la possibilité d’archiver de manière séquentielle les fichiers dans une archive unique. Nous utiliserons cet outil pour créer un fichier temporaire contenant tous les fichiers que l’on souhaite sauvegarder, de façon à rendre le cryptage plus facile avec gpg.

Gpg

Gpg est la version open-source du célèbre pgp. Il permet une cryptographie asymétrique de données grâce à un couple de clés, une clé publique et une clé privée. Grâce à la clé publique il est possible de crypter des informations, sans mot de passe. Par contre, avec la clé privée et une fois entré le mot de passe, il est possible décrypter ces mêmes données.

Cette caractéristique est employée par beaucoup de personnes pour sécuriser l’échange d’informations privées (courriel, messagerie instantanée, etc.). Pour que nos correspondants puissent nous envoyer des données cryptées, il nous suffit de leurs fournir notre clé publique (appelée clé esclave) qui sert uniquement à crypter les données. Une fois reçues les informations cryptées , nous utiliserons notre clé privée, qui, couplée avec le mot de passe, nous permettra d’en décrypter le contenu.

Nous utiliserons la clé publique gpg pour crypter nos archives comme cela, nous ne serons pas obligés d’insérer à chaque sauvegarde le mot de passe ou, pire encore, nous ne serons pas obligés de le mémoriser en clair  dans le script. Pour conclure, vu que rien ne sera demandé à chaque exécution du script, il pourra être exécuté en arrière plan et c’est ce que je veux !

Création d’une clés gpg

Pour ceux qui possède déjà un couple de clés ( je m’adresse entre autre au Ubunteros possédant un compte Launchpad), je vous conseille quand même d’en créer une nouvelle de façon à la réserver uniquement pour la procédure de sauvegarde.

Il existe divers moyens graphique pour la création d’un couple de clés, mais j’utiliserai la ligne de commande parce que c’est la méthode la plus rapide.

Nous ouvrons un terminal et exécutons la commande suivante :

gpg --gen-key

gpg vous demandera les options pour la création de la clé, vous pouvez très bien laisser celles par défaut. Pour le mot de passe, je vous conseille d’en créer un assez compliqué.

Réalisation du script

Voyons maintenant le script qui s’occupera de créer le fichier de sauvegarde crypté dans le répertoire de notre choix. Mettez la commande suivante dans un fichier :

#! /bin/sh
tar -cf /emplacement/fichier/backup.tar -X /emplacement/fichier/exclude.txt /emplacement/asauvegarder
gpg –yes -e -r “nom_clé” backup.tar

Explication

La première commande s’occupe de créer l’archive tar contenant tous les fichiers que l’on tient à sauvegarder. Le fichier exclude.txt avec l’option -X permet de ne pas inclure dans l’archive tous les dossiers et fichiers qu’il contient (ceux dont vous ne voulez pas) et que vous aurez rempli au préalable. Ils devront être écrit ligne par ligne, avec le chemin relatif au dossier ou fichier que vous voulez exclure de votre sauvegarde.

Par exemple, supposons que l’on veuille effectuer une sauvegarde du dossiers “documents” avec l’arborescence suivante :

documents/
|-----> images/
|-----> contrats/
|-----> projet/
|----------> .temp
|----------> ~projet.html
|----------> projet.html
|----------> projet-temp/
|-----> temp/

Et que nous voulons exclure tous les fichiers et dossiers temporaires, on devra écrire dans le fichier exclude.txt :

~*
.*
temp
projet/projet-temp

La seconde commande crypte l’archive temporaire tar précédemment créée avec la clé indiquée (votre clé)  après l’option -r. L’option –yes sert à répondre oui par défaut à toutes les questions pendant le processus de cryptage. Elle est nécessaire, car dans le cas ou un ancien fichier crypté existerait déjà, gpg nous demandera si il faut ou non écraser ce fichier. Notre but étant d’avoir une procédure de sauvegarde totalement transparente, nous réglons donc ce problème pour que gpg puisse toujours écraser un ancien fichier présent, si il existe.

Gpg compresse automatiquement le fichier de sortie avec gzip, nous n’avons donc pas à nous préoccuper de compresser le fichier de sauvegarde après l’opération de cryptage!

Pour éviter de taper à chaque sauvegarde ces commandes, nous les sauvegardons dans un fichier de test, en lui octroyant les permissions d’exécution.

Automatisation du script avec crontab

Nous pouvons automatiser cette sauvegarde en incluant une ligne dans contab qui lancera du fichier que nous venons juste de créer. Pour effectuer cette opération accédons à crontab par cette commande :

crontab -e

et nous tapons :

*/20 * * * * /emplacement/fichier/backup-script.sh

*/20 indique à crontab d’exécuter le script toutes les 20 minutes. Vous pouvez changer cette option comme bon vous semble si cela ne vous convient pas (consultez le manuel de crontab pour savoir comment modifier les données de démarrage du script).

Script de sauvegarde avancé

La méthode décrite jusqu’à présent est basée sur un script simple mais très efficace. Nous allons voir maintenant comme le faire évoluer pour exécuter la sauvegarde sur un média externe (Clé Usb, SDCard ou encore disque dur externe).

Pour rendre cette procédure intelligente, nous voulons que le script soit exécuté seulement quand le média externe est connecté et monté. Pour faire cela, on va tester à l’intérieur du script la présence de ce média externe. Dans le script qui suit, vous verrez cependant qu’il vient tester l’existence d’un répertoire sur le média externe pour éviter que le sauvegarde se fasse sur un autre périphérique monté avec le même nom.

Le script final sera le suivant :

#! /bin/sh
BACKUP_SCRIPT_PATH=/emplacement/fichier/script
BACKUP_DIR=/emplacement/dossier/backup
EXTERNAL_DRIVE=/emplacement/média/externe/
if [ -d $EXTERNAL_DRIVE/backups ]; then
tar -cf $BACKUP_DIR/nomarchive.tar -X $BACKUP_SCRIPT_PATH/exclude.txt \
/emplacement/dossier/backup/1 \
/emplacement/dossier/backup/2 \

1> /dev/null 2> $BACKUP_SCRIPT_PATH/errors.log # redirection du fichier de log en cas d’erreur
gpg –yes -e -r “nom_clè” $BACKUP_DIR/nomarchive.tar
rm $BACKUP_DIR/nomarchive.tar
cp $BACKUP_DIR/nomarchive.tar.gpg $EXTERNAL_DRIVE/backups
fi

Dans ce script on teste la présence du répertoire backups sur la média externe (à créer bien sûr), on créé l’archive temporaire, on crypte cette même archive temporaire, on supprime l’archive temporaire et pour terminer on copie l’archive cryptée dans le répertoire backups sur le média externe.

Rappelez-vous que l’archive temporaire sert uniquement à faciliter le cryptage, qui s’effectuera de cette manière, sur un seul et unique fichier. Gpg créera un fichier de type nomarchive.tar.gpg qui sera copié dans le répertoire backup.

On pourrait accélérer la création du tar en faisant une mise-à-jour de l’archive plutôt que de la créer de nouveau à chaque run (dans ce cas elle ne devra évidemment pas être éliminée après le cryptage). Cette possibilité est réalisable en substituant l’option -c avec -u dans la commande tar (qui deviendra donc tar -uf).

Vous pouvez laisser un commentaire, ou faire un trackback vers votre site.

20 commentaires sur “Sauvegarde cryptée sous Ubuntu”

  1. eclypse dit:

    9 juin 2008 à 17:36

    Je ne vois pas trop l’intérêt de crypter si tu sauvegardes sur un média externe…

  2. Cedynamix dit:

    9 juin 2008 à 17:50

    Un média externe peut être perdue, voler ou oublier au bureau non ? ;-)

  3. fanatux dit:

    9 juin 2008 à 17:52

    C’est d’autant plus important de crypter que c’est sur un DD externe!!
    Apprendre a manier GPG devient une necessité avec les projet de lois qui courent…(cf laquadrature.net)
    bon article!

  4. bochecha dit:

    9 juin 2008 à 18:10

    Et sinon, monter ta partition de sauvegarde et utiliser LUKS c’est pas plus simple ? o_O

    Petite chose, en francais on dit “chiffrer”. “Crypter” est un affreux anglissisme qui ne veut strictement rien dire.

    En effet, l’action de rendre un message incompréhensible pour ceux qui ne possèdent pas la clé est “chiffrer”.

    Utiliser la clé pour le rendre à nouveau compréhensible est le “déchiffrer”.

    Essayer de le rendre compréhensible sans posséder la clé (casser la sécurité en quelque sorte) est le “décrypter”.

    Du coup, “crypter” voudrait dire casser la sécurité en “chiffrant” sans posséder la clé… Mouarf :)

  5. bartux dit:

    9 juin 2008 à 18:13

    Article très intéressant, merci.
    Une petite remarque: en français l’on dit chiffrer et non pas crypter.

  6. bochecha dit:

    9 juin 2008 à 18:20

    PS: quand on fait le malin a reprendre les autres sur la langue francaise, on écrit “anglicisme” :D

  7. Matthew-zalem dit:

    9 juin 2008 à 18:53

    Merci bien pour cet article tout bien détaillé.
    J’ai toutefois une question : Étant donné que l’on peut sauvegarder de grandes quantités de données, ce qui dure un certain temps, est-ce que si on éteind notre manchot d’ordinateur la sauvegarde se fera complétement avant l’extinction de celui-ci (pour ne pas avoir une sauvegarde corrompue car incomplète), ou sinon y a t’il un moyen de régler la sauvegarde pour qu’elle se fasse juste avant l’extinction de l’ordi (je manie pas encore très bien crontab…) et ce pour avoir les toutes dernières données (surtout si on règle crontab pour des durées supérieures à 20 minutes) ?
    Bon je sais pas si j’ai été très clair mais merci d’avance si vous arrivez à me répondre.

  8. aldo dit:

    9 juin 2008 à 18:59

    On peut également utiliser LFD (luks for dummies) qui est très pratique et facile d’emploi : http://petaramesh.org/post/2007/11/13/LUKSfile-for-dummies

    Sinon, concernant cron et anacron, je ne suis jamais arrivé à faire fonctionner cron en mode anacron, alors que j’ai lu sur le forum Ubuntu-fr que anacron essayait de regarder tout ce que n’avait pas pu lancer cron quand le pc était éteint et le lançais alors au démarrage… Si quelqu’un sait comment ça marche…

  9. fred dit:

    9 juin 2008 à 19:48

    Hello,

    Pourquoi ne pas utiliser le stdout pour tar (tar - ) et piper ce stdout dans le stdin de gpg ?

    Ca permettrait de “chiffrer” ;) et compresser à la volée, avant écriture sur disque …

  10. Moi dit:

    9 juin 2008 à 19:52

    Merci, très bon article pour sauvegarder ses fichiers en sécurité !

    Il ne manque plus qu’un tuto pour chiffre une partition… (attention, il y a une demande cachée dans la dernière phrase)

  11. arthur dit:

    9 juin 2008 à 20:30

    crypter ça veut rien dire :)

    Pour assurer la sécu de ses données il y a aussi encfs. J’en avais assez du lvm chiffré (pas top quand on aime partimager), donc tous mes documents, dossiers de firefox, de thunderbird, de pidgin… je mets ça dans un dossier chiffré avec encfs et je monte ça avec cryptkeeper.
    Il suffit de quelques liens symboliques et on a un dossier unique facile à sauvegarder.

    http://doc.ubuntu-fr.org/encfs

    Un bon article sur la sécu qui était sorti sur le planet : http://planet.ubuntu-fr.org/post/2007/03/31/Ubuntu-en-milieu-hostile

  12. Olivier dit:

    9 juin 2008 à 22:48

    Duplicity fait ça:
    http://duplicity.nongnu.org/

  13. Jérémie78 dit:

    9 juin 2008 à 22:48

    Fred : les pipes ne requièrent-t’ils pas la fin de la commande précédente avant d’envoyer le “buffer” dans la commande suivante ?
    Dans un tel cas, pour peu que la taille des données à archiver sont grosse, il a un fort risque de saturer la ram, de swapper voire de faire du bordel (que ce passe t’il une fois la ram/le swap totalement utilisés ??) …
    Bref, à moins d’archiver des dossiers “légers” en comparaison à ta quantité de RAM, mieux vaut faire des étapes par le disque dur … quitte à perdre en vitesse mais gagner en sécurité.

  14. Sbskl dit:

    10 juin 2008 à 9:22

    Les pipes n’attendent pas la fin des commandes.
    Dans le cas présent, dès que le tar flush vers la sortie, gpg crypte… Après tout dépend de la taille du buffer utilisé par tar mais il ne devrait excéder quelques kilos.

  15. bochecha dit:

    10 juin 2008 à 17:33

    Encore une fois, tout serait plus simple avec LUKS.

    Fedora 9 permet de chiffrer ses partitions, et ce des l’installation de la distribution.

    Je l’ai fait pour mon /, mon /home et mon swap. J’imagine que ca doit pas être plus compliqué de le faire pour un disque externe / un montage NFS.

    Une fois que c’est fait… La partition demandera la phrase de passe / clé au montage. Une fois montée, on a une partition qu’on utilise tout bêtement. L’étape du chiffrement de ce script devient alors inutile puisqu’il suffit de copier dessus (le chiffrement / déchiffrement est fait à la volée) comme pour n’importe quelle partition.

    Commentaire édité.

  16. bochecha dit:

    11 juin 2008 à 10:17

    Pourquoi mon commentaire a-t-il été édité ? o_O

    Pas que ca me pose un problème, mais j’aurais aimé une raison… J’ai écrit une co***rie ?

  17. Cedynamix dit:

    11 juin 2008 à 10:53

    @ Bochecha Dernière phrase inapproprié tous simplement. :-)

  18. bochecha dit:

    12 juin 2008 à 15:38

    C’est vrai ? o_O

    Ben… désolé, d’autant que j’ai aucune idée de ce que j’avais écrit :D

  19. Jeremy dit:

    19 juillet 2008 à 17:58

    Bonjour Cedynamix :)
    Un tres bon tuto comme d’habitude :)
    J’aimerais connaître l’utilité de la commande -r
    La commande -e je comprends (encryption) mais la r ?

    Merci :)

  20. Geoff dit:

    12 décembre 2008 à 11:38

    Bonjours à tous
    Merci pour l’aricle et les comentaires constructifs…

    Perso il m’est impossible de déchiffrer avec gpg
    avec la commande gpg -d fichier.gpg
    il me demande la passephrase pzuis dans mon terminal il défille des millier de caractères spéciaux, ensuite mon terminal est buggé ainsi que les autres, après un reboot je retrouve uniquement mon fichier.gpg mais pas celui qui a été déchiffré.

    Si quelqu’un à une idée

Laisser un commentaire

-->

Linux