MySql root 密码存储在 .my.cnf

信息安全 密码策略 mysql
2021-08-30 18:29:07

在启动项目之前,我重置了服务器的 mysql root 密码。托管项目的 colo 希望将服务器的根数据库密码以纯文本形式存储在 .my.cnf 文件中,权限设置为 400。我只是看不出这是一种好的安全做法,但他说是经常做的事情。

在 .my.cnf 文件中以纯文本形式存储根数据库密码是否安全?

2个回答

当然,任何以纯文本形式存储的密码都是一个坏主意,但文件的位置在 /etc/my.cnf 中,所以如果远程用户可以访问该文件,我认为还有更多的事情需要担心而不是你的mysql密码被盗了。另一方面,如果您不是唯一可以物理访问系统的人,那么您仍然可以避免其他人读取您的文件,因为您的文件权限是 400,假设没有人在系统上提升权限。我对在 my.cnf 文件中包含您的密码进行了一些研究,确实这实际上是一种非常普遍的做法。

顺便说一句,您需要确保您实际上并未编辑位于 /etc/my.cnf 中的文件,mysql 服务器用于启动该文件,因为如果您这样做,任何人都可以使用具有所有权限的服务器和所有数据库而无需密码。因此,改为在本地 /root 目录中创建一个文件,将其命名为 my.cnf 并确保只有 root 可以读取它(当然)

最简单的方法是使用 ~/.my.cnf 文件的客户端部分,并在该文件中添加凭据。

[client] 
user=root
password=somepassword

就像我说的,确保文件只能由 root 读取。

我很抱歉,但如果他们告诉我他们希望我以纯文本形式输入我的数据库密码,我会说“不”。现在我听说在运行 phpMyAdmin 的 cPanel 服务器上使用该文件来安装和卸载站点软件,我有点理解,仍然认为它可以做得更好。我从未将我的数据库密码放在 .my.cnf 中,这只是要求进行简单的 LFI 攻击。

在我看来,即使权限设置为 600,它也不安全。 chmod 600 .my.cnf

编辑:我考虑了更多,我可以看到这可能是您想要从非交互运行的脚本调用客户端的可接受方法,没有机会从键盘输入密码。在某些系统上,脚本的第一行被读取并(错误地)解释为您的密码。

但是坚决将该文件设置为600。无论如何,我仍然觉得它的做法很糟糕。