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

news2024/9/24 0:20:56

本文将以最常见的数据库管理系统——MySQL为例,向您介绍如何通过7步骤来安全加固数据库服务器。

不知您是否发现一种现象,那些初学渗透测试的人员往往过于关注应用的安全性,而对数据库的安全性不太重视。他们殊不知,没有数据库的配置与安全测试,应用的安全性也就无法得到充分的验证。在此,我将以最常见的数据库管理系统——MySQL为例,向您介绍如何通过七步骤来安全加固数据库服务器。

1、使用SSH隧道代替远程连接

默认情况下,MySQL服务运行在3306号端口上。在安装MySQL时,您会注意到3306号端口持续对所有连接都进行侦听。就目前而言,由于MySQL的端口是对外开放的,因此您应该将MySQL的服务设置为,仅侦听本机地址的模式。

由于服务器通常是运行在Linux的各种发行版上的,因此下面我将选取基于Debian发行版来进行演示。首先,为了使用SSH隧道,而不是远程连接,您需要在/etc/mysql/my.cnf文件中,关闭由内向外的默认端口。在该文件中,您需要开启一个名为[mysqld]的字段,并输入如下命令:

[mysqld]
bind-address=127.0.0.1

完成之后,请不要忘记保存该文件,并使用如下命令去重新启动该服务:

sudo systemctl restart mysqld
# or
sudo systemctl restart mariadb.service

至此,MySQL服务将只会监听本机地址了。如果您使用的是MariaDB,那么可以查看/etc/mysql/mariadb.conf.d/50-server.cnf,并检查是否有关于bind-address的定义。

至此,您已将绑定地址设置为127.0.0.1,即localhost。您可以运行Nmap进行扫描,并能检查到如下输出:

由于127.0.0.1代表了本地主机,因此您可以看到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文件:
SELECT LOAD_FILE("/etc/secretfile.txt");

不难看出,它成功地捕获了计算机上的文件信息。如下所示,请更改/etc/mysql/my.cnf文件中的local-infile值:

[mysqld]
local-infile=0

请重启MySQL服务,并重新连接MySQL。再次执行上述步骤,您会发现自己已不能看到文件内容了。

当然,如果用户本身就没有对本地文件的读写权限,那么他们同样无法看到该文件。不过,这不应该成为您忽略的理由。它仍然是您应该在渗透测试和数据库安全性中需要检查的内容之一。

3、设置应用用户和密码

值得注意的是,数据库的管理用户和访问数据库的MySQL用户必须互不相同。换句话说,如果您直接使用root用户,将应用连接到MySQL上,则是极其危险的。如果可能的话,请定义那些无法单独执行UPDATE或INSERT操作的用户,并分配给应用。

除了用户,我们再来考虑用户的密码。与其他领域类似,MySQL用户的密码也需要具有复杂且不可预测的特性。如果您在此方面缺乏经验的话,可以使用现成的密码生成器系统。

4、删除匿名用户

您在保持默认设置情况下去安装MySQL时,会产生一些匿名用户。显然,您需要删除或阻止他们对于数据库的访问。对于MySQL服务器的安全而言,您应该留意从如下查询中获得的响应:

SELECT * FROM mysql.user WHERE USER="";
# Example Output
Empty set (0.001 sec)

对于查询到的结果,您应当立即删除这些匿名用户。例如,如果在名为“localhost”的数据库环境中有一个名为“anonuser”的匿名帐户,那么您就可以使用如下命令来删除之:

DROP USER 'anonuser'@'localhost';

5、检查MySQL的本地文件权限

假设您是一名数据库管理员,想检查一周前的数据。您可能必须通过SSH,连接到数据库服务器,并更改所需的MySQL文件。在执行此操作的过程中,如果您使用Linux的root用户权限,那么数据文件的所有权和查询权限就发生了更改。

为了避免此类情况,您需要查看/var/lib/mysql目录,以检查授予权限的状态,并通过如下命令,审查所有文件的所有者是否为MySQL用户。

sudo ls -al /var/lib/mysql

显然,此类文件的读写权限应该只被分配给MySQL用户,而其他用户不应具有任何权限。

6、使用MySQL SSL

想象一下,在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。

如果您不想提供有关自己在服务器内部进行查询的类型等信息,则可以通过如下命令删除该文件的内容。

sudo echo "cleaned" > ~/.mysql_history

完成后,您可以通过再次运行上述命令,去检查文件的内容。

8、得数据库者得系统

无论属于哪个领域的应用,由于数据库里可能存放着包括:客户信息、银行帐户和账号密码等数据,它们都是恶意攻击者想尽一切办法要获得的信息。因此,无论是数据库开发人员、还是管理人员,都至少需要了解他们在渗透测试中可能涉及到的基础知识。希望上述向您介绍的七步加固MySQL服务器安全的建议,能够助您一臂之力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上海亚商投顾:兔年首日开门红 北向资金净流入超186亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪两市早盘受外围影响大幅高开,随后指数高开低走,板块及个股相对活跃,汽车产业链&a…

视频图像分析处理流程(完整版)

来源:投稿 作者:LSC 编辑:学姐 一、视频分析处理的完整流程 (1)视频编解码的入门知识 尽管压缩工具五花八门,但是他们的目的都只有一个:都是为了减小文件的占用空间。 除去我们常见的.zip,.7z&#xff0…

MyBatis框架如何实现数据查询?有几种方法?

在实际开发中,查询操作通常都会涉及到单条数据的精确查询,以及多条数据的模糊查询。那么使用MyBatis框架是如何进行这两种查询的呢?接下来,本小节将讲解下如何使用MyBatis框架根据客户编号查询客户信息,以及根据客户名…

