Combien de fois cette phrase a retenti dans vos esprits imprudents ? dans mon esprit imprudent à moi, plein.
Alors, comme je viens de toper un kimloli sur les conseils de mon bouquetin favori, je me suis dit que, pour une fois, j’y collerais bien une procedure de backup propre.
J’ai déjà parlé et probablement pasté ici même un petit script gentil qui, grâce au couple rsync / rsyncd, permettait de rendre cette opération relativement rapide assez simplement. J’y ai apporté quelques modifs et enrobé le tout d’un chouillat de sécu. Un chouillat j’ai dit, trépigne pas spoty.
Le kimloli est un FreeBSD 6.2, j’y installe rsync via les ports.
Le backup est fait sur une bête workstation Ubuntu, chez moi. J’y installe rsync via apt-get.
Voici les differentes étapes que j’ai suivi pour préparer mon rsyncd sur ma machine à backuper :
Activation du rsync dans inetd :
# grep rsync /etc/inetd.conf
# backup
rsync stream tcp nowait root /usr/local/bin/rsync rsyncd --daemon --config=/usr/local/etc/rsyncd.conf
Interdiction d’y accéder d’ailleurs que de ma ligne DSL qui dispose d’une IP fixe :
ALL : localhost ip.publique.dsl : allow
rsync : ALL : deny
Configuration du demon rsync
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
uid = root
gid = wheel
use chroot = no
max connections = 1
syslog facility = local5
[homes]
path = /home
comment = Homes
# seul utilisateur autorisé
auth users = bkp
secrets file = /usr/local/etc/rsyncd.secrets
hosts allow = ip.publique.dsl
[usr_local]
path = /usr/local
comment = usr local directories
auth users = bkp
secrets file = /usr/local/etc/rsyncd.secrets
hosts allow = ip.publique.dsl
Créaction du très simple fichier d’authentification /usr/local/etc/rsyncd.secrets :
bkp:mangemoitoute
Activation de inetd au démarrage :
# grep inetd /etc/rc.conf
inetd_enable="YES"
Et on démarre tout ce petit monde :
# /etc/rc.d/inetd start
La conf serveur est prête. Coté client, je vous propose ce script :
#!/bin/sh
# Simple rsync client script
# if "console" is specified, verbose output and --delete are implied
# iMil
RSYNC="/usr/bin/rsync"
usage()
{
echo "usage: $0 "
exit 1
}
if [ $# != 4 ]
then
usage
fi
HOST=$2
FROM=$3
TO=$4
EXCLUDE="/home/bkp/rsync.exclude"
SECRET="/home/bkp/rsync.secret"
USER="bkp"
OPTIONS="--compress -a --recursive --times --perms --links"
if [ -f ${EXCLUDE} ]; then
OPTIONS="${OPTIONS} --exclude-from=${EXCLUDE}"
fi
if [ -f ${SECRET} ]; then
OPTIONS="${OPTIONS} --password-file=${SECRET}"
fi
case $1 in
console)
CONSOLE="--verbose --progress --stats --delete"
;;
cron)
CONSOLE=""
;;
*)
usage
;;
esac
CMD="${RSYNC} ${CONSOLE} ${OPTIONS} ${USER}@${HOST}::${FROM} ${TO}/${FROM}"
echo running: ${CMD}
eval ${CMD}
On crée le fichier /home/bkp/rsync.secret qui contiendra UNIQUEMENT le mot de passe précisé dans le fichier secret du serveur, puis /home/bkp/rsync.exclude qui est composé de la liste des fichiers et repertoires à exclude, par exemple :
/home/ftp
/home/mirror
*access_log
*error_log
On teste en console :
bin/bkp.sh console kimloli212 usr_local /home/bkp/kimloli
Et si tout va bien, on cron :
0 2 * * * /home/bkp/bin/bkp.sh cron kimloli212 homes /home/bkp/kimloli
Joyeux backups
Recent Comments