MySQL安全配置之基本设置

 

1. 安装最新的安全补丁

安全说明
确保数据库版本为最新并修复已知的安全漏洞。攻击者可能会利用已知的漏洞对MySQL服务器进行攻击。
检查方法

mysql> show variables where variable_name like 'version';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 8.0.16 |
+---------------+--------+
1 row in set (0.00 sec)

显示当前的数据库版本,查看MySQL官网,比较补丁修复情况。
配置方法
安装最新版本的补丁或升级到最新版本。

 

 

2. 删除默认安装数据库test

安全说明
MySQL安装时默认创建一个测试数据库test,完全的空数据库,没有任何表,可以删除。测试数据库可以被所有用户访问,并且可以用来消耗系统资源。删除测试数据库将减少MySQL服务器的攻击面。
检查方法

mysql> show databases like 'test';
Empty set (0.00 sec)

检查test数据库是否存在。
配置方法

 

mysql> drop database test;

 

 

3. 设置“allow-suspicious-udfs”为“FALSE”

安全说明
该选项控制是否可以载入主函数只有 xxx 符的用户定义函数。默认情况下,该选项被关闭,并且只能载入至少有辅助符的 UDF。关闭allow-suspicious-udfs,可以防止通过共享对象文件加载存在威胁的UDFs函数。
检查方法
查看MySQL配置文件allow-suspicious-udfs参数的设定:cat /etc/my.cnf
确认allow-suspicious-udfs不等于TRUE
配置方法

  1. 修改MySQL配置文件my.cnf,删除以下安全参数
    allow-suspicious-udfs=TRUE (或者将TRUE改为FALSE,具体效果一样)
  2. 重启mysql服务。

 

4. 禁用“local_infile”

安全说明
local_infile参数决定是否可以通过LOAD DATA LOCAL INFILE来实现加载或或选择位于MySQL客户端计算机上的文件。禁用local_infile可以阻止黑客利用sql注入来读取数据库文件,减小黑客给数据库带来的安全损失。
检查方法

mysql> show variables where variable_name='local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

确认local_infile不等于ON。
配置方法

  1. 修改MySQL配置文件my.cnf,在配置文件的[mysqld]部分添加如下配置参数
local_infile=0 // 0代表OFF
  1. 重启MySQL服务。

 

5. 禁用“skip-grant-tables”

安全说明
数据库启动的时候 跳过权限表的限制,不用验证密码,直接登录。如果不关闭此参数,所有账号可以不受限制的/免密访问任意数据库。会导敏感数据外泄。
检查方法
查看MySQL配置文件skip-grant-tables参数的设定:cat /etc/my.cnf
确认skip-grant-tables不等于TRUE。
配置方法

  1. 修改MySQL配置文件my.cnf,在配置文件的[mysqld]部分添加如下配置参数
skip-grant-tables=FALSE //默认值为FALSE
  1. 重启MySQL服务。

备注
这种情况只有在忘记root密码 不得已重启数据库的情况下使用的。现网环境慎用,需要重启数据库,并且安全性也比较难以保证。

 

6. 开启“skip-symbolic-links”

安全说明
开启skip-symbolic-links可以禁止数据库用户删除或重名数据文件目录之外的文件。多个客户可能会访问同一个数据库,若使用链接文件可能会导致外部客户锁定 MySQL 服务器。
检查方法

mysql> show variables like 'have_symlink';
+---------------+----------+
| Variable_name | Value    |
+---------------+----------+
| have_symlink  | DISABLED |
+---------------+----------+
1 row in set (0.00 sec)

确认返回的值为DISABLED.
配置方法

  1. 修改MySQL配置文件my.cnf,在配置文件的[mysqld]部分添加如下配置参数
skip-symbolic-links=yes //默认值为no
  1. 重启MySQL服务。
    备注
    后续版本–symbolic-links, --skip-symbolic-links会被删除,系统变量have_symlink也会被删除。

 

7. 禁用“daemon_memcached”插件

安全说明
InnoDB memcached插件允许用户使用memcached协议访问存储在InnoDB中的数据。默认情况下,插件未开启认证,任何人可以利用daemon_memcached来访问或修改一部分数据,给数据库造成信息泄漏的隐患。
检查方法

mysql> SELECT * FROM information_schema.plugins WHERE PLUGIN_NAME='daemon_memcached';
Empty set (0.00 sec)

如果有返回行数说明有插件,需要删除。默认情况下是禁用的。
配置方法
运行如下命令删除插件。

 

 

8. 设置“sql_mode”包含“STRICT_TRANS_TABLES”

安全说明
sql_mode模式有三种,STRICT_TRANS_TABLES是其中一种模式。当执行数据更新操作(如INSERT,UPDATE),MySQL依据是否启用严格的SQL_mode处理非法与丢失的数值。STRICT_TRANS_TABLES模式会检查所有更新的数据,在一定程度可以给入侵者规避检测带来阻碍。
检查方法

mysql> show variables like 'sql_mode';
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                 |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

如果返回的列表中包含STRICT_TRANS_TABLES说明安全,否则需要修复。
配置方法

  1. 修改MySQL配置文件my.cnf,添加如下配置参数
sql_mode=STRICT_ALL_TABLES //默认为STRICT_TRANS_TABLES模式
  1. 重启MySQL服务。

 

9. 设置“MASTER_SSL_VERIFY_SERVER_CERT”为YES或1 *

安全说明
MASTER_SSL_VERIFY_SERVER_CERT指示从属设备是否应该验证主服务器的证书。此配置项可以设置为“是”或“否”,除非在从节点上启用了SSL,否则将忽略该值。使用SSL时,证书验证对于正在建立验证连接的一方非常重要。这种情况下,客户端应验证服务器的证书。
检查方法

mysql> select ssl_verify_server_cert from mysql.slave_master_info;
Empty set (0.00 sec)

检查返回值是否为1,如果不为1,需要配置。
配置方法
执行如下sql语句。

stop slave;
change master to MASTER_SSL_VERIFY_SERVER_CERT=1;
start slave;

 

10. 设置复制用户的“super_priv” *

安全说明
mysql.user表中的super权限控制着各种mysql功能的使用,这些功能包括:change master to, kill, mysqladmin kill选项,purge binary logs,set global,mysqladmin调试选项,日志记录控制等。super_priv权限允许委托账号执行任意语句,非管理员不应该具备该权限。使用超越当前用户权限的权利。可以被攻击者所利用。
检查方法

mysql> select user,host from mysql.user where Super_priv='Y';
+---------------+-------------+
| user          | host        |
+---------------+-------------+
| root          | 10.14.23.%  |
| root          | 10.12.121.% |
| mysql.session | localhost   |
| root          | localhost   |
+---------------+-------------+
4 rows in set (0.00 sec)

确保返回的没有复制用户。如果有,需要修改。
配置方法
对每个复制用户,执行如下sql语句(将“repl”替换为复制用户的名称)

revoke super on *.* from 'repl';

 

版权声明:
作者:youlijiang
链接:https://www.cnesa.cn/917.html
来源:正群欣世
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>