Этот текущий проект требует, чтобы БД была выгружена, зашифрована и отправлена на 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
Очевидно, проблема в том, что в этом скрипте все, что нужно атакующему, чтобы устроить ад.
Мы будем благодарны за любые мысли, критические замечания и предложения по этой задаче.
сначала вы можете создать «пользователя» в 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
Использование пароля внутри скрипта - действительно плохая идея, поскольку это можно увидеть в ps aux
и зачитывает каждый пользователь системы.
Я предлагаю вам изучить mysqldump-secure. Это сценарий оболочки, который openssl
шифрование, основанное на шифровании с открытым и закрытым ключом, намного более производительное, чем gpg.
Вы также можете просто использовать RDS, который сделает все это за вас.