Was ist die beste Vorgehensweise, um MySQL-Dump zu nehmen, zu verschlüsseln und dann auf s3 zu pushen?

8

Für dieses aktuelle Projekt muss die Datenbank gesichert, verschlüsselt und an s3 gesendet werden. Ich frage mich, was einige "Best Practices" für eine solche Aufgabe sein könnten. Ab sofort verwende ich eine ziemlich einfache Methode, möchte aber einige bessere Ideen haben, wenn es um Sicherheit geht. Hier ist der Anfang meines Skripts:

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

Offensichtlich ist das Problem, dass dieses Skript alles enthält, was ein Angreifer benötigt, um die Hölle zu erwecken.

Alle Gedanken, Kritiken und Vorschläge für diese Aufgabe werden geschätzt.

J. LaRosee
quelle

Antworten:

9

Zuerst können Sie in MySQL einen 'Benutzer' erstellen, der über schreibgeschützte Berechtigungen für die betreffende Datenbank verfügt, die potenzielle zerstörerische Schäden verringern würden, wenn ein Angreifer Zugriff auf Ihr Sicherungsskript erhält.

Dann können Sie Ihr Backup vor oder nach dem Komprimieren verwenden gpgoder pgpverschlüsseln. Dies können Sie tun, ohne ein Kennwort mit Ihrem öffentlichen Schlüssel angeben zu müssen.

und natürlich sollten Sie chmod 700 backupscript.shverhindern, dass jemand Ihr Passwort liest.

Es gibt vielleicht andere Möglichkeiten, passwortlose Datenbank-Snapshots zu erstellen, aber mir sind keine auf Anhieb bekannt.

gpgoder pgpscheint eine überlegene Alternative zu der von opensslIhnen erwähnten Methode zu sein, da dies ohne Passwort möglich ist.

#!/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
quelle
fügte ein kurzes Beispielskript für Sie hinzu
cpbills
Gut zu gehen, denke ich.
Shivam Bajpai
0

Die Verwendung eines Kennworts im Skript ist eine wirklich schlechte Idee, da dies ps auxvon jedem Systembenutzer gesehen und vorgelesen werden kann.

Ich würde Ihnen empfehlen, sich mit mysqldump-secure zu befassen . Dies ist ein Shell-Skript, das eine opensslVerschlüsselung basierend auf der Verschlüsselung mit öffentlich-privaten Schlüsseln durchführt und viel leistungsfähiger als gpg ist.

lockdoc
quelle
-1

Sie können auch einfach RDS verwenden, das all dies für Sie erledigt.

Adam Nelson
quelle