记一次等保三级整改过程
数据库不合格项:
- 密码复杂度不够
- 需要设置密码过期时间
- 数据库登录失败策略
- 开启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
标签:容器,整改,MySQL,cnf,connection,mysql,docker,password
From: https://www.cnblogs.com/log4g/p/17396034.html