Какова лучшая практика для получения дампа MySQL, его шифрования, а затем отправки на s3?

8

Этот текущий проект требует, чтобы БД была сброшена, зашифрована и отправлена ​​на s3. Мне интересно, какие могут быть "лучшие практики" для такой задачи. На данный момент я использую довольно прямой метод, но хотел бы иметь несколько лучших идей в отношении безопасности. Вот начало моего сценария:

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

Очевидно, проблема в том, что этот скрипт все, что нужно злоумышленнику, чтобы поднять ад.

Любые мысли, критика и предложения для этой задачи будут оценены.

Дж. ЛаРози
источник

Ответы:

9

Во-первых, вы можете создать «пользователя» в mysql, который имеет разрешения только для чтения для рассматриваемой базы данных, что уменьшит потенциальный разрушительный ущерб, если злоумышленник получит доступ к вашему сценарию резервного копирования.

затем вы можете использовать gpgили pgpзашифровать свою резервную копию до или после сжатия, и вы можете сделать это, не предоставляя пароль, используя ваш открытый ключ.

и, конечно же, вы должны chmod 700 backupscript.shзапретить кому-либо читать ваш пароль.

Могут быть и другие способы сделать снимки базы данных без пароля, но я не знаю ни одного из них.

gpgили pgpкажется лучшей альтернативой упомянутому выше opensslметоду, потому что это можно сделать без пароля.

#!/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 your@email.com db.backup.sql.gz && rm -f db.backup.sql.gz
s3put backup/db.backup.sql.gz.gpg db.backup.sql.gz.gpg
cpbills
источник
добавил короткий пример сценария для вас
cpbills
Хорошо идти, я думаю.
Шивам Баджпай
0

Использование пароля внутри скрипта - очень плохая идея, так как это может увидеть ps auxи прочитать каждый пользователь системы.

Я бы посоветовал вам заглянуть в mysqldump-secure . Это сценарий оболочки, который выполняет opensslшифрование на основе шифрования с открытым и закрытым ключом и является намного более производительным, чем gpg.

lockdoc
источник
-1

Вы также можете просто использовать RDS, который делает все это для вас.

Адам Нельсон
источник