如果我的MySQL服务器只接受本地主机的连接,没有密码的root用户是否构成安全漏洞?
我知道,普遍的看法是,root用户应该被一个密码保护,但是把它留空是什么意思呢? 我不担心除了我自己连接到MySQL的Linux用户,我不打算允许networking访问数据库。
编辑:是什么让MySQL不同于SQLite,这是不是密码保护? 我们在谈论什么样的部署场景? 如果攻击者获得对服务器的访问权,那么攻击者是否可以简单地重置密码呢?
请记住,我并不是想在这里提倡任何事情,我只是希望人们在这方面提供有教育的意见。
是的,我认为这是一个相当基本的安全漏洞。 让我通过一个故事来说明这一点。
很久很久以前,在我的年轻和不太懂行的日子里,我设置了一个服务器,用于内部testing我正在testing的各种零碎。 它坐在我的办公桌上,与任何networking都没有任何联系(这是很久以前的事情,所有事情都必须在networking上才能做到)。 当我不在办公室的时候,有人需要一台机器,拿走我的testing机器(我不介意,如果有必要的话,我正在使用机器的基础上可以把它拿走)。 由于它已经运行了所需的操作系统,所以只需将其插入networking,并安装所需的操作系统即可。
问题是,我会在这个盒子上设置各种testing账户,并且容易猜到密码(比如不断有用的test )。 即使在很久以前,也没有什么人可以比密码猜测账户更好。 他们find这台机器并不需要很长时间,猜测一个密码,并用它的邪恶的方式。
这个故事的主旨? 需求改变。 即使你现在不期望这样做,但是在机器的整个生命周期中,它的angular色将会发生变化 – 我期望的最可能的结果是其他用户可以访问机器(合法地或通过应用程序级别的利用)。 在必要的时候记得设置一个MySQL根密码的机会是渺茫的。
我的build议是花10秒时间来设置一个MySQL根密码,并将其放入~root/.my.cnf 。 一次性的时间成本远远低于妥协的成本乘以折中的可能性。
究竟。 除了自己连接到MySQL之外,你不关心Linux用户,而且你将永远不会去关心MySQL。
现在,认真的,你应该添加一个密码。 考虑一下,如果有人试图进入你的服务器,他们将不得不从服务器妥协一个用户密码,然后还破坏MySQL的根密码。 如果你没有MySQL密码,那么更容易破解它。
另外,没有程序是免费的。 试想一下,如果MySQL中的一个错误将每个连接都视为“本地”,那么就会遇到很大的问题。