Retour : Page Principale > Politique de sécurité
Chaque serveur doit effectuer une copie de ses fichiers durant la nuit et les placer dans un dossier Ă son nom dans /home/ sur le serveur de sauvegarde.
Par exemple : /home/sequoia/
Note : contrairement à la sauvegarde des ordinateurs de bureau, ce sont les serveurs qui poussent leurs données vers Adansonia et non ce dernier qui les tire.
Un dump de la base est réalisé puis zippé et stocké dans le dossier : /home/utilisateur/bases/
Ces dumps seront ensuite sauvegardés sur le serveur de sauvegarde via le programme de backup du serveur (voir ci-dessus).
La liste des bases à sauvegarder est située sur chaque serveur dans le fichier : /etc/cron.daily/mysqlbackup
Exemple sur Sequoia (2017-08-07) :
Le client SSH vérifie par défaut que l'hôte auquel il se connecte n'a pas changé d'IP depuis la dernière fois, afin d'éviter à un usurpateur de... euh... usurper des trucs.
L'ennui c'est que les serveurs se connectent à Adansonia sur le réseau Orange (>= 2017) à travers l'alias "tela-botanica.no-ip.org", précisément parce que l'IP externe de ce réseau change parfois.
Pour ne pas se faire téj par SSH lors d'un tel changement d'IP, on désactive la vérification de la correspondance clef-IP pour cet hôte, en ajoutant ceci à la fin du fichier de configuration du client SSH /etc/ssh/ssh_config, sur chaque serveur (Sequoia, Agathis) :
Sauvegarde des serveurs
Chaque serveur doit effectuer une copie de ses fichiers durant la nuit et les placer dans un dossier Ă son nom dans /home/ sur le serveur de sauvegarde.
Par exemple : /home/sequoia/
Note : contrairement à la sauvegarde des ordinateurs de bureau, ce sont les serveurs qui poussent leurs données vers Adansonia et non ce dernier qui les tire.
Sur le serveur de sauvegarde
- Un compte backup doit exister avec pour home : /var/backups
- Dans /var/backups créer un répertoire .ssh contenant un fichier authorized_keys qui contiendra les clefs publiques des comptes backup des serveurs à sauvegarder.
- Attention aux droits sur le .ssh : rwx r r (744) et au propriétaire backup:backup
Sur chaque serveur Ă sauvegarder
- Un compte backup doit exister avec pour home : /var/backups
- Dans /var/backups un répertoire .ssh doit contenir la clé privée, et la clé publique à copier dans le fichier authorized_keys sur le serveur de sauvegarde.
- Attention aux droits sur le .ssh : rwx r r (744) et au propriétaire backup:backup
- Le programme réalisant les backups est présent dans /etc/cron.daily/ndistbackup et est donc exécuté chaque jour. Ce script contient des appels à /usr/local/sbin/backup_dist nom_repertoire_a_sauvegarder ou à l'utilitaire borg (sur les nouveaux serveurs).
- Il faut l'adapter en fonction de la destination (voir ci-dessous).
Exemple de backup_dist sur les serveurs
Programme : /usr/local/sbin/backup_dist#!/bin/bash source=$1 destination=backup@tela-botanica.no-ip.org:/sauvegarde/sequoia/ rsync --stats --exclude *tmp* -v -e 'ssh -i /var/backups/.ssh/id_rsa' -R -a --delete $source $destination >> $2
Exemple de ndistbackup sur Sequoia
#!/bin/bash
date=`date +"%F"`
log="/tmp/sauve_distant_"$date".log"
debut=`date +"%c"`
echo "------------------------------------------------------------------------" >> $log
echo "Place disponible sur les disques de Sequoia :" >> $log
df -h >> $log
echo "------------------------------------------------------------------------" >> $log
echo "Debut sauvegarde distante sequoia : $debut" >> $log
echo "Sauvegarde /home/grosdur :" >> $log
/usr/local/sbin/backup_dist_grosdur.sh /home/grosdur $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /etc :" >> $log
/usr/local/sbin/backup_dist.sh /etc $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /usr/local/apache/conf :" >> $log
/usr/local/sbin/backup_dist.sh /usr/local/apache/conf $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/admin/www :" >> $log
/usr/local/sbin/backup_dist.sh /home/admin/www $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/admin/script :" >> $log
/usr/local/sbin/backup_dist.sh /home/admin/script $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/admin/save :" >> $log
/usr/local/sbin/backup_dist.sh /home/admin/save $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/telabotap :" >> $log
/usr/local/sbin/backup_dist.sh /home/telabotap $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/gentiana :" >> $log
/usr/local/sbin/backup_dist.sh /home/gentiana $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/telabotaa :" >> $log
/usr/local/sbin/backup_dist.sh /home/telabotaa $log
echo "------------------------------------------------------------------------" >> $log
echo "Sauvegarde /home/vpopmail :" >> $log
/usr/local/sbin/backup_dist.sh /home/vpopmail $log
echo "------------------------------------------------------------------------" >> $log
fin=`date +"%c"`
echo "Fin sauvegarde distante sequoia $fin" >> $log
echo "------------------------------------------------------------------------" >> $log
(
echo "From: Root SEQUOIA <root@sequoia.tela-botanica.net>";
echo "To: adresse-contact-developpeurs@tela-botanica.org";
echo "Subject: Sauvegarde rapport SEQUOIA du $date";
echo "MIME-Version: 1.0";
echo "Content-Type: text/html; charset=UTF-8";
echo "Content-Disposition: inline";
echo "<html>";
echo "<body>";
echo "<pre style="font: monospace">";
cat $log
echo "</pre>";
echo "</body>";
echo "</html>";
) | /usr/sbin/sendmail -t
rm -f $log
Sauvegarde des bases de données des serveurs
Par défaut chaque base de données portant le même nom que son utilisateur sera sauvegardée.Un dump de la base est réalisé puis zippé et stocké dans le dossier : /home/utilisateur/bases/
Ces dumps seront ensuite sauvegardés sur le serveur de sauvegarde via le programme de backup du serveur (voir ci-dessus).
La liste des bases à sauvegarder est située sur chaque serveur dans le fichier : /etc/cron.daily/mysqlbackup
Configuration du fichier /etc/cron.daily/mysqlbackup
Sur chaque ligne, indiquez la commande Ă lancer puis l'utilisateur suivi des bases Ă sauver.Exemple sur Sequoia (2017-08-07) :
#!/bin/bash /usr/local/sbin/backup_mysql gentiana gentiana gentiana_prod_eflore_v1_1_historique gentiana_prod_eflore_v1_1_principale /usr/local/sbin/backup_mysql telabotap telabotap tela_prod_bibliobota tela_prod_botanica tela_prod_eflore_v1_1_principale tela_prod_eflore_v1_1_historique tela_prod_spip_actu tela_prod_v4 tela_prod_wikini /usr/local/sbin/backup_mysql telabotaa telabotaa /usr/local/sbin/backup_mysql ftpE ftpE /usr/local/sbin/backup_mysql herbiera herbiera /usr/local/sbin/backup_mysql herbierm herbierm
Configuration de backup_mysql sur les serveurs
Programme : /usr/local/sbin/backup_mysql
#/bin/bash
# Sauvegarde base de donnee dans /home/utilisateur/bases sur 5 jours ...
# Mai 2004 David Delon Inspiration Faq ovh
# Parametres :
# $1 utilisateur
# $2 base (ou liste de bases)
# Le mot de passe de l'administrateur de base de donnee est present dans ce
# script en clair, c'est pas bien : faut chmoder en 700 ce truc, et surtout déplacer le mdp
# dans /root/.my.cnf plutĂ´t que de le mettre ici
user=$1
/bin/mkdir -p /home/$user/bases/tmp 2>/dev/null
cd /home/$user/bases;
shift
for base in $*
do
# On verifie que la base existe
/usr/bin/touch tmp/$base.sql
if [ -d /home/mysql/$base ] ; then
/usr/local/mysql/bin/mysqldump --add-drop-table -u root -pmotdepasse $base -f > tmp/$base.sql;
fi
done
/bin/tar zcf bases-$(/bin/date -I).tar.gz tmp/*.sql --remove-files
/usr/bin/find /home/$user/bases/bases*.gz -mtime +5 -exec /bin/rm -f {} \;
chown admin:users /home/$user/bases -R
Configuration de ssh_config sur les serveurs
Fichier : /etc/ssh/ssh_configLe client SSH vérifie par défaut que l'hôte auquel il se connecte n'a pas changé d'IP depuis la dernière fois, afin d'éviter à un usurpateur de... euh... usurper des trucs.
L'ennui c'est que les serveurs se connectent à Adansonia sur le réseau Orange (>= 2017) à travers l'alias "tela-botanica.no-ip.org", précisément parce que l'IP externe de ce réseau change parfois.
Pour ne pas se faire téj par SSH lors d'un tel changement d'IP, on désactive la vérification de la correspondance clef-IP pour cet hôte, en ajoutant ceci à la fin du fichier de configuration du client SSH /etc/ssh/ssh_config, sur chaque serveur (Sequoia, Agathis) :
Host tela-botanica.no-ip.org
CheckHostIP no