J’ai récemment écrit un petit script bash qui me permet de sauvegarder rapidement toutes les bases de données d’un serveur. Le script est lancé par une tâche cron automatiquement, tous les jours.
Si l’on passe l’utilisateur et le mot de passe SQL dans la requête, avec mysql
ou mysqldump
, vous obtiendrez très certainement le message d’avertissement suivant:
Warning: Using a password on the command line interface can be insecure.
Et pour cause : cela veut dire que n’importe qui ayant accès au serveur pourra voir, dans les logs ou avec un simple ps, vos informations de connexion à vos bases de données. Ce n’est pas ce qui se fait de mieux en matière de sécurité !
Une solution est de passer en argument un fichier qui contiendra vos données de connexion à la base de données.
Donc, au lieu d’écrire :
mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/$date-$db.sql
Il vaut mieux écrire:
mysqldump --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf --databases $db > $BACKUP_PATH/$date-$db.sql
Note: L’argument --defaults-extra-file
doit venir en premier, sinon il ne sera pas interprété.
Le fichier /etc/mysql/mysql-backup-script.cnf
contient les identifiants de votre utilisateur SQL qui aura les droits sur chacune des bases de données à sauvegarder. Voici à quoi il ressemble:
[client]
user = 'backup'
password = 'GIGANTIC_SECURE_PASSWORD'
Par sécurité, on restreint les droits d’accès au fichier pour qu’il ne soit pas lisible par tout le monde:
chmod 400 /etc/mysql/mysql-backup-script.cnf
Il ne vous reste qu’à créer votre cron avec votre nouvelle commande, sans montrer les identifiants SQL en clair.
Vous souhaitez réaliser un nouveau projet WordPress ou WooCommerce, ajouter de nouvelles fonctionnalités, ou améliorer les performances de votre site? Faîtes appel à mon expertise.
Ne pas oublier de faire un chmod 400 sur ton fichier /etc/mysql/mysql-backup-script.cnf sinon n’importe qui pourra y lire le fameux password.
Perso, je place dans le home de l’utilisateur qui va executer le script un fichier .my.cnf, ce fichier est automatiquement lu par le client mysql, ainsi pas besoin de –defaults-extra-file.
Le chmod 400 s’applique également sur ce fichier .my.cnf.
Merci AnatomicJC , je viens de rajouter le chmod 400 dans l’article.
C’est une bonne idée le .my.cnf dans le home de l’utilisateur. J’y penserai lorsque je changerai le mode de backup !