【前沿技术】在安全且可靠的区块链基础设施中运行业务条线应用

发表时间:2022年4月27日 信息来源:coingeek.com 了解特定企业的业务需求将使你能够构建出一个可扩容的业务条线应用,它将按照你想要的方式进行运作,并在不可篡改的BSV区块链中保存相关记录。 大多数企业都有一个业务条线&#xf…

《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fid…

HashMap原理分析

HashMap原理分析JDK7 HashMap1、模型介绍2、底层实现原理3、描述一下put的过程4、HashMap扩容机制:5、HashMap中的循环链表是如何产生的6、HashMap和HashTable的区别7、HashMap为什么用红黑树而不用B树?JDK8 HashMapJDK7 HashMap 1、模型介绍 HashMap在…

18. time和calendar模块

当代码中需要使用到时间时,我们通常会使用time模块来获取当前时间或者时间戳。 时间戳:从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 1. 时间戳 获取当前时间戳: import timeprint(time…

Springboot+vue预约上门维修服务系统

前端技术:nodejsvueelementui一般是采用前后端分离模式, 后端支持python/php/java/nodejs MTV模式 M:model,模型,负责与数据库交互 V:view,视图是核心,负责接收请求、获取数据、返回结果 T:template&…

并发编程学习(八):ReentrantLock特性、哲学家吃饭问题

ReentrantLock 是java.util.concurrent.locks包下的类。相对于synchronized,它具备如下特性:可中断。可以设置超时时间。可以设置公平锁。支持多个条件变量。即可以有个多个waitset等待队列。与synchronized都支持可重入。ReentrantLock的基本语法:// 获…

c++11 标准模板(STL)(std::multiset)(二)

定义于头文件 <set>template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using…

Day12【元宇宙的实践构想01】—— 元宇宙概念和发展历程

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍每日一句&#xff1a;【道固远&#xff0c;笃行可至&#xff1b;事虽巨&#xff0c;坚为必成】 &#x1f6a9; 今日留言&#xff1a;亮亮被迫去练科目二啦&#xff0c;定时…

K8S架构熟悉及日常操作

目录 一、架构介绍 二、组件介绍 三、调度介绍 四、CLI指令介绍 五、常见CLI指令 六、常见问题排查思路 一、架构介绍 Kubernetes系统架构为客户端/服务端&#xff08;C/S&#xff09;架构&#xff0c;Master作为服务端&#xff0c;Node作为客户端。 Master服务端也被称…

学习逆向安全的必备基础: 汇编的初步了解

什么是汇编 汇编语言是一种低级编程语言&#xff0c;它使用简单的助记符来表示计算机底层的机器指令。 汇编语言是直接与计算机硬件交互的&#xff0c;它能够控制计算机中的每一个细节。 由于汇编语言非常低级&#xff0c;所以编写汇编程序通常比较困难。不过&#xff0c;汇…

微信怎样开发小程序【公司企业小程序开发】

现在很多公司企业都有自己的小程序&#xff0c;没有小程序的公司企业也会寻找开发小程序的途径。那么今天就给大家简单介绍微信怎样开发小程序&#xff0c;希望对需要开发小程序的公司企业有帮助。 一、注册小程序账号 有一个小程序账号是必须的&#xff0c;小程序账号可以在…

那些外贸老鸟们都在认真使用的8个实用小工具

在我们日常的外贸工作中&#xff0c;有很多地方都可以用到一些实用外贸小工具去提高工作效率&#xff0c;突破局部限制。是否能够灵活的应用这些实用外贸小工具&#xff0c;是一位成熟优秀外贸业务员的衡量标准之一。第一个&#xff1a;知识信息整理和CRMhttps://www.notion.so…

Linux(六)基础I/O

引言 C语言进阶 文件管理 上一篇文章详细回顾了C语言方面关于文件操作的一些库函数&#xff0c;比如输入输出重定向fscanf、fprintf&#xff0c;对于文件内容以字符形式读取的fgetc、fputc&#xff0c;对于文件内容以字符串形式读取的fgets、fputs&#xff0c;对于二进制文件的…

ieee会议论文从手稿到发表

0. 前言 在创新点得到认可之后就可以准备发论文了&#xff0c;这个一定要早点&#xff0c;可以给自己设置一个明确的deadline&#xff0c;毕竟ddl是第一生产力。 1. 确定发什么期刊、会议 一定要符合学校的毕业要求&#xff0c;有一些水的学校并不认。时间看能不能赶上学校毕…

物联网智慧消防对比传统消防具有哪些优势?

随着科技的进步和城市化进程的加快&#xff0c;传统消防已经满足不了社会发展的需求&#xff0c;智慧消防应运而生&#xff0c;目前智慧消防已经成为消防安全管理的核心&#xff0c;物联网时代的到来&#xff0c;让智慧消防迎来了更大的发展机遇&#xff0c;变得更加智慧化、系…

手机网站建设怎么做?【手机网站制作】

对于很多公司企业来说&#xff0c;做网站建设都是优先考虑PC端的网站建设&#xff0c;但是某些公司企业可能对于PC端网站的需求不高&#xff0c;倒是更有需要做移动端网站&#xff0c;也就是我们常说的手机网站。那么关于手机网站建设又是怎么做的呢&#xff1f;本文给大家做一…

软件测试员年底总结怎么写?所有问题都帮你梳理好了!

临近年底&#xff0c;很多公司都有年终总结环节&#xff0c;核心目的发现今年的不足&#xff0c;进而总结经验&#xff0c;更好地用以指导明年的工作。当然&#xff0c;即使公司没有要求&#xff0c;对于测试岗位来说&#xff0c;一年一度的总结不可或缺。假如你是测试负责人&a…