我编写了一个脚本来同步(从头开始重新创建)生产数据库和开发数据库,我想深入了解潜在的安全漏洞/问题,该脚本发布如下。出于安全目的,服务器已禁用远程访问,并使用公钥身份验证来管理 ssh 身份验证。
#!/bin/bash
#this is pretty seriously sketchy script...
current_time=`date +%s`
dump_file_name=/tmp/temporary_dump_$current_time.dump
echo SSHing and dumping to $dump_file_name
ssh -t [email protected] << EOT
pg_dump -U postgres -Fc dbName > $dump_file_name
PASSWORD #password in plain text
exit
EOT
echo SCPing the file locally to: `pwd`$dump_file_name
scp [email protected]:$dump_file_name $dump_file_name
echo Cleaning up the remote file
ssh -t [email protected] << EOT
rm $dump_file_name
exit
EOT
ssh -t development@development-testing << EOT
pg_restore --clean --dbname=dbName -Fc --username=postgres -W $dump_file_name
PASSWORD #password in plain text
exit
EOT
echo Cleaning up the local file
rm $dump_file_name
exit 0
答案1
乍一看,我发现了四个问题:
您正在以纯文本形式存储密码。
这是可怕的罪行,甚至是不可原谅的。还有其他方法可以解决这个问题,尽管每种方法都有各自的安全问题。
如果你绝对必须将其存储在这里以确保没有密码的任何人都无法读取该脚本...您正在将数据库转储以未加密的形式存储在云中。
你真的相信亚马逊的安全性吗?你不应该。您可以多次运行该脚本(并且同时运行 2 个)。
这不是“安全”问题,但它可能会滥用您的数据库。脚本应该锁定自身,这样它就不能运行多次。pg_dump gets
大型数据库上效率低下
这也不是“安全”问题,但请查看有关备份和恢复的 Postgres 文档了解更多信息。
还可以考虑询问备份在我们的 DBA 网站上。