基于Linux对MySQL数据库的安全加固指南(超实用--实战版)_mysql加固手册(1)

如果使用的是容器的方式部署的,可以修改一下创建容器时对外开放的端口,具体容器修改端口可参考:docker修改容器的端口、容器名、映射地址…

来看看容器外部署的数据库如何修改;

cat /etc/my.cnf

找到port,注意my.cnf可能会有两个port,一个是[client]下的,一个是[mysqld]下的,修改[mysqld] 下的port即可,client下的也可以修改,主要是[mysqld]下的生效;
修改完重启数据库,有一点如果访问不到,可以先查看端口有没有起来,如果起来了,就检查防火墙,如果没起来,就去看数据库启动报错或日志;

在这里插入图片描述

修改完重启一下服务即可生效。

2、安装配置防火墙

使用centos中自带的firewall-cmd来管理防火墙即可;

#开启防火墙
systemctl restart firewalld

#开放数据库的端口
#开放3306端口、加载防火墙配置、查看端口是否开放
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports | grep 3306

3、强化密码

可参考此文章随机生成密码:【Linux】Centos7 随机生成密码
这样安全性比较高,如果想要自己设置当然也可以;建议使用强密码并定期更新。避免使用简单的密码,比如123456和qwerty等。强密码包括:(复杂密码应包括大小写字母、数字和特殊字符)。

4、开启日志

开启log-bin日志,可在配置文件中开启;/etc/my.cnf

log-bin=mysql-bin

在这里插入图片描述

开启完,重启服务生效;


mariadb日志一般会存储在 /var/lib/mysql 下;
容器的方式部署的mysql,日志数据一般会存在 /var/lib/mysql/data/ 下。

在这里插入图片描述

5、定期备份数据

这里推荐一个定期备份的脚本:mysql数据库定时备份脚本+定时删除

建议放在数据库数据存储目录下(对于健忘的人来说比较好找),当然也可以自己找一个隐蔽安全的地方放起来(如果怕忘记,可以计一个笔记),然后设置定时任务,定时全备;

定时备份,需要写周期性计划任务:
#周期性计划任务(每天完备一次)
0 0 */1 * * root /bin/sh 脚本路径/back.sh

脚本可修改的内容:
1、数据库信息:用户名、密码、ip、端口
2、备份的路径及日志文件名
3、脚本保留的天数
4、要备份的库(注意里面的说明,如需备份多个库,可以用到数组,如只备份一个库,可直接使用命令备份即可,总之,注意里面的说明)
5、备份库的文件名和打包备份的文件名 6、日志文件内打印的内容

日志文件的内容展示:
— 创建备份文件: 20230510.sql.tgz
开始:2023年05月10日 16:06:15 结束:2023年05月10日 16:06:20 succ

6、控制访问权限

说明:
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

  • 限制访问数据库ip和用户名

开放的ip:
localhost
172.16.11.11
172.16.11.12
172.16.11.13
172.16.11.14

这时候先不要删除远程登录,可以先在远程连接的第三方工具连接创建普通用户和指定某一个ip,因为linux查看用户列表的时候视觉感不是很好,所以等创建完指定ip和用户名,测试完之后,在关闭远程登陆和root登陆。提示:切记要互相可以ping通,才可以,否则设置了要是连不上问题还要找好久。

  • 使用navicat连接到数据库;
#进入mysql库中
use mysql;

#查看当前可以访问到该数据库的用户和权限
select * from user;

可以看到本地和远程都可以连接到该数据库,那么下来我们就给他做限制;

在这里插入图片描述

开放单用户及ip测试
#首先创建一个库,(后面要用到这个库)
create database cs;

#创建一个用户
create user cs@'localhost' identified by '123123';
#给该用户设置权限(只给cs这个库的所有权限)
grant all privileges on cs.* to 'cs'@'localhost' identified by '123123';
#其实他两可合并为一条命令,那就是直接执行第二条就行;
#PROCESS权限,可以执行解释执行计划操作的权限(需要额外授予表上的select权限)。
#授权PROCESS权限
grant process on *.* to 'cs'@'localhost';
#刷新权限
flush privileges;

