等保三级整改加固之mysql服务
[TOC]
mysql服务
身份鉴别
- 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换(注:定期更换恐难做到)
#.安装密码校验插件,配置密码复杂度(临时生效)
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
set global validate_password_policy=1;
set global validate_password_length=8;
set global validate_password_mixed_case_count=1;
set global validate_password_number_count=1;
set global validate_password_special_char_count=1;
SHOW VARIABLES LIKE 'validate_password%';
#.写入配置文件[mysqld]中(永久生效)
plugin-load=validate_password.so
validate-password=ON
validate_password_policy = 1
validate_password_length = 8
validate_password_mixed_case_count = 1
validate_password_number_count = 1
validate_password_special_char_count = 1
- 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施
#.先修改配置文件[mysqld]中(永久生效)
mycnf=/data/mysql_3306/my_3306.cnf
sed -i 's/^max_connect_errors.*$/max_connect_errors=5/g' $mycnf
sed -i 's/^interactive_timeout.*$/interactive_timeout=1500/g' $mycnf
sed -i 's/^wait_timeout.*$/wait_timeout=1500/g' $mycnf
cat $mycnf | egrep "(^max_connect_errors|^interactive_timeout|^wait_timeout)"
#.再修改变量(重连生效)
set global max_connect_errors=5;
set global interactive_timeout=1500;
set global wait_timeout=1500;
show variables where variable_name in ('max_connect_errors','interactive_timeout','wait_timeout');
- 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听(注:启用ssl恐难做到,程序改动较大)
#.非本地登录必须启用SSL,这个是高风险问题
访问控制
- 应授予管理用户所需的最小权限,实现管理用户的权限分离。示例将创建 系统管理员、安全管理员、审计管理员 这3个账号
create user if not exists 'system_admin'@'%' identified by 'tB3Ru2udZ2n4x_bd';
grant all privileges on *.* to 'system_admin'@'%' with grant option;
flush privileges;
create user if not exists 'security_admin'@'%' identified by 'MA6RuouuZZn4x_Hd';
grant select on *.* to 'security_admin'@'%';
flush privileges;
create user if not exists 'audit_admin'@'%' identified by 'cf_rB1NKCzbaQuPH';
grant select on *.* to 'audit_admin'@'%';
flush privileges;
- 应及时删除或停用多余的、过期的账户,避免共享账户的存在。示例将删除 空账号、非localhost登录的root账号
delete from mysql.user where user='';
delete from mysql.user where user='root' AND host!='localhost';
flush privileges;
- 应重命名或删除默认账户,修改默认账户的默认口令。示例将默认账号 root 改为 sa2
rename user 'root'@'localhost' to 'sa2'@'localhost';
flush privileges;
安全审计
- 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
#.先修改配置文件[mysqld]中,确认如下
$ mycnf=/data/mysql_3306/my_3306.cnf
$ cat $mycnf | egrep "(log-bin|log-error|^general_log_file|^slow_query_log|^long_query_time|^slow_query_log_file)"
log-bin = /data/mysql_3306/binlog/mysql-bin
log-error = /data/mysql_3306/error/mysql_run.err
general_log_file = /data/mysql_3306/tmp/mysql_general.log
slow_query_log = 1
long_query_time = 3
slow_query_log_file = /data/mysql_3306/slow/mysql_slow.log
#.再重启mysql服务以生效,确认如下
> show variables where variable_name in ('log_bin','log_bin_index','log_error','general_log_file','slow_query_log_file');
+---------------------+-----------------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------------+
| general_log_file | /data/mysql_3306/tmp/mysql_general.log |
| log_bin | ON |
| log_bin_index | /data/mysql_3306/binlog/mysql-bin.index |
| log_error | /data/mysql_3306/error/mysql_run.err |
| slow_query_log_file | /data/mysql_3306/slow/mysql_slow.log |
+---------------------+-----------------------------------------+
- 应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等
#.建议在操作系统层面创建审计管理员 audit_admin 对审计文件进行保护与定期备份,最好配置异地备份
#.建议在数据库层面创建审计管理员 audit_admin 对审计记录进行保护与定期备份,确保日志留存时间大于180天
入侵防范
- 应通过设定终端接入方式或网络地址范围,对通过网络进行管理的终端进行限制,只有通过指定ip或ip地址段的用户才可以登录
#.示例将 'user_bigdata'@'192.168.31.%' 进一步限制为 'user_bigdata'@'192.168.31.101'
update mysql.user set host='192.168.31.101' where user='user_bigdata' and host='192.168.31.%';
flush privileges;
- 应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞
#.建议定期对数据库进行漏扫,及时发现并修补漏洞
数据保密性
- 应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等(注:启用ssl恐难做到,程序改动较大)
#.建议为数据库启用SSL以保证重要数据在传输过程中的完整性
数据备份恢复
- 对数据库的备份策略进行确认,确保定期进行数据的备份恢复演练,并形成记录。恢复演练记录的格式参考如下:
部门 | 备份类型 | 备份工具 | 数据库名 | 备份文件 | 数据库ip | 数据库port | 备份大小 | 恢复开始时间 | 恢复结束时间 | 恢复时长 | 恢复状态 |
---|---|---|---|---|---|---|---|---|---|---|---|
资金 | Instance | xtrabackup | pay | pay.617.xbstream | 10.8.3.12 | 3406 | 99GB | 2018/06/18 06:20 | 2018/06/18 06:32 | 00:12:02 | success |
财务 | Instance | xtrabackup | fin | fin.617.xbstream | 10.8.3.32 | 3406 | 44GB | 2018/06/18 07:10 | 2018/06/18 07:15 | 00:05:13 | success |
- 应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地
#.有条件的话,建议配置异地实时备份(跨省或距离机房所在地超过30公里)
- 应提供重要数据处理系统的热冗余,保证系统的高可用性
#.建议配置主从复制,保障系统的高可用性