Quelle est la meilleure pratique pour prendre le vidage MySQL, le chiffrer puis le pousser vers s3?

8

Ce projet actuel nécessite que la base de données soit sauvegardée, chiffrée et poussée vers s3. Je me demande quelles pourraient être les "meilleures pratiques" pour une telle tâche. À partir de maintenant, j'utilise une méthode assez simple, mais j'aimerais avoir de meilleures idées en matière de sécurité. Voici le début de mon script:

mysqldump -u root --password="lepass" --all-databases --single-transaction > db.backup.sql
tar -c db.backup.sql | openssl des3 -salt --passphrase foopass > db.backup.tarfile
s3put backup/db.backup.tarfile db.backup.tarfile
# Let's pull it down again and untar it for kicks
s3get surgeryflow-backup/db/db.backup.tarfile db.backup.tarfile
cat db.backup.tarfile | openssl des3 -d -salt --passphrase foopass |tar -xvj

De toute évidence, le problème est que ce script contient tout ce dont un attaquant aurait besoin pour déclencher l'enfer.

Toutes les pensées, critiques et suggestions pour cette tâche seront appréciées.

J. LaRosee
la source

Réponses:

9

vous pouvez d'abord créer un «utilisateur» dans mysql qui dispose d'autorisations en lecture seule pour la base de données en question, ce qui réduirait les dommages destructeurs potentiels, si un attaquant pouvait accéder à votre script de sauvegarde.

vous pouvez alors utiliser gpgou pgpchiffrer votre sauvegarde avant ou après la compresser, et vous pouvez le faire sans avoir à fournir de mot de passe, en utilisant votre clé publique.

et bien sûr, vous devez chmod 700 backupscript.shempêcher quiconque de lire votre mot de passe.

il peut y avoir d'autres façons de faire des instantanés de base de données sans mot de passe, mais je n'en connais pas du tout.

gpgou pgpsemble être une alternative supérieure à la opensslméthode que vous avez mentionnée, car elle peut être effectuée sans mot de passe.

#!/bin/sh
touch db.backup.sql.gz
chmod 600 db.backup.sql.gz
mysqldump -u nonprivuser --password="pass" --all-databases --single-transaction | gzip > db.backup.sql.gz
gpg -e -r [email protected] db.backup.sql.gz && rm -f db.backup.sql.gz
s3put backup/db.backup.sql.gz.gpg db.backup.sql.gz.gpg
cpbills
la source
a ajouté un court exemple de script pour vous
cpbills
Bon pour aller je pense.
Shivam Bajpai
0

L'utilisation d'un mot de passe dans le script est une très mauvaise idée car cela peut être vu ps auxet lu par tous les utilisateurs du système.

Je vous suggère de regarder dans mysqldump-secure . Il s'agit d'un script shell qui effectue le opensslchiffrement basé sur le chiffrement par clé publique-privée et est beaucoup plus performant que gpg.

lockdoc
la source
-1

Vous pouvez également simplement utiliser RDS qui fait tout cela pour vous.

Adam Nelson
la source