目录
一、基本安全配置
1.安装最新的安全补丁
- 安全说明:确保数据库版本为最新并修复已知的安全漏洞。攻击者可能会利用已知的漏洞对MySQL服务器进行攻击。
- 检查方法:显示当前的数据库版本,查看MySQL官网,比较补丁修复情况。
select version();
- 配置方法:安装最新版本的补丁或使用稳定版本。
2.删除默认安装数据库test
- 安全说明:MySQL安装时默认创建一个测试数据库test,完全的空数据库,没有任何表,可以删除。测试数据库可以被所有用户访问,并且可以用来消耗系统资源。删除测试数据库将减少MySQL服务器的攻击面。防止遭受一句话注入木马的入侵
- 检查方法:
show databases like 'test';
或show databases;
检查test数据库是否存在。 - 配置方法:
drop database test;
3.禁用“local_infile”
- 安全说明:local_infile参数决定是否可以通过LOAD DATA LOCAL INFILE来实现加载或或选择位于MySQL客户端计算机上的文件。禁用local_infile可以阻止黑客利用sql注入来读取数据库文件,降低数据库带来的安全损失。
- 检查方法:
vi /etc/my.cnf
在shell中进入/etc下查看MySQL的配置文件my.cnf或show variables where variable_name='local_infile';
进入MySQL中查看。确认local_infile不等于ON或1。 - 配置方法:修改MySQL配置文件my.cnf,添加配置参数
local_infile=0
0代表OFFsystemctl restart mysqld
重启MySQL服务
4.禁用“skip-grant-tables”
- 安全说明:数据库启动的时候 跳过权限表的限制,不用验证密码,直接登录,所有账号可以不受限制的/免密访问任意数据库,会导敏感数据外泄。这种情况只有在自己忘记root密码 不得已重启数据库的情况下使用的。现网环境慎用,需要重启数据库,并且安全性难以保证
- 检查方法:查看MySQL配置文件skip-grant-tables参数的设定
vi /etc/my.cnf
确认skip-grant-tables不等于1。 - 配置方法:修改MySQL配置文件my.cnf,在配置文件添加
skip-grant-tables=0
或skip-grant-tables=FALSE
或用#skip-grant-tables=1
将其注释掉,然后重启MySQL服务systemctl restart mysqld
5.开启“symbolic-links=0”
- 安全说明:禁用软链接,开启symbolic-links=0可以禁止数据库用户删除或重名数据文件目录之外的文件。多个客户可能会访问同一个数据库,若使用链接文件可能会导致外部客户锁定 MySQL 服务器。
- 检查方法:查看MySQL配置文件symbolic-links参数的设定
vi /etc/my.cnf
确认symbolic-links=0
或进入MySQL输入show variables like 'have_symlink';
确认返回的值为DISABLED表示禁止无效不可用的状态。 - 配置方法:修改MySQL配置文件my.cnf确认
symbolic-links=0
二、MySQL权限安全
1.设置仅管理员用户具有所有数据库的访问权限
- 安全说明:除了管理员账号,其他用户没必要有所有数据库的访问权限,过高的权限会导致安全问题。
- 检查方法:
select user, host from mysql.user;
查看用户权限;SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y');
如果返回的都是管理员账号说明安全,否则需要对用户清除权限。
2.禁用非管理员用户的“File_priv”
- 安全说明:
File_priv
权限用于允许或禁止MySQL用户在服务器主机上读写文件。黑客很可能利用这一点盗取数据库中敏感数据。 - 检查方法:
select user, host from mysql.user where File_priv = 'Y';
如果返回的都是管理员账号说明安全,否则需要对用户清除权限 - 配置方法:
mysql> REVOKE FILE ON *.* FROM '<user>’;
//为需要撤销权限的用户mysql> GRANT FILE ON *.* TO user@localhost;
//为需要增加权限的用户 - 备注:8.0版本默认情况下,只有管理员账号拥有File_priv权限
3.禁用非管理员用户的“Super_priv”
- 安全说明:Super_priv权限用于允许或禁止给定用户是否可以执行任意语句,非管理员不应该具备该权限,使用超越当前用户权限的权利,容易被攻击者所利用。
- 检查方法:
select user, host from mysql.user where Super_priv = 'Y';
如果返回的都是管理员账号说明安全,否则需要对用户清除权限 - 配置方法:
mysql> REVOKE FILE ON *.* FROM '<user>’;
//为需要撤销权限的用户mysql> GRANT FILE ON *.* TO user@localhost;
//为需要增加权限的用户 - 备注:mysql.session‘@’localhost’:插件内部使用来访问服务器。该用户已被锁定,客户端无法连接;
4.禁用非管理员用户的“Shutdown_priv”
- 安全说明:Shutdown_priv权限用于允许或禁止给定用户是否可以关闭数据库,会造成一定安全隐患。使用超越当前用户权限的权利。可以被攻击者所利用。
- 检查方法:
select user, host from mysql.user where Shutdown_priv = 'Y';
如果返回的都是管理员账号说明安全,否则需要对用户清除权限 - 配置方法:
mysql> REVOKE FILE ON *.* FROM '<user>’;
//为需要撤销权限的用户mysql> GRANT FILE ON *.* TO user@localhost;
//为需要增加权限的用户
5.禁用非管理员用户的“Create_user_priv”
- 安全说明:Create_user_priv权限用于允许或禁止给定用户是否可以创建任意用户,会造成一定安全隐患。使用超越当前用户权限的权利。可以被攻击者所利用。
- 检查方法:
select user, host from mysql.user where Create_user_priv = 'Y';
如果返回的都是管理员账号说明安全,否则需要对用户清除权限。 - 配置方法:
mysql> REVOKE FILE ON *.* FROM '<user>’;
//为需要撤销权限的用户mysql> GRANT FILE ON *.* TO user@localhost;
//为需要增加权限的用户
三、操作系统配置
1.禁用MySQL命令历史记录
- 安全说明:在linux /UNIX上,mysql客户机将交互式执行的语句记录到一个历史文件中,默认情况下,该文件在用户的主目录中名为.mysql_history,大多数在mysql客户机应用程序中运行的交互式命令都保存到历史文件中所以我们安全加固应该禁用mysql命令历史记录。
- 配置方法:官方文档如下
find / -name .mysql_history
cat /dev/null > ~/.mysql_history
将mysql_histfile环境变量设置为/dev/null.这将需要放在shell的启动脚本中。 配置环境变量vi ~/.bashrc
添加如下配置:export MYSQL_HISTFILE=/dev/null
修改完后,保存退出,执行如下命令,使更改生效source ~/.bashrc
2.禁用MYSQL_PWD环境变量
- 安全说明:MYSQL_PWD是一种用于存储mysql密码的环境变量,以明文形式存储mysql密码,存在安全隐患。
- 检查方法:检查MYSQL_PWD环境变量是否存在于某个进程中:
grep MYSQL_PWD /proc/*/environ
如果有返回行说明那个进程使用了MYSQL_PWD环境变量。 - 配置方法:不设置环境变量或确保MYSQL_PWD环境变量未设置敏感信息,对使用MYSQL_PWD环境变量变量的脚本和进程,建议不再使用该环境变量。
3.禁止MySQL操作系统账号登陆
- 安全说明:MySQL系统账号在安装完数据库后,不应该有其他用途。建议禁止该账号登陆操作系统。此举在防止黑客利用MySQL数据库漏洞反射shell有极佳效果。
- 检查方法:假设MySQL数据库操作系统账号就是mysql,执行下列命令:
getent passwd mysql | egrep "^.*[ \ /bin\ / false| \ / sbin \ / nologin]$"
如果没有返回行则说明存在安全隐患 - 配置方法:执行下列语句禁止mysql用户(如hadoop)登陆:
usermod -s /sbin/nologin hadoop
回退步骤:usermod -s /bin/bash hadoop
本文转载自: https://blog.csdn.net/weixin_46065653/article/details/126556694
版权归原作者 yh野良 所有, 如有侵权,请联系我们删除。
版权归原作者 yh野良 所有, 如有侵权,请联系我们删除。