Backup par FTP et archive cryptée

Cette page présente un petit script home made pour sauvegarder une liste de répertoires/fichiers dans une archive cryptée et uploader le tout sur un serveur ftp.

Pour éviter d'utiliser un client ftp, j'utilise perl pour uploader le fichier. De fait, il faut modifier les chemins de répertoire directement dans le code perl. Comme le mot de passe de mysql et de chiffrement est mis en clair en paramètres, c'est plutot une bonne idée des réduires les permissions sur le script au seul utilisateur root :

-rwx------  1 root   root     2312 2007-02-20 20:52 backup.sh

Le PWDDEST est le répertoire de stockage temporaire de l'archive, vous pouvez mettre /tmp ou n'importe quoi d'autre. Enfin, LISTFILETOARCHIVE contient les répertoires et les fichiers à sauvegarder. Listez les sans sauter de lignes et en laissant juste un espace entre les entrées.

Les packages tar, bzip, openssl et cowsay (pour le trip) doivent être installés.

Je le répète, pensez bien à modifier la section perl en majuscule pour l'upload de l'archive ! Vous pouvez aussi faire des replace directement sur ADRESSE_FTP_DISTANT, USER, MOTDEPASSE et REPERTOIRE_DE_DESTINATION.

#! /bin/sh
 
########VARIABLES###########
MYSQLPW=Sup3rmOtd3p4ss3d3l4m0rT
PWDDEST=/root
LISTFILETOARCHIVE='/etc/postfix /etc/bind /etc/apache2 /etc/vsftpd.conf /etc/mysql /priv/Authority /pub/www/wiki/data'
############################
 
#############################################
#
# dump the databases
#
mysqldump --all-databases -u root --password=$MYSQLPW > $PWDDEST/`hostname`-`date +%Y%m%d`.sql
if [ $? != 0 ]
then
        cowsay "ERREUR LORS DE L'EXECUTION DU SCRIPT DE BACKUP : dump de mysql" | mail -s 'BACKUP ERROR REPORT' root
        exit 1
fi
#############################################
#
# make an archive
#
tar -cjvf $PWDDEST/`hostname`-`date +%Y%m%d`.tar.bz $PWDDEST/`hostname`-`date +%Y%m%d`.sql $LISTFILETOARCHIVE
 
if [ $? != 0 ]
then
        cowsay "ERREUR LORS DE L'EXECUTION DU SCRIPT DE BACKUP : creation de l'archive avec tar" | mail -s 'BACKUP ERROR REPORT' root
        exit 1
fi
#############################################
#
# cipher the archive, to decipher use "-d"
#
openssl aes-256-ecb -e -a -salt -in $PWDDEST/`hostname`-`date +%Y%m%d`.tar.bz -out $PWDDEST/`hostname`-`date +%Y%m%d`.tar.bz.ciphered -pass pass:$MYSQLPW
 
if [ $? != 0 ]
then
        cowsay "ERREUR LORS DE L'EXECUTION DU SCRIPT DE BACKUP : chiffrement openssl du fichier de backup" | mail -s 'BACKUP ERROR REPORT' root
        exit 1
fi
#############################################
#
# send via ftp
#
# Note that perl command line cannot use env
# variables. Then, the ftp parameters have to
# be set statically in the following commands
#
cd $PWDDEST
echo -en `hostname`-`date +%Y%m%d`.tar.bz.ciphered > /tmp/backupfilename
perl -e '
use Net::FTP;
$ftp = Net::FTP->new("ADRESSE_FTP_DISTANT", Debug=>0) or die "Cannot connect to ADRESSE_FTP_DISTANT: $@";
$ftp->login("USER","MOTDEPASSE") or die "Cannot login ", $ftp->message;
$ftp->cwd("REPERTOIRE_DE_DESTINATION") or die "Cannot change working directory ", $ftp->message;
$ftp->put(`cat /tmp/backupfilename`) or die "put failed", $ftp->message;
$ftp->quit;
'
 
if [ $? != 0 ]
then
        cowsay "ERREUR LORS DE L'EXECUTION DU SCRIPT DE BACKUP : envoi vers le ftp" | mail -s 'BACKUP ERROR REPORT' root
        exit 1
fi
#############################################
#
# remove local files
#
rm -f $PWDDEST/`hostname`-`date +%Y%m%d`.*
rm -f /tmp/backupfilename

Et pour déchiffrer ?

Dans le répertoire de destination de l'archive, je conserve le script suivant, pret à l'emploi si je dois déchiffrer une archive:

#! /bin/bash
if [ -z $2 ]
then
        echo "usage: sh decrypt.sh <ciphered_file> <output_unciphered_file>"
else
        openssl aes-256-ecb -d -a -in $1 -out $2
fi
fr/ressources/articles/backup_ftp_crypte.txt · Last modified: 2011/03/16 01:41 (external edit)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0