【问题标题】:Is mysqldump securemysqldump 安全吗
【发布时间】:2013-10-09 04:46:44
【问题描述】:

我想开始这个关于 mysqldump 安全性的讨论。 关于安全性,我不是在谈论以任何方式显示密码安全性或密码安全性的 Cron 任务,而是在谈论命令本身的安全性。

在我的特殊情况下,我已经设置了命令以在我的家庭服务器上使用 mysqldump 执行 cron 作业,并在我的 VPS 上备份我的网站数据库,我使用 1&1。

所以基本上情况是我的家用 PC 正在远程备份端口 3306 上的 MySQL 数据库。 这工作正常,但我在睡觉时开始做噩梦,并想也许有人可以在我备份时监听端口 3306 并获取我的所有数据(使用 mysqldump)我的意思是我所理解的 mysql 不在 SSL 下使用端口 3306所以任何人都可能从数据库中获取备份副本?

我的意思是有可能出现这种情况:

  1. 我的家用电脑启动 mysqldump 任务
  2. 我在 1&1 上的 VPS 远程准备 sql 转储
  3. 我的家用电脑在本地接收来自远程服务器的转储

在第 2 点和第 3 点之间,有人可能会得到我的文件的副本吗?

提前感谢您的回答 马科斯

【问题讨论】:

    标签: mysql security ssh mysqldump


    【解决方案1】:

    您不应将 VPS 主机上的端口 3306 暴露给公共互联网。 MySQL 的未加密端口不安全。

    如果您在 VPS 主机上运行 mysqldump,并且只将生成的转储文件传输到您的 PC,那么您可以安全地执行此操作。

    如果你可以 ssh 到你的 VPS,你应该也可以使用 scp。这使您能够安全地传输文件。

    这是一篇关于将 scp 与 1&1 结合使用的常见问题解答文章。我通过谷歌搜索“1&1 scp”找到了这个:

    http://faq.1and1.co.uk/server/root_server/linux_recovery/9.html

    如果您需要在家用 PC 上运行 mysqldump 并远程连接到 VPS 主机上的 MySQL,您有以下选择:

    • 在带有 SSL 连接选项的 PC 上运行 mysqldump。
    • 打开一个端口转发 ssh 隧道,然后在连接到转发端口的 PC 上运行 mysqldump。
    • 运行 ssh 在 VPS 上调用 mysqldump,然后捕获输出。请参阅此问题的已接受答案中的示例:https://serverfault.com/questions/36467/temporary-ssh-tunnel-for-backup-purposes
    • 创建一个 VPN 并做任何你想做的事,因为它都是加密的。

    10 月 11 日你的 cmet:

    我需要从家用电脑执行命令远程备份VPS。

    我想...改为直接接收备份文件,因此在 VPS 中应该什么都不保存。

    好的,在不暴露端口 3306 的情况下,您可以这样做:

    $ ssh marcos@192.168.1.3 'mysqldump ...options.. | gzip -c' > ~/dump.sql.gz
    

    注意该命令中引号的位置。您正在 VPS 上执行命令:mysqldump ...options.. | gzip -c。该命令的标准输出是转储的 gzip 压缩流。该流通过 ssh 返回,然后> 将输出本地保存在 PC 的 shell 中。


    关于 10/13 的评论:

    现在我在服务器上存储了一个打开的文本文件,其中包含访问 MySQL 服务器的凭据。我的意思是,如果有人闯入服务器,它不仅会损坏服务器内容,还会损坏和窃取 MySQL 数据库和信息。我说的对吗?

    如果您使用 MySQL 5.6,您可以使用新功能以半加密方式存储连接凭据。见http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html

    如果你使用 MySQL 5.5 或更早版本,那么你是对的,你应该小心限制my.cnf 的文件权限。模式 600 应该足够了(即它不是可执行文件)。

    但如果有人闯入您的服务器,他们可能已经以 root 访问权限闯入,在这种情况下,没有什么可以限制他们读取的文件。

    如果有人获得 root 访问权限,MySQL 没有足够的安全性来阻止访问,因此您可以使用其他方法来防止入侵。防火墙等

    【讨论】:

    • 为了完整性:MySQL 支持 SSL 加密连接。 You can find the docs here.
    • 其次,请勿在任何情况下都暴露端口 3306。此外,如果 MySQL 本身存在安全漏洞,则使用 SSL 也没关系。 SSH 是相当防弹的,只要你打了补丁,但我不会以同样的方式信任 MySQL。开放端口只会招致攻击或 DDOS 尝试。
    • 谢谢tadman,在浏览了很多教程后,我想出了组装这个命令:[mysqldump --defaults-extra-file=my.cnf test_dump | gzip -c | ssh marcos@192.168.1.3 'cat > ~/dump.sql.gz'] 问题在于将 sql 备份保存在 VPS 上,而不是通过 SSH 流式传输。所以在本地我什么都没有收到,但是如果我登录服务器,我会在主目录中看到备份。我想避免这种情况,而是直接接收备份文件,因此在 VPS 中应该什么都不保存。那可能吗?我犯了一些错误吗?谢谢马科斯
    • tadman,也是一个问题,你之前写过不要暴露端口 3306,但正如我在底部评论的那样,如果我阻止端口 3306,你认为我的网站仍然有效吗?我的意思是,如果我在端口 3306 上禁用使用 iptables 的连接,我的网站将如何将服务器识别为 MySQL?谢谢马科斯。
    • @MarcosLamba,不要将 3306 暴露给整个互联网,但是可以配置 iptables 以允许应用程序服务器连接到端口 3306(或 MySQL 侦听的任何端口)。
    【解决方案2】:

    是的,这是可能的,但你没有提到你将如何获取这些数据。如果您使用 ssh/scp(使用专用用户进行转储、IP 过滤、基于私钥和密钥密码的身份验证)是可以接受的,并且在我看来是安全的。另一种更安全的快速方法是设置 VPN。任何其他都是个人使用的偏执水平。

    【讨论】:

    • 感谢比尔和其他回答此讨论的人,我已阅读提供的链接。所以基本上根据我的理解,我的方法是错误的并且风险很大。我有几个问题让我们从第一个开始。如果我禁用端口 3306,我认为我的网页将停止工作,因为将在 VPS 上查找数据库并且没有活动端口它不会运行。我错了吗?
    • 第二个问题改端口安全吗?我知道默默无闻不是安全,但它会改变什么?提前致谢
    • 留在 3306 上的 mysql 绑定到 127.0.0.1 (localhost)。利用 iptables 并将任何外部流量丢弃到 3306。添加专用用户(假设是备份程序),添加到 cron 作业以定期转储数据库(或您想要备份的任何其他数据)并将其保存在“备份程序”中“家庭目录。现在在您的本地 PC(或您想要存储备份的任何其他机器)上将带有“scp”的 cron 作业添加到您的 VPS 作为备份程序以获取备份。您也可以在 VPS 上添加规则以仅接受来自您的机器的登录。
    • 嗨 kAlmAcetA,感谢您的回答,这是我一开始采用的方法,但我改变了,因为我认为直接在 VPS 中而不是从我的本地数据库中 mysqldump 也是一个潜在的安全问题服务器在 SSH 中检索压缩档案,我的意思是我将档案留在 VPS 上,如果攻击者应该登录 VPS,它将立即拥有 Mysql 的所有档案,而无需担心暴力破解 Mysql 密码。相反,我正在寻找一种更安全的方法来从 ssh 控制台检索 mysqldump,我的意思是从我的本地电脑 ssh VPS,执行 mysqldump
    • 在浏览了许多教程后,我想出了组装这个命令:[mysqldump --defaults-extra-file=my.cnf test_dump | gzip -c | ssh marcos@192.168.1.3 'cat > ~/dump.sql.gz'] 问题在于将 sql 备份保存在 VPS 上,而不是通过 SSH 流式传输。所以在本地我什么都没有收到,但是如果我登录服务器,我会在主目录中看到备份。我想避免这种情况,而是直接接收备份文件,因此在 VPS 中应该什么都不保存。那可能吗?我犯了一些错误吗?谢谢马科斯
    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2010-11-20
    • 2019-12-07
    • 2016-03-06
    • 2010-09-26
    相关资源
    最近更新 更多