Backup chiffre de MySQL avec GnuPG

De OpenWikiBSD
Aller à : navigation, rechercher

Objectif : Faire une sauvegarde de vos bases MySQL en chiffrant le tout de manière asymétrique. Ainsi même si votre sauvegarde faite chez un prestataire externe passe par un lien xDSL pas sécurisé, seuls les destinataires prévus pourront déchiffrer....Toute ressemblance avec une situation existante serait purement fortuite ;-)


Pour vos courses, un coup de gnupg, un coup de mysql-client avec votre ami pkg_add

  • Export de votre clé :

gpg --armor --export phil > phil.asc

pkg_add mysql-client-VERSION
pkg_add gnupg-VERSION

gpg --import pubring.gpg  # Permet de récupérer les clés publiques de vos zamis

gpg: ./trustdb.gpg: base de confiance créée
.
.
gpg: clé 46EA1D16: clé publique « Philippe Schwarz <MAIL> » importée
gpg: Quantité totale traitée: X
gpg:               importée: X  (RSA: 2)
gpg: aucune clé de confiance ultime n'a été trouvée



#!/usr/local/bin/bash

# Gnu GPL v2
# Philippe Schwarz
# Fevrier 2008

# Déclaration des variables
USERBDD=toto
HOST=MonSRVBDD
PASSWORD=toto;-)
PGPID=0x46EA1D16   # C'est ma clé GnuPG à moi
REPBACK=/sauve
SOUCI=/tmp/soucibackupMYSQL.txt
VERT="\\033[1;32m"
NORMAL="\\033[0;39m"
ROUGE="\\033[1;31m"
USERMAIL=phil@monSite.ici
MACHINE=`uname -n`
if  [  -e $SOUCI ]
then
rm $SOUCI
fi

for BDD in  BDD1  BDD2  BDD3 
        do
echo "Backup chiffre de $BDD"
logger -t SQLdump_GnuPG "Backup chiffre de $BDD"
/usr/local/bin/mysqldump --user=$USERBDD --host=$HOST --password=$PASSWORD $BDD | /usr/bin/gzip   | /usr/local/bin/gpg --batch --quiet --no-verbose --ou
tput - --encrypt  --armor --always-trust --encrypt-to $PGPID -r $PGPID    >  $REPBACK/$BDD.gz.gpg
        
TAILL=`du -hs $REPBACK/$BDD.gz.gpg  |cut -b1-2`

STRING="Backup chiffre de $BDD "
if [ "$TAILL" == "0B" ]
then
STRINGAFF="$STRING  $ROUGE PROBLEME $NORMAL" 
STRINGLOG="$STRING  PROBLEME "
echo "La sauvegarde de la base $BDD n'a pas été éffectuée correctement .\n">> $SOUCI
echo  $STRINGAFF
else
STRINGAFF="$STRING  $VERT OK $NORMAL" 
STRINGLOG="$STRING  OK "
echo -e $STRINGAFF
fi

logger -t SQLdump_GnuPG $STRINGLOG

        done

if [ -e $SOUCI  ]
then
cat $SOUCI  |mail -s "Problème de sauvegarde de base de données sur $MACHINE " $USER
fi


Un petit coup d'entrée dans la crontab et c'est bon.

30      05      *       *       *       /usr/local/script/backupMySQL.sh

  • Vous pouvez aussi remplacer les deux pipes par des indirections vers des fichiers, avec l'énorme inconvénient d'avoir des traces locales sur le système de fichier. Vous devrez ajouter à chaque fois un coup de wipe.
  • Lors du déchiffrement, il faut redonner l'extension .gz au biniou pour pouvoir le gunziper avant de le le lire


Attention Ce script contient en clair le mot de passe MySQL; un chown root.wheel && chmod 700 script devrait aider..