1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| #!/bin/sh
#
# sauvegarde de la configuration de portier
#
# creation d'un string date
date_jour=`date +"%d%m%y"`
# creation du nom du fichier pour la liste des packages installes
packages_list="/tmp/pkg"$date_jour
# creation du nom du fichier pour la tarball des fichiers de configuration
save_etc="/tmp/etc"$date_jour".tar"
# creation du nom du fichier pour la tarball de /var/lib/squidguard
save_squid="/tmp/squid"$date_jour".tar"
# les repertoires a sauvegarder dans l'arborescence
rep_etc="/etc"
rep_squid="/var/lib/squidguard"
# liste des 3 fichiers importants
file_list="$packages_list $save_etc $save_squid "
# adresse IP du serveur samba
samba_ip="192.168.28.5"
# creation du nom du fichier d'erreurs
log_file="/var/log/save_conf_portier2smb/"$date_jour".log"
distant_script="/etc/cron.daily/purge_save_portier2smb"
#Suppression des fichiers crees durant le script
clean()
{
echo -e "#Suppressions eventuelles de $file_list" | tee -a $log_file
if [ "$1" ]
then
echo "#suite a $1" | tee -a $log_file
fi
for i in $file_list
do
if [ -f "$i" ]
then
echo "rm -v $i" | tee -a $log_file
rm -v $i >> $log_file 2>&1
fi
done
}
#gestion d'erreurs et logs
launch() {
cmd=$1
purpose=$2
redirection=$3
echo "#$purpose" | tee -a $log_file
if [ $redirection ]
then
#cas ou on a une redirection dans la commande
#on ne peut pas doublement rediriger
#donc on ne log pas les erreurs eventuelles
if [ $redirection = o ]
then
echo $cmd | tee -a $log_file
eval "$cmd"
else
#cas ou le 3eme argument est mal saisi
echo "ERREUR launch : verifier arguments" | tee -a $log_ file
clean "Erreur script"
exit
fi
else
#cas standard
echo $cmd | tee -a $log_file && eval "$cmd >> $log_file 2>&1"
if [ $? -ne 0 ]
then
echo "ERREUR $? : $err" | tee -a $log_file
clean "Erreur commande"
exit
fi
fi
}
#affichage d'entete du fichier de log presentant le script
entete() {
cat << EOF
------------------------------------------------------------------------
Sauvegarde de /etc, de la liste des packages et de /var/lib/squidguard
le $date_jour
------------------------------------------------------------------------
packages_list=$packages_list
save_etc=$save_etc
save_squid=$save_squid
rep_etc=$rep_etc
rep_squid=$rep_squid
samba_ip=$samba_ip
log_file=$log_file
EOF
}
# Debut du script
entete | tee $log_file
# Creation d'un fichier contenant la liste des packages installes
launch "dpkg --get-selections > $packages_list" "Creation d'un fichier avec la l iste des packages installes" "o"
# Creation d'un fichier comprenant tous les fichiers de configurations contenus dans /etc
launch "tar -cvf $save_etc $rep_etc" "Creation d'un tarball avec les fichiers de configurations /etc"
# Creation d'un fichier comprenant des fichiers pour squidguard
launch "tar -cvf $save_squid $rep_squid" "Creation d'un tarball avec la blacklis t pour squidguard"
# Changement de proprietaire
launch "chown -v sauvegarde.sauvegarde $save_etc $save_squid $packages_list" "Ch angement de proprietaire"
# On endosse l'identite de l'utilisateur sauvegarde le temps de la copie reseau
# il est l'utilisateur qui permet la copie reseau sans authentification
# http://lea-linux.org/reseau/secu/ssh.html
launch "sudo -u sauvegarde scp $packages_list $save_etc sauvegarde@$samba_ip:/ho me/sauvegarde" "Sauvegarde vers samba"
# Verification de l'existence du script de purge sur samba
launch "sudo -u sauvegarde rsh $samba_ip test -f $distant_script" "Verification existence script distant sur samba gerant l'effacement des sauvegardes des plus de 15 jours"
clean "deroulement normal"
# Suppression des logs de plus de 15 jours
launch "/usr/bin/find `dirname $log_file` -atime +15 -type f -name "??????.log" -exec /bin/rm -v {} \;" "Nettoyage des logs"
exit 0 |