当前位置: 首页 > 科技观察

七步让你的MySQL服务器更安全

时间:2023-03-23 12:14:43 科技观察

陈军评论|不要太在意它。殊不知,没有数据库配置和安全测试,就无法充分验证应用程序的安全性。在这里,我将以最常见的数据库管理系统——MySQL为例,通过七个步骤向大家介绍如何对数据库服务器进行加固。1.使用SSH隧道代替远程连接默认情况下,MySQL服务运行在3306端口。安装MySQL时,您会注意到3306端口一直在监听所有连接。目前,由于MySQL端口是对外开放的,所以应该将MySQL服务设置为只监听本地地址模式。由于服务器通常运行在Linux的各种发行版上,下面我将选择一个Debian发行版进行演示。首先,为了使用SSH隧道而不是远程连接,您需要在/etc/mysql/my.cnf文件中从内到外关闭默认端口。在这个文件中,你需要打开一个名为[mysqld]的字段,然后输入以下命令:[mysqld]bind-address=127.0.0.1完成后,请不要忘记保存这个文件,并使用以下命令重启服务:sudosystemctlrestartmysqld#orsudosystemctlrestartmariadb.service此时,MySQL服务只会监听本地地址。如果您使用的是MariaDB,您可以查看/etc/mysql/mariadb.conf.d/50-server.cnf并检查是否有bind-address的定义。此时,您已经将绑定地址设置为127.0.0.1,即localhost。可以运行Nmap扫描查看输出结果:由于127.0.0.1代表localhost,所以可以看到MySQL端口。现在,您可以再次尝试更改绑定地址以确保其已生效:[mysqld]bind-address=127.5.5。保存/etc/mysql/my.cnf文件并重启MySQL服务后,就可以再次进行Nmap扫描了。此时,您应该不会再在本地主机上看到绑定地址。确认这样的修改生效后,请不要忘记回到第一步的设置,将绑定地址改回127.0.0.1,再次保存。2.设置本地文件访问的屏障MySQL默认可以与本地文件系统通信。例如,通过查询,可以查看本地文件系统中的文本内容,并将查询结果写入磁盘。并且为了防止恶意攻击者使用此功能,您必须阻止MySQL直接与本地文件系统通信。在实践中,您可以使用一个名为local-infile的函数来采取预防措施。例如,假设您有一个名为“/etc/secretfile.txt”的文件,并且您已将密码存储在该文件中。那么,如果你的/etc/mysql/my.cnf文件中的local-infile函数的值为1,就表示开启了访问权限。可以根据这个查看secretfile.txt文件。出于验证目的,您可以使用以下命令连接到MySQL,并检查它是否可以看到secretfile.txt文件:SELECTLOAD_FILE("/etc/secretfile.txt");不难看出,成功的抓取了.com上的电脑文件信息。如下图,请修改/etc/mysql/my.cnf文件中local-infile的值:[mysqld]local-infile=0请重启MySQL服务,重新连接MySQL。再次执行上面的步骤,你会发现你已经看不到文件的内容了。当然,如果用户对本地文件没有读写权限,同样是看不到该文件的。不过,这不应该成为您忽略它的理由。它仍然是您在渗透测试和数据库安全性中应该检查的内容之一。3.设置应用用户和密码。值得注意的是,数据库管理用户和访问数据库的MySQL用户必须互不相同。也就是说,如果直接使用root用户将应用程序连接到MySQL,是极其危险的。如果可能,请定义那些不能单独执行UPDATE或INSERT操作的用户,并将他们分配给应用程序。除了用户之外,让我们考虑一下用户的密码。与其他域类似,MySQL用户的密码也需要具有复杂和不可预测的特性。如果您在这方面没有经验,可以使用现成的密码生成器系统。4.删除匿名用户当您使用默认设置安装MySQL时,会生成一些匿名用户。显然,您需要删除或阻止他们访问数据库。为了MySQL服务器的安全,需要注意以下查询得到的响应:SELECT*FROMmysql.userWHEREUSER="";#ExampleOutputEmptyset(0.001sec)对于查询结果,应立即删除这些匿名用户。例如,如果在名为“localhost”的数据库环境中有一个名为“anonuser”的匿名账户,那么可以使用以下命令将其删除:DROPUSER'anonuser'@'localhost';本地文件权限假设您是一名数据库管理员,想要查看一周前的数据。您可能必须通过SSH、连接到数据库服务器并更改所需的MySQL文件。在此过程中,如果您使用的是Linuxroot权限,则数据文件的所有权和查询权限会发生变化。为了避免出现这种情况,需要查看/var/lib/mysql目录查看权限授予情况,通过以下命令查看所有文件的所有者是否为MySQL用户。sudols-al/var/lib/mysql显然,此类文件的读写权限应该只分配给MySQL用户,其他用户不应该有任何权限。6、使用MySQLSSL想象一下,在ABC地区,有很多不同的服务器,一旦其中一台服务器被恶意黑客接管。然后黑客会在ABC区域进行内部扫描。这样一来,他就可以收集到每台服务器的信息。如果他在此过程中检测到MySQL服务器,则可以对目标服务器发起中间人攻击(MitM)。这意味着他们可以窃取连接到服务器的应用程序和用户之间的会话信息。避免这种情况的最佳方法之一是在MySQL服务器上启用SSL。7.日志和历史文件您可以使用MySQL日志来分析和发现各种错误。您可以通过转到my.cnf文件来编辑日志的保存位置,如下所示。#/etc/mysql/my.cnf[mysqld]log=/var/log/mylogfiles您可以根据需要更改mylogfiles的名称或位置。而当你在Linux终端上连接MySQL服务器并输入各种命令时,各种查询都会保存在mysql_history文件中。如果运行以下命令,您将能够在MySQL终端中看到正在使用的查询信息:cat~/.mysql_history。如果您不想提供有关您在服务器内部进行的查询类型等信息,您可以使用以下命令删除该文件的内容。sudoecho"cleaned">~/.mysql_history完成后,可以再次运行上述命令查看文件内容。8.谁得数据库,谁得系统无论属于哪个领域的应用,因为数据库中可能存储的数据包括:客户信息、银行账户、账户密码等,这些都是恶意攻击者试图获取的信息一切手段。因此,数据库开发人员和管理员至少需要了解他们可能参与渗透测试的基础知识。希望上面给大家介绍的加强MySQL服务器安全的七步建议能对大家有所帮助。原文链接:https://www.makeuseof.com/mysql-database-security-checklist/译者介绍JulianChen(朱利安陈),社区编辑,拥有十余年IT项目实施经验,擅长内外部资源风险管控,重点传播网络与信息安全知识和经验。

最新推荐
猜你喜欢