Jump to content

[Gratuit] Sauvegarde Compression Cryptage et Envoi par eMail de Votre Base de Données


Recommended Posts

Bonjour,

 

Préambule :

 

Le meilleur moyen de perdre du temps, de l'argent, et peut-être même des clients lorsque l'on est à la tête d'une agence, c'est de ne PAS faire de sauvegardes régulières (disons, au moins une fois par heure) de ses bases de données, élément vital de toute entreprise de eCommerce.

 

Mise en Garde :

 

Ce script est destiné à un professionnel, ou a minima, à une personne ayant de bonnes connaissances dans le fonctionnement d'un système Unix / Linux.

 

Coût :

 

Gratuit.

 

Redistribution :

 

Libre, tant que vous laissez l'adresse URL du créateur dans l'entête du script.

 

Garanties :

 

Aucune.

 

Ce script est SGDG (Sans Garantie Du Gouvernement). J'ai développé cette solution pour mes besoins personnels et peut être facilement adaptée à votre particulier.

 

/!\ Veuillez s'il vous plaît envoyer ce script à votre hébergeur afin qu'il vous donne son feu vert AVANT son installation et AVANT sa première utilisation /!\

 

En tant que professionel, ou personne compétente, vous comprenez le fonctionnement de ce script, vous êtes, et restez, le seul responsable de l'utilisation de ce script.

 

L'auteur ne pourra en aucun cas être tenu responsable des conséquences résultant de l'utilisation de ce script, ou des conseils entourant celui-ci.

 

Aide :

 

Aucune.

 

Je vous offre ce script et ces conseils gratuitement, sans aucune contrepartie, cependant, je n'assure AUCUNE aide, ni aujourd'hui, ni demain.

 

Configuration requise :

 

- Serveur fonctionnant sous Unix ou Linux

 

