1、身份鉴别
要求:建议身份密码登录,身份标识具有唯一性,身份鉴别信息具有复杂度要求,密码长度最少为8位,密码由数字、字母大小写、特殊符号组成、并设置定期更换,更换时间最长位90天
(1)查看所有用户:
select user,host from mysql.user;
(2)查看密码复杂度插件
select * from mysql.plugin;
发现mysql8.0 并没有校验插件,然后查看插件包,发现有这个插件,则对该插件进行安装。
install plugin validate_password soname 'validate_password.so';
(3)卸载默认密码复杂度插件
uninstall plugin auth_socket.so;
(4)密码复杂度插件配置
show variables like 'validate%';
validate_password_check_user_name,ON为打开
validate_password_dictionary_file用于配置密码的字典文件,当validate_password_policy设置为STRONG时可以配置密码字典文件,字典文件中存在的密码不得使用
validate_password_length用来设置密码的最小长度,默认值是8最小是0
validate_password_mixed_case_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少同时拥有的小写和大写字母的数量,默认是1最小是0;默认是至少拥有一个小写和一个大写字母。
validate_password_number_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的数字的个数,默认1最小是0
validate_password_special_char_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的特殊字符的个数,默认1最小是0
(5)密码有效期配置
show global variables like 'default_password_lifetime';
修改命令
set global default_password_lifetime = 90;
查看修改结果
当password_lifetime 为null时,则代表该用户当前口令的有效期是使用的全局变量,而default_password_lifetime 为0代表有效期永远。
(6)查看密码有效期状态
select user,host,password_lifetime,password_last_changed from mysql.user;
2、测评内容
(1)查看失败锁定策略
show variables like "%connection_control%";
空表表示未安装插件,插件安装语句
install plugin connection_control soname "connection_control.so";
install plugin connection_control_failed_login_attempts soname 'connection_control.so';
查看插件状态
select plugin_name,plugin_status from INFORMATION_SCHEMA.PLUGINS where PLUGIN_NAME LIKE 'connection%';
对策略进行查询
show variables like "%connection_control%";
加固修改命令
set global connection_control_failed_connections_threshold = 5;
set global connection_control_max_connection_delay = 1800000;
set global connection_control_min_connection_delay = 1800000;
connection_control_failed_connections_threshold:在服务器增加后续连接尝试的延迟之前,允许客户端进行的连续失败连接尝试的次数。
connection_control_min_connection_delay:对于超出阈值的每个连续连接失败,要添加的延迟量。
connection_control_max_connection_delay:要添加的最大延迟。
(2)查看连接超时退出策略
show global variables like '%timeout';
这三个参数
wait_timeout
interactive_timeout
connect_timeout
加固修改命令如下
set global wait_timeout=1800;
set global interactive_timeout=1800;
set global connect_timeout=10;
3、远程管理测评内容
要求:建议远程管理数据库时建议使用堡垒机+ssh防止鉴别信息在网络传输过程中被窃听
(1)查询ssl是否开启 yes是开启了ssl,disable则表示没有
show variables like "%ssl%";
(2)开启ssl加密传输
set global have_openssl=yes;
set global have_ssl=yes;
(3)查询是否使用ssl
status
(4)生成ssl证书
退出数据库,我用的是Linux,所以到Linux命令行界面进行操作
查版本
mysql_ssl_rsa_setup
或
mysqld_ssl_rsa_setup
数据库安装位置
find ./ -name "mysql_ssl_rsa_setup"
find ./ -name "mysqld_ssl_rsa_setup"
数据库是默认有证书文件,所以执行时没有返回值
找证书位置
find ./ -name "*.pem"
(5)配置ssl证书
修改mysql配置文件,找到my.cnf
[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
[mysql]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem
重启数据库,然后再登录数据库查看
4、用户测评内容
(1)创建两个测试用户
一个测试用户为密码登录,一个为密码+ssl证书登录
create user 'test'@'%' identified by 'Test@123456';
create user 'testssl'@'%' identified by 'Test@123456' require ssl;
(2)分别用两个测试用户进行登录
服务器登录ssl账户进行测试是可以输密码直接进入的,所以我们用远程工具进行连接
客户端加入秘钥
5、访问控制测评
应对登录的用户分配账户和权限;
应重命名或删除默认账户,修改默认账户的默认口令
应及时删除或停用多余的、过期的账户,避免共享账户的存在;
应授予管理用户所需的最小权限,实现管理用户的权限分离;
要求:建议建立、操作员、审计员、安全管理员等角色,安全管理为制定安全策略人员、操作员为日常操作用户、审计员只需具有审计日志查看权限;实现用户所需权限最小化,和管理用户权限分离。
(1)创建3个角色
操作员:负责业务层面开发,对应我们开发人员。
审计员:只需对日志具有审查权限
管理员:拥有所有的权限,制定安全策略。
create role 'System','Security','guanliyuan';
(2)分配权限
grant all privileges on *.* to 'System'@'%' with grant option;
grant reload,process,Alter,Create User,Create View,select,show databases,show view,update,file on *.* to 'Security'
@'%';
grant reload,process,insert,select,show,create view,alter,insert,show database,show view, on *.* to 'guanliyuan'@'%';
(3)创建管理员用户
create user 'System'@'%' identified by 'System@123345';
create user 'Security'@'%' identified by 'Security@123345';
create user 'guanliyuan'@'%' identified by 'guanliyuan@123345';
(4)用户加入到角色中
grant 'System' to 'System'@'%';
grant 'Security' to 'Security'@'%';
grant 'guanliyuan' to 'guanliyuan'@'%';
激活各个角色
set global activate_all_roles_on_login=on;
6、安全审计
应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
要求:建议数据库开启安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
(1)查看审计开启情况
show global variables like 'log_timestamps';
show global variables like '%general%';
show global variables like '%log_bin%';
show global variables like '%log_error%';
show global variables like '%slow_query_log%';
log_timestamps表示记录审计日志的时间是从哪里获取。UTC是全球时间,system是系统当前时间,一般我们用当前时间
general_log表示审计功能是否开启
general_log_file表示审计信息的日志文件
log_bin表示二进制日志
log_bin_basename二进制日志的日志文件
log_error表示错误日志
slow_query_log表示慢日志
slow_query_log_file表示慢日志的日志文件
(2)开启审计功能
set global log_timestamps = SYSTEM;
set global general_log = ON;
set global general_log_file = /var/lib/mysql/general.log;
set global slow_query_log = ON;
set global slow_query_log_file = /var/lib/mysql/slow_query.log;
(3)查看审计文件
cat /var/lib/mysql/general.log
cat /var/lib/mysql/binlog
cat /var/lib/mysql/error.log
cat /var/lib/mysql/slow_query.log
标签:log,show,mysql,global,ssl,MySQL,加固,password,三级
From: https://blog.csdn.net/qq_41867674/article/details/139089864