采取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

显然,问题在于,此脚本可以使攻击者发泄地狱的一切。

对于此任务的任何想法,批评和建议将不胜感激。

Answers:


9

首先,如果攻击者获得了对备份脚本的访问权限,则可以在mysql中创建一个具有相关数据库只读权限的“用户”,以减少潜在的破坏性破坏。

那么您可以在压缩之前或之后对备份使用gpgpgp加密备份,而无需使用公用密钥提供密码即可进行备份。

当然,您应该chmod 700 backupscript.sh防止任何人读取您的密码。

可能还有其他方法可以进行无密码的数据库快照,但是我不知道有什么方法可以解决。

gpgpgp似乎是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 2010年

我认为很好。
Shivam Bajpai 2015年

0

在脚本内部使用密码是一个非常糟糕的主意,因为ps aux每个系统用户都可以看到并读出该密码。

我建议您研究mysqldump-secure。这是一个shell脚本,它openssl基于公钥-私钥加密进行加密,并且比gpg的性能要好得多。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.