MySQL-等保三级整改容器中的MySQL

记一次等保三级整改过程

数据库不合格项:

  • 密码复杂度不够
  • 需要设置密码过期时间
  • 数据库登录失败策略
  • 开启binlog

由于这台机器处在docker的容器中,和正常MySQL实例大同小异

1、安装docker

官网的安装步骤,很简单,几条命令即可
1.卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
				  
2.下载需要的安装包
yum install -y yum-utils

3.设置镜像仓库
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	
4.更新yum软件包索引
yum makecache fast

5.安装docker   --- docker-ce:社区版   ee:企业版
yum install -y docker-ce docker-ce-cli containerd.io

6.启动docker
systemctl start docker && systemctl enable docker

7.配置镜像加速(注意:加速器地址需要修改,这是自己的)
vim /etc/docker/daemon.json
{     
  "registry-mirrors": ["https://ulwu0fjj.mirror.aliyuncs.com"]
}

systemctl daemon-reload && systemctl restart docker

2、run一个数据库

docker run --name mysql -p 3316:3306 --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

--name 指定容器名字
-p 端口映射 主机端口:容器端口
-v 挂载数据卷 宿主机绝对目录:容器目录
--privileged=true 防止权限不足的报错
-e MYSQL_ROOT_PASSWORD=123 指定MySQL的密码
-d mysql:5.7 指定镜像版本

至此,测试环境和实际就一样了

3、整改密码复杂度

1.进入容器加载validate_password.so插件
docker exec -it 90b00aa0fe61 /bin/bash 
msyql> install plugin validate_password soname 'validate_password.so';
mysql> SHOW VARIABLES LIKE "%password%";
+----------------------------------------+-----------------+
| Variable_name                          | Value           |
+----------------------------------------+-----------------+
| default_password_lifetime              | 0               |
| disconnect_on_expired_password         | ON              |
| log_builtin_as_identified_by_password  | OFF             |
| mysql_native_password_proxy_users      | OFF             |
| old_passwords                          | 0               |
| report_password                        |                 |
| sha256_password_auto_generate_rsa_keys | ON              |
| sha256_password_private_key_path       | private_key.pem |
| sha256_password_proxy_users            | OFF             |
| sha256_password_public_key_path        | public_key.pem  |
| validate_password_check_user_name      | OFF             |
| validate_password_dictionary_file      |                 |
| validate_password_length               | 8               |
| validate_password_mixed_case_count     | 1               |
| validate_password_number_count         | 1               |
| validate_password_policy               | MEDIUM          |
| validate_password_special_char_count   | 1               |
+----------------------------------------+-----------------+
17 rows in set (0.01 sec)

插件加载以后,默认策略为:最少由8位组成的密码,并且包含数字、大写、小写、特殊符号。

4、设置密码过期时间

set global default_password_lifetime=180;
密码180天过期;0表示永不过期

5、设置登录失败处理策略

mysql> install plugin CONNECTION_CONTROL soname 'connection_control.so';
mysql> install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';
mysql> show variables like '%connection_control%';
+-------------------------------------------------+------------+
| Variable_name                                   | Value      |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 3          |
| connection_control_max_connection_delay         | 2147483647 |
| connection_control_min_connection_delay         | 1000       |
+-------------------------------------------------+------------+
3 rows in set (0.00 sec)

mysql> set global connection_control_failed_connections_threshold=5; #登陆失败次数限制
mysql> set global connection_control_min_connection_delay=300000;    #限制重试时间(毫秒)
此处策略为登录失败5次,限制5分钟。

6、开启binlog

run起来的MySQL容器默认没有/etc/my.cnf文件,binlog默认没有开启
可以执行 mysql --help|grep 'my.cnf' 查看程序读取的配置文件顺序:
root@90b00aa0fe61:/# mysql --help|grep 'my.cnf'
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

容器中很多命令都没有,不能vi、ps...等命令
容器内可以执行以下命令添加参数
root@90b00aa0fe61:/# echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf
root@90b00aa0fe61:/# echo 'server-id=1080176' >> /etc/mysql/mysql.conf.d/mysqld.cnf

也可以容器外执行以下命令
[root@docker /]# docker exec 483d3821ca35 bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
[root@docker /]# docker exec 483d3821ca35 bash -c "echo 'server-id=1080176' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

也可以在容器中直接 echo 到 /etc/my.cnf 文件,MySQL也会读取到
也可以在run容器的时候,指定的挂载数据卷/docker/mysql/conf目录中直接编辑my.cnf

之后重启容器即可
docker restart 容器ID
posted @ 2023-05-12 18:32  Enzo_Ocean  阅读(368)  评论(0编辑  收藏  举报