这个当前的项目需要将数据库转储,encryption并推送到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
显然问题是这个脚本是攻击者需要提升的地狱。
任何想法,批评和build议这项任务将不胜感激。
首先,您可以在mysql中创build一个“用户”,该用户对所涉及的数据库拥有只读权限,这将减less潜在的破坏性破坏,攻击者可以访问备份脚本。
那么在压缩之前或之后,您可以在备份上使用gpg或pgpencryption,而且无需使用公钥就可以提供密码。
当然,你应该chmod 700 backupscript.sh以防止任何人读你的密码。
可能还有其他的方式来做无密码的数据库快照,但我没有意识到任何closures我的头顶。
gpg或者pgp看起来像是你提到的openssl方法的一个更好的select,因为它可以在没有密码的情况下完成。
#!/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
在脚本中使用密码是一个非常糟糕的主意,因为这可以在ps aux看到,并由每个系统用户读出。
我build议你看看mysqldump-secure 。 这是一个基于公私钥encryption的opensslencryption的shell脚本,比gpg更具性能。
你也可以使用RDS,它为你做这一切。