MySQL数据库安全加固实验
【实验目的】
通过本实验,使学生掌握对MySQL数据库进行安全加固的方法。
【知识点】
- 知识点:MySQL数据库
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在Web应用方面,MySQL是最好的关系数据库管理系统(Relational Database Management System,RDBMS)应用软件之一。
- MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
【实验原理】
针对MySQL数据库系统的攻击方式主要包括:口令破解、服务漏洞利用、权限提升、信息窃取、拒绝服务等。针对这些攻击方式,给出相应的安全加固方法,以减少MySQL系统自身的脆弱性,提高抵御攻击的能力。
【软件工具】
- 操作系统:CentOS 7 x64
【实验目标】
通过对MySQL数据库从防口令破解、防服务漏洞、防权限提升、防信息窃取、防拒绝服务方面进行安全加固操作,提升MySQL数据库的安全性。
【实验步骤】
登录操作系统,用户名/口令:root/toor。
1.防口令破解
(1) 删除与数据库运行无关的账号
加固要求:MySQL系统中存在一个账号,名为test,该账号用于在开发阶段对数据库进行测试,现在已与数据库的正常运行无关,要求将该账号删除。
数据库中存在test账号
加固方法:
mysql -uroot -p //登录MySQL,密码:toor。
drop user test; //删除账号
flush privileges; //刷新内存
quit //退出MySQL
test账号已被删除
(2)删除空口令账户
加固要求:MySQL系统中存在一个空口令账号,名为stuff1,要求将该账户删除。
stuff1为空口令账号
加固方法:
mysql -uroot -p
drop user stuff1;
flush privileges;
quit
stuff1账号已删除
(3)为弱口令账户设置强壮口令
加固要求:MySQL系统中存在一个弱口令账号,名为dbuser1,要求为该账户设置强壮口令(包含大小写字母、数字、特殊符号,长度在10位以上)。
加固方法:
mysql -uroot -p
update mysql.user set password=password('Eef9ch@oh-') where user='dbuser1';
flush privileges;
quit
(4)删除匿名账户
加固要求:当前MySQL系统中存在匿名账户,要求将其删除。
加固方法:
mysql -uroot -p //登录MySQL
delete from mysql.user where user = '';
flush privileges;
quit
成功删除匿名账号
(5)数据库管理员账户改名
加固要求:MySQL数据库管理员账户名称为root,要求将其改名为:qax_gly。
加固方法:
mysql -uroot -p //登录MySQL
update mysql.user set user="qax_gly" where user="root";
flush privileges;
quit
root用户更改成功
2.防服务漏洞
(1)启用错误日志
加固要求:启用MySQL系统的错误日志。
加固方法:
vi /etc/my.cnf //编辑配置文件
在[mysqld_safe]部分加入:log-error=/var/log/mariadb/mariadb.log。
保存退出。
systemctl restart mariadb //重启服务
查询log_error中的值
(2)禁用符号链接
加固要求:MySQL系统当前启用了符号链接,要求禁用该功能。
加固方法:
vi /etc/my.cnf //编辑配置文件
在[mysqld]部分加入:symbolic-links=0。
保存退出。
systemctl restart mariadb //重启服务
查询have_symlink的值
(3)修改MySQL监听端口
加固要求:MySQL服务程序当前监听默认的TCP 3306端口,要求将端口改为6603。
加固方法:
vi /etc/my.cnf //编辑配置文件
在[mysqld]部分加入:port=6603。
保存退出。
systemctl restart mariadb //重启服务
(4)禁止从任意地址远程访问数据库
加固要求:当前MySQL系统允许dbuser1用户从任意IP地址发起访问,要求取消dbuser1从任意地址访问的权限,只允许从特定IP地址如192.168.1.100发起访问。
加固方法:
mysql -uqax_gly -p //登录MySQL
use mysql //选择mysql数据库
update user set host="192.168.1.100" where user="dbuser1";
flush privileges;
quit
访问权限修改成功
3.防权限提升
(1)禁用MySQL的命令历史
加固要求:禁用MySQL的命令历史功能。
mysql 历史命令
加固方法:
cd ~ //进入用户的home目录
rm -rf .mysql_history //删除历史记录
ln -s /dev/null .mysql_history //将MySQL日志文件指向空设备
历史文件为空
(2)禁止操作系统的MySQL账户拥有登录shell
加固要求:当前Linux系统的MySQL用户允许以交互方式登录,要求禁止其登录OS。
加固方法:
usermod -s /sbin/nologin mysql
mysql无登录权限
(3)禁止MySQL访问本地文件
加固要求:当前MySQL允许通过LOAD DATA INFILE或SELECT local_file命令装载本地文件,要求禁用MySQL的此项功能。
加固方法:
vi /etc/my.cnf //编辑配置文件
在[mysqld]部分加入:local-infile=0。
保存退出。
systemctl restart mariadb //重启mariadb服务
local_infile关闭状态
4.防信息窃取
(1)强化数据库文件权限
加固要求:当前MySQL数据文件的权限设置不够严格,要求为其设置严格的权限。
加固方法:
chmod -R 700 /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
强化后数据库文件权限
(2)强化二进制日志的文件权限
加固要求:当前MySQL二进制日志文件的权限设置不够严格,要求为其设置严格的权限。
加固方法:
chmod 700 /var/lib/mysql/bin-log*
chown mysql:mysql /var/lib/mysql/bin-log*
强化后二进制文件权限
(3)强化错误日志的文件权限
加固要求:当前MySQL错误日志文件的权限设置不够严格,要求为其设置严格的权限。
加固方法:
chmod 600 /var/log/mariadb/mariadb.log
chown mysql:mysql /var/log/mariadb/mariadb.log
更改后错误日志文件权限
5.防拒绝服务
(1)删除测试数据库
加固要求:删除MySQL自带的test数据库。
加固方法:
mysql -uqax_gly -p
drop database test;
quit