#查看用户权限(只可以用root用户查看)
#该命令可以在linux上执行查看,也可以在其他工具上查看
show grants for 'cs'@'localhost';
#或者(该命令仅限于linux上查看)
select * from mysql.user where user="cs" \G;

  • 查看权限

在这里插入图片描述
在这里插入图片描述

  • 然后看mysql/user表,可以看到多了一个cs用户,只可以本地访问数据库,然后测试登陆;

在这里插入图片描述

mysql -ucs -p123123

在这里插入图片描述

成功登陆,并且有cs这个库的所有权限;
而用第三方登陆,就登陆不上,比如我们用navicat连接测试;
很显然,登陆不上的这是;

在这里插入图片描述

批量开放用户及ip测试
#批量创建用户
create user cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#给批量用户设置权限(只给cs这个库的所有权限)
grant all privileges on cs.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#其实他两可合并为一条命令,那就是直接执行第二条就行;
#PROCESS权限,可以执行解释执行计划操作的权限(需要额外授予表上的select权限)。
#授权PROCESS权限
grant process on *.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14';
#刷新权限
flush privileges;

#查看用户权限(只可以用root用户查看)
#该命令可以在linux上执行查看,也可以在其他工具上查看(此命令只可每次查一个)
show grants for 'cs'@'172.16.11.11';
#或者(该命令仅限于linux上查看,可以查看所有的cs用户,并输出所有信息)
select * from mysql.user where user="cs" \G;

在这里插入图片描述

  • 然后看mysql/user表,可以看到多了一个好几个cs用户,但是host不一样,也就是可以访问的ip主机不一样,只有上面显示的这几个访问数据库,然后测试登陆;

在这里插入图片描述

也可以使用mysql命令远程登陆测试,如果你在其他服务器上想访问本地服务器的数据库,前提是必须可以ping通要访问某台数据库的ip,可以使用:

mysql -h IP -P端口 -u用户名 -p密码

例如:
mysql -h 172.16.10.10 -P3306 -uroot -p123123

禁止root用户远程登录

禁止root用户远程登录(切记要留一条root使用localhost登陆的,如果没有就不要禁用了,因为禁用了你就真的在哪都使用不了root了,就需要重新安装了)

delete from user where user='root' and host='%';
#刷新权限
flush privileges;

#可以再次查询一下是否存在
select * from mysql.user where user="root" \G;

可以看到只剩一个root@localhost了,那么就成功禁用的root远程登陆;

在这里插入图片描述

6.1 附加

删除用户
drop user cs@'172.16.11.11';

批量删除用户
drop user cs@'172.16.11.12',cs@'172.16.11.13';

修改root密码:(%为远程登陆,localhost为本机登录)
alter user 'root'@'localhost' identified by '要修改的密码';
alter user 'root'@'%' identified by '要修改的密码';

#刷新权限
flush privileges;

安装mariadb时初始化数据库
mysql_secure_installation

开启数据库远程连接
grant all privileges  on *.* to root@'%' identified by "123123";

#刷新权限
## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

![img](https://img-blog.csdnimg.cn/img_convert/a8da5384a2801eb8446ce52e09c2a535.png)

![img](https://img-blog.csdnimg.cn/img_convert/d51e45bd61095137cd39648675bae526.png)

![img](https://img-blog.csdnimg.cn/img_convert/e975ae2ca89b2200fb2aa762fcd198ff.png)

![img](https://img-blog.csdnimg.cn/img_convert/d4e301e72d8608fd07d07e5eb047e8eb.png)

![img](https://img-blog.csdnimg.cn/img_convert/ff063a263a43a4ee11fb6e579b751301.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

15651690352)]

[外链图片转存中...(img-yN4OfmYP-1715651690352)]

[外链图片转存中...(img-6M1l7S3l-1715651690352)]

[外链图片转存中...(img-JvtpmJXh-1715651690352)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618653875)

**由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值