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.
Code language: PHP (php)
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
Code language: PHP (php)
Il vaut mieux écrire:
mysqldump --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf --databases $db > $BACKUP_PATH/$date-$db.sql
Code language: PHP (php)
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'
Code language: JavaScript (javascript)
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.
Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.
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 !