J. *_*see 8 mysql encryption amazon-s3 amazon-ec2
当前项目要求转储、加密数据库并推送到 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
Run Code Online (Sandbox Code Playgroud)
显然,问题在于这个脚本的一切都是攻击者需要的。
对此任务的任何想法、批评和建议将不胜感激。
首先,您可以在 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
Run Code Online (Sandbox Code Playgroud)