获取 MySQL 转储、加密然后推送到 s3 的最佳做法是什么?

获取 MySQL 转储、加密然后推送到 s3 的最佳做法是什么?

当前项目要求转储、加密数据库并将其推送到 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

显然问题在于这个脚本提供了攻击者制造麻烦所需的一切。

对于这项任务的任何想法、批评和建议都将受到赞赏。

答案1

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

然后您可以在压缩备份之前或之后使用gpgpgp加密它,并且您可以使用公钥来执行此操作而无需提供密码。

当然,您应该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 [email protected] db.backup.sql.gz && rm -f db.backup.sql.gz
s3put backup/db.backup.sql.gz.gpg db.backup.sql.gz.gpg

答案2

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

我建议你看看mysqldump-安全openssl。这是一个基于公私钥加密进行加密的shell脚本,性能比gpg好很多。

答案3

您也可以只使用 RDS,它会为您完成所有这些工作。

相关内容