====== Divers scripts de backup sous linux ======
===== Information =====
Testés sur Debian 8. **Attention, aucun de ces scripts n'a de gestion d'erreur**. Ils font le job, mais il faut contrôler vos backups régulièrement.
===== Backup de ftp =====
Utile pour backup d'un site web. Récupération et création d'une archive tgz. Création d'un fichier md5 correspondant à l'archive.
Packages nécessaires : ''lftp'' ''md5sum''
apt install lftp md5sum
Script :
#!/bin/bash
###### CONFIGURATION #####
#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem
#Nom du site à backup
NOMSITE=monsite.fr
#Addresses FTP
FTPADDRESS=ftp.monsite.fr:21
#Utilisateur FTP
FTPUSER=user
#Mot de passe FTP
FTPPASS=password
#Dossier distant sur FTP, depuis la racine du FTP
FTPREMOTEFOLDER=/htdocs
#Durée de rétention de backups en jours
RETENTION=5
####### FIN CONF #########
### NE PAS EDITER APRES CE POINT ! ####
LFTPTEMP=$DOSSIERSCRIPT/temp/$NOMSITE
mkdir -p $LFTPTEMP
BAKFOLDER=$DOSSIERSCRIPT/bak
mkdir -p $BAKFOLDER
### SCRIPT START ###
#SYNCHRO LFTP
lftp -u $FTPUSER,$FTPPASS -e 'mirror --verbose -c '$FTPREMOTEFOLDER' '$LFTPTEMP' --delete --parallel=1 --verbose=3; quit;' $FTPADDRESS
#COMPRESSION
NOW=$(date +"%Y-%m-%d-%H-%M-%S")
tar -zcvf $BAKFOLDER/$NOMSITE-$NOW.tgz $LFTPTEMP
#CHECKSUM
md5sum $BAKFOLDER/$NOMSITE-$NOW.tgz > $BAKFOLDER/$NOMSITE-$NOW.md5
#EDIT CHECKSUM FOR RELATIVE PATH
SEDCOMMAND=s,$BAKFOLDER/,,g
sed -i "$SEDCOMMAND" $BAKFOLDER/$NOMSITE-$NOW.md5
#CLEAN OLD BACKUPS
find $BAKFOLDER -type f -mtime +$RETENTION -exec rm {} \;
### SCRIPT END ###
===== Backup en rsync, avec authentification par clé privée =====
Utile pour récupérer des archives sur un serveur distant sécurisé.
Package nécessaire : ''rsync''
apt install rsync
Script :
#!/bin/bash
###### CONFIGURATION #####
#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem
#Nom du site à backup
NOMBACKUP=monbackup
#Addresses FTP
SERVERADDRESS=monserveur:22
#Utilisateur SSH
USER=user
#Dossier distant sur serveur
SERVERREMOTEFOLDER=/mon/dossier/
#Fichier de clé SSH à mettre dans le dossier "keys" (dossier situé au niveau de ce script)
KEYFILE=macleprivee
#Durée de rétention de backups en jours
RETENTION=5
####### FIN CONF #########
BAKFOLDER=$DOSSIERSCRIPT/bak/$NOMBACKUP
mkdir -p $BAKFOLDER
#RSYNC
rsync -avz --progress --delete --rsh="ssh -i "$DOSSIERSCRIPT"/keys/"$KEYFILE" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" $USER@$SERVERADDRESS:$SERVERREMOTEFOLDER/* $BAKFOLDER
#Nettoyage des vieux backups
find $BAKFOLDER -type f -mtime +$RETENTION -exec rm {} \;
===== Copie sur partage SMB, sans écrasement =====
Utilisé pour copier des archives de sauvegarde d'un serveur vers un partage SMB. Pas d'écrasement de fichiers existants.
**Attention** : Ce script doit être lancé en root pour pouvoir effectuer le montage SMB.
Package nécessaire : ''cifs-utils''
apt install cifs-utils
Script :
#!/bin/bash
###### CONFIGURATION #####
#Dossier de ce script
DOSSIERSCRIPT=/home/user/baksystem
BAKFOLDER=$DOSSIERSCRIPT/bak
#Point de montage
SMBMOUNT=/media/websites-bak
#IP du serveur SMB
SMBIP=192.168.10.42
#Chemin du dossier sur SMB
SMBPATH=dossier/sur/smb
#Utilisateur SMB
SMBUSER=utilisateur
#Mot de passe SMB
SMBPASS=password
#Durée de rétention de backups en jours
RETENTION=5
#CHMOD pour le dossier d'arrivée
RIGHTS=775
####### FIN CONF #########
#CREATE MOUNT POINT
mkdir -p $SMBMOUNT
#MOUNT
mount -t cifs //$SMBIP/$SMBPATH -o username=$SMBUSER,password=$SMBPASS $SMBMOUNT
sleep 3
#COPY WITH SKIP
cp -r --no-clobber $BAKFOLDER/* $SMBMOUNT
chmod -R $RIGHTS $SMBMOUNT/*
#CLEAN OLD BACKUPS ON SMB
find $SMBMOUNT -type f -mtime +$RETENTION -exec rm {} \;
sleep 3
#UNMOUNT
umount $SMBMOUNT
sleep 3