我有一个在AWS上托pipe的networking服务器,安全组允许从所有IP地址到TCP端口22(ssh)和443(https)的访问。 ssh访问需要用户拥有我的私钥。
该服务器上的MySQL数据库上的root用户是否有密码? 如果是这样,为什么? login到数据库的唯一方法是通过ssh进入机器,如果黑客可以做到这一点,那么他们可以通过检查.myd文件轻松查看数据。
然而,我所遇到的普遍看法似乎是主张限制对数据库的根访问。
更新如果我的数据库与Web服务器不在同一台机器上,并且数据库只能通过Web服务器在MySQL端口上访问? 是否仍然build议有一个root密码呢?
是的,你应该使用密码。 为什么? 由于多层安全性比单层安全性更好,被称为“围墙花园”方法。 如果有人在墙上晃来晃去,你会希望你有多层的安全措施来保护他们。
你为什么不想设置密码? 密码不方便,但不便之处不大。 您可以考虑将密码放入〜root / .my.cnf文件,并确保文件权限非常严格。 例如:
[client] password=hackme123##
错误发生。 https和ssh都是相当安全的,但存在漏洞可能允许某人窃取您的https会话或从您的https会话中嗅探数据。
有些用户使用未encryption的ssh密钥 – 也就是创build时没有密码的SSH密钥。 如果黑客窃取了你的私钥,他们可以使用密钥login到你的数据库主机(因为不需要密码),然后login到数据库本身。
https只与在其中运行的Web应用程序一样安全。 Web应用程序由于糟糕的编码而意外地允许命令行访问,这并不是闻所未闻的。
如果有人攻击了您的Web应用程序,他们可以以root身份login到数据库,并删除所有数据库,在宝贵的CMS中插入色情和恶意软件站点的链接,创build自己的后门帐户等。
其实这不是唯一的方法进入。你的networking应用程序是完全安全的吗? (正确的答案总是“不”)所以是的,你确实有一个可以让某人进入的渠道,这是你正在运行的实际的networking服务。
如果有人进来,默认情况下他们不能看.myd文件。 你必须有一个root shell漏洞才能直接访问这些文件。 如果有人以某种方式“进入”未授权的帐户(例如您的Web服务器用户),那么MySQL根密码是阻止他们完全泄露或破坏您的数据的唯一障碍。
是的,您应该在MySQL数据库上设置root密码,然后将其保存在安全可恢复的第三方托pipe设施中。
安全没有“核对清单”,安全是一个过程和思维方式,但有一些核心原则,其中之一是深入防御:
深度防御 – 永远不要把你的鸡蛋放在一个篮子里。
身份validation – 密码是“您所知道的”身份validation令牌。 问题:每个人都知道一个默认密码(在这种情况下是空白密码)。 因此,您不再拥有数据库的身份validation机制。
总结:设置密码“花费”你很less,使得攻击者的工作变得更加困难。 这是一个很好的购买。