我应该设置 mysql root 密码吗?

我应该设置 mysql root 密码吗?

我在 AWS 上托管一个网络服务器,其安全组允许从所有 IP 地址访问 TCP 端口 22(ssh)和 443(https)。ssh 访问要求用户拥有我的私钥。

此服务器上 MySQL 数据库的 root 用户是否应该设置密码?如果需要,为什么?登录数据库的唯一方法是通过 ssh 进入计算机,如果黑客可以做到这一点,那么他们就可以通过检查 .myd 文件轻松查看数据。

然而,我所听到的常识似乎主张限制对数据库的根访问。

更新 如果我的数据库与 Web 服务器位于不同的机器上,并且数据库只能由 Web 服务器通过 mysql 端口访问,该怎么办?那么是否仍建议使用 root 密码?

答案1

是的,你应该使用密码。为什么?因为多层安全措施比单层安全措施更好,这被称为“围墙花园”方法。如果有人突破了那堵墙,你会希望自己有多层安全措施来阻止他们。

  1. 为什么你不想设置密码?密码很不方便,但这种不便并不大。你可以考虑将密码放入 ~root/.my.cnf 并确保文件权限非常严格。例如:

    [client]
    password=hackme123##
    
  2. 漏洞难免。https 和 ssh 都相当安全,但存在漏洞,可能会让某人窃取您的 https 会话或嗅探您的 https 会话中的数据。

  3. 有些用户使用未加密的 SSH 密钥,即未使用密码创建的 SSH 密钥。如果黑客能够窃取您的私钥,他们就可以使用该密钥登录您的数据库主机(因为不需要密码),然后登录数据库本身。

  4. https 的安全性取决于在其中运行的 Web 应用程序。Web 应用程序由于编码不当而意外允许命令行访问的情况并不少见。

  5. 如果有人入侵了您的 Web 应用程序,他们可以以 root 身份登录数据库并删除所有数据库、在您宝贵的 CMS 中插入色情和恶意软件网站的链接、创建供自己使用的后门帐户等。

答案2

实际上,这并不是唯一的入侵方式。您的 Web 应用程序是否绝对安全?(正确答案始终是“否”)因此,是的,您确实有一个可供他人入侵的渠道,那就是您正在运行的实际 Web 服务。

如果有人进入,默认情况下他们无法查看 .myd 文件。您必须拥有 root shell 漏洞才能直接访问这些文件。如果有人以某种方式使用非特权帐户“进入”系统(例如您的 Web 服务器用户),那么 MySQL root 密码是阻止他们完全窃取或破坏您的数据的唯一屏障。

答案3

是的,您应该在 MySQL 数据库上设置 root 密码,然后将其保存在安全且可恢复的托管设施中。

安全没有“清单”,安全是一个过程和一种思维方式,但有几个核心原则,其中之一就是纵深防御:

纵深防御- 不要把鸡蛋放在一个篮子里。

身份验证 - 密码是“您所知道的”身份验证令牌。问题:默认密码(在本例中为空白密码)是每个人都知道的。因此,您不再拥有数据库的身份验证机制。

总结:设置密码“成本”很小,却能大大增加攻击者的攻击难度。这是个不错的选择。

相关内容