- Toute base de données MySQL (faisant tourner PrestaShop ou d'autres scripts, comme par exemple WordPress, Joomla, etc...) :

 

http://fr.wikipedia.org/wiki/MySQL

 

- Capacité de lancer des scripts SH (shell scripts) :

 

http://en.wikipedia....ki/Shell_script

 

- mysqldump (sauvegarde de la base de données) :

 

http://dev.mysql.com.../mysqldump.html

 

- gzip (compression de la base de données) :

 

http://fr.wikipedia.org/wiki/Gzip

 

- openssl aes-256 ("Standard de Chiffrement Avancé" en français, pour le cryptage de niveau militaire de votre base de données AVANT son envoi par email) :

 

http://fr.wikipedia.org/wiki/Openssl

 

http://fr.wikipedia.org/wiki/AES-256

 

- mutt (fonction d'envoi par mail sur systèmes Unix) :

 

http://fr.wikipedia.org/wiki/Mutt

 

- Crontab, ou Cron ou encore Cron job (fonction externe au script qui lancera le script de sauvegarde à un rythme régulier [au moins une fois par heure]. Cette fonction ESSENTIELLE n'est PAS expliquée ici. Veuillez demander de l'aide à votre hébergeur pour toute question concernant la mise en place et le fonctionnement de votre crontab) :

 

http://fr.wikipedia.org/wiki/Cron

 

- Boîte mail de TRÈS grande capacité (plusieurs Méga Octets en pièce jointe par email PLUS plusieurs Giga Octets en capacité de stockage) :

 

http://en.wikipedia....bmail_providers

 

*****

 

1 - Créez un répertoire qui hébergera votre script sh. Chmod => 755

 

2 - Créez un fichier ".htaccess" qui protègera le répertoire de votre script sh et à enregister à l'intérieur de votre répertoire hébergeant votre script SH :

 

<FilesMatch "\.(sh|php|ht|key|gz|gpg)$">
Order allow,deny
</FilesMatch>
IndexIgnore *
Deny From all

 

3 - Créez un répertoire qui hébergera les sauvegardes de votre base de données pendant X jours. Le script assurera leur destruction automatique après X jours, délai laissé à votre choix, afin de . Chmod => 755

 

4 - Créez un fichier ".htaccess" qui protègera le répertoire de vos sauvegardes et à enregister à l'intérieur de votre répertoire recueillant vos sauvegardes :

 

<FilesMatch "\.(sh|php|ht|key|gz|gpg)$">
Order allow,deny
</FilesMatch>
IndexIgnore *
Deny From all

 

5 - Créez un mot de passe pour le cryptage de votre base de données AVANT son envoi par email

 

/!\ Choisissez un mot de passe solide /!\

 

Aidez vous de ces 2 sites pour la création et le test de votre mot de passe, et surtout, n'utilisez PAS de point-virgule ";" dedans :

 

http://www.dracon.bi...d_generator.php

 

http://www.passwordmeter.com/

 

6 - Créez et personnalisez votre script "NomDuSite.sh". Chmod => 755 :

 

#!/bin/sh
#
# Créé par Mao Sait Tout - 2012 :
#
# http://www.prestashop.com/forums/user/291541-mao-sait-tout/
#

# URL de votre serveur de base de données :

SERVERDB='localhost'

# Nom d'utilisateur de la base de données :

USERDB='FGH_18'

# Mot de passe de la base de données :

PASSDB='QBh4zN6L'

# Nom de la base de données :

DBNAME='Coop_gg'

#####

# Chemin complet du répertoire de sauvegarde :

WAYTO='/usr/home/public_html/cron/DB/GG'

# Mot de passe pour crypter la base de données AVANT son envoi par e-mail /!\ ne PAS utiliser de point-virgule ";" dedans /!\ :

OPENPASS='MotDePasse'

# Adresse e-mail où sera envoyer votre base de données sauvegardée, zippée et cryptée :

EMAIL='[email protected]'

# Objet du mail (la date et l'heure sont ajoutées automatiquement à la fin de ce sujet) :

SUBJECT='NomDeSite - Sauvegarde du'

# Supprimer les sauvegardes de bases de données zippées, conservées sur votre serveur et âgées de plus de X jours :

DAYS='7'

####################################
#
# Ne RIEN Changer en dessous de ces lignes
#
####################################

DATE=`date +\%Y-\%m-\%d-at-\%H:\%M:\%S`

/usr/local/bin/mysqldump -h$SERVERDB -u$USERDB -p$PASSDB $DBNAME | gzip -9 > $WAYTO/$DBNAME-$DATE.sql.gz

openssl enc -aes-256-cbc -salt -a -in $WAYTO/$DBNAME-$DATE.sql.gz -out $WAYTO/$DBNAME-$DATE.sql.gz.ENC -pass pass:$OPENPASS

/usr/local/bin/mutt -s "$SUBJECT $DATE" -a $WAYTO/$DBNAME-$DATE.sql.gz.ENC -- $EMAIL > /dev/null

rm $WAYTO/$DBNAME-$DATE.sql.gz.ENC

find $WAYTO/$DBNAME-*.sql.gz -mtime +$DAYS -exec rm {} \;

 

7 - Créez une boîte Mails de GRANDE capacité HORS de votre hébergeur (en prévention d'une catastrophe majeur de votre hébergeur) :

 

http://en.wikipedia....bmail_providers

 

- Créez un filtre "spam" qui recueillera vos mails de sauvegardes, et...

 

8 - Créez une règle "Détruire les mails de spam vieux de X jours" afin de toujours avoir de la place pour recueillir vos dernières sauvegardes.

 

9 - Créez votre crontab (demandez de l'aide à votre hébergeur le cas échéant)

 

10 - Recommencez pour chacune de vos bases de données (Un répertoire de crontab peut accueillir plusieurs scripts. Un répertoire de sauvegardes peut accueillir plusieurs sauvegardes, cependant, je vous conseille de créer un sous-répertoire par base de données, afin d'avoir un classement efficace. Une adresse email peut recevoir plusieurs sauvegardes).

 

11 - /!\ Faites attention à la destruction automatique des boîtes emails non consultées régulièrement /!\

Edited by Mao Sait Tout (see edit history)
  • Like 2
Link to comment
Share on other sites

Bonjour Paul,

 

Merci de vos encouragements.

 

Voilà comment fonctionne ce script :

 

*****

 

Etape 1

 

DATE=`date +\%Y-\%m-\%d-at-\%H:\%M:\%S`

 

1 - La date et l'heure du serveur sont enregistrés dans la variable "Date".

 

*****

 

Etape 2

 

/usr/local/bin/mysqldump -h$SERVERDB -u$USERDB -p$PASSDB $DBNAME | gzip -9 > $WAYTO/$DBNAME-$DATE.sql.gz

 

2 - A : /usr/local/bin/mysqldump -h$SERVERDB -u$USERDB -p$PASSDB $DBNAME

 

La base de données est sauvegardée

 

2 - B : gzip -9

 

Cette sauvegarde est zippée avec la compression maximum (-9)

 

2 - C : $WAYTO/$DBNAME-$DATE.sql.gz

 

Ensuite, le fichier est sauvegardé dans le répertoire "WAYTO" de votre choix, que vous aurez défini précédemment, et il porte le nom de votre base de données "DBNAME" suivi de la date "DATE" pour un classement efficace.

 

*****

 

Etape 3

 

openssl enc -aes-256-cbc -salt -a -in $WAYTO/$DBNAME-$DATE.sql.gz -out $WAYTO/$DBNAME-$DATE.sql.gz.ENC -pass pass:$OPENPASS

 

3 - A : openssl enc -aes-256

 

Le fichier zippé à l'étape 2 de la base de données est crypté avec AES-256, chiffrement de niveau militaire.

 

3 - B : $WAYTO/$DBNAME-$DATE.sql.gz.ENC

 

Le fichier crypté est enregistré dans le même répertoire utilisé à l'étape 2 "WAYTO" avec le même nom et date qu'à l'étape 2, mais avec l'extension ".ENC" pour le différencier

 

3 - C : pass:$OPENPASS

 

Le chiffrement se fait à l'aide du mot de passe que vous aurez choisi précédement.

 

/!\ Utilisez un mot de passe solide /!\

 

Aidez vous de ces 2 sites pour la création et le test de votre mot de passe, et surtout, n'utilisez PAS de point-virgule ";" dedans :

 

http://www.dracon.bi...d_generator.php

 

http://www.passwordmeter.com/

 

*****

 

Etape 4

 

/usr/local/bin/mutt -s "$SUBJECT $DATE" -a $WAYTO/$DBNAME-$DATE.sql.gz.ENC -- $EMAIL > /dev/null

 

4 - A : Le fichier crypté est envoyé à l'aide de mutt sur votre adresse email.

 

4 - B : Le sujet de cet email est "SUBJECT" que vous aurez choisi précédement, suivi de la date "DATE" pour un classement efficace.

 

/!\ Il est crucial que votre fichier de sauvegarde soit crypté AVANT son envoi sur le net /!\

 

Imaginez qu'il voyage en clair. Il pourrait fort bien arriver entre les mains d'un destinataire mal intentionné...

 

Veuillez suivre les conseils présentés au point 3 - C

 

*****

 

Etape 5

 

rm $WAYTO/$DBNAME-$DATE.sql.gz.ENC

 

5 - Le fichier crypté qui vient d'être envoyé sur votre adresse email à l'étape 4, est détruit de votre serveur, afin de préservé l'espace disque.

 

*****

 

Etape 6

 

find $WAYTO/$DBNAME-*.sql.gz -mtime +$DAYS -exec rm {} \;

 

6 - Le fichier de sauvegarde zippé et créé à l'étape 2, et âgé de plus de X jours, délai que vous aurez choisi précédement dans la variable "DAYS", est effacé de votre serveur, afin de préserver l'espace disque selon vos besoins.

Edited by Mao Sait Tout (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

[...] certaines demandes d'utilisateurs qui ne souhaitent pas l'envoi par email [...]

 

Ne pas utiliser l'envoi par email est assez risqué :

 

En cas de crash du disque de votre serveur, TOUTES vos sauvegardes enregistrées sur ce disque sont perdues :wacko:

 

C'est pourquoi, en envoyant une copie de cette sauvegarde par email à chaque lancement de ce script, vous réduisez ce risque de perte totale.

 

D'autant plus, la base de données est cryptée AVANT son envoi par email, elle voyage donc en sécurité sur la toile.

Edited by Mao Sait Tout (see edit history)
Link to comment
Share on other sites

  • 4 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...