等保二级加固-MySQL数据库
mysql
Docker Compose部署
- docker-compose.yaml
version : '3'
services:
mysql_rdb:
container_name: mysql_rdb
# 重启策略
restart: always
image: mysql:5.7.42
ports:
- "3306:3306"
volumes:
- /home/mysql/conf:/etc/mysql/conf.d
- /home/mysql/data:/var/lib/mysql
environment:
# root 密码
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
加固配置
[mysqld]
innodb-buffer-pool-size=80M
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
lower-case-table-names=1
default-time-zone='+8:00'
# 开启日志
general_log=on
general_log_file=/var/lib/mysql/logs/mysql.log
slow_query_log=on
log-queries-not-using-indexes=on
slow-query-log-file=/var/lib/mysql/logs/slowquery.log
log_timestamps=SYSTEM
long_query_time=3
log-bin=mysql-bin
binlog_format=mixed
server-id=1
#密码策略插件
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT
## 密码最小8位长度
validate_password_length=8
## 密码至少要包含1个大小写字母
validate_password_mixed_case_count=1
## 密码至少要包含1个数字
validate_password_number_count=1
## 密码强度检查等级 1/MEDIUM
validate_password_policy=1
#登录失败处理插件
plugin-load-add=connection_control.so
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection_control_failed_connections_threshold=5
connection_control_min_connection_delay=108000
## 超时30分钟,默认是8小时
wait_timeout=1800
interactive_timeout=1800
## 此项配置后对所有用户有效,慎用!要求是密码过期不得超过90天
default_password_lifetime=90
账户配置
- 账户创建
- 账户创建后,删除原来的root账户。
# 创建用户:审核员
CREATE USER `auditor`@`localhost` IDENTIFIED WITH sha256_password BY '********' PASSWORD EXPIRE INTERVAL 90 DAY;
GRANT Select, Show Databases ON *.* TO `auditor`@`localhost`;
# 创建用户:操作员
CREATE USER `operator`@`localhost` IDENTIFIED WITH sha256_password BY '********' PASSWORD EXPIRE INTERVAL 90 DAY;
GRANT Alter, Alter Routine, Create, Create Routine, Create Temporary Tables, Create View, Delete, Drop, Event, Execute, File, Index, Insert, Lock Tables, Process, References, Reload, Replication Client, Replication Slave, Select, Show Databases, Show View, Trigger, Update ON *.* TO `operator`@`localhost`;
# 创建用户:管理员
CREATE USER `sadmin`@`localhost` IDENTIFIED WITH sha256_password BY '********' PASSWORD EXPIRE INTERVAL 90 DAY;
GRANT Create User, Shutdown ON *.* TO `sadmin`@`localhost`;
# 创建用户:安全员
CREATE USER `safter`@`localhost` IDENTIFIED WITH sha256_password BY '********' PASSWORD EXPIRE INTERVAL 90 DAY;
GRANT Grant Option ON *.* TO `safter`@`localhost`;
验证方法
- 身份鉴别:
- 应对登录用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度进行要求并定期更换。查看用户信息
# 用户信息
select user,host,password_expired,password_last_changed,password_lifetime from user;
#全局密码过期时间
select @@default_password_lifetime
# 查看密码复杂度等配置
show variables like '%validate_password%';
- 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;操作系统层面应限制同一用户连续失败登录次数;
show variables like '%connection%';
- 当进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听;
所有账户只能localhost访问,不可远程访问数据库。
- 访问控制
- 应对登录的用户分配账户和权限;
# 删除默认的root,创建管理员、审计员、安全员、普通用户账户。查询用户信息
select * from user;
- 应重命名或删除默认账号,修改默认账号的默认口令;应及时删除或停用多余的、过期的账户,避免共享账户的存在;
删除root账户
- 安全审计
# 查看日志开启情况
show variables like '%general_log%';
show variables like '%slow_query_log%';
show variables like '%log-bin%';
# 查看本地日志备份:Data开头的为MySQL数据库及日志备份、Log开头的为系统日志备份
cd /home//backup
# 另外,查看云端FTP备份。
- 入侵防范
所有用户只允许localhost访问。
备份数据并上传到FTP
- 脚本中的路径信息、FTP信息,需要结合服务器实际情况修改。
#!/bin/bash
#ftp用户名
FTP_USER=********
#ftp密码
FTP_PASS=********
#ftp地址
FTP_IP=ip地址
#要备份的数据
DATA=/home/mysql/data
#备份数据的压缩包
DataBakName=Data_$(date +"%Y%m%d").tar.gz
mkdir -p /home/backup
backDataPath=/home/backup
#删除本地180天前的数据
rm -rf $backDataPath/Data_$(date -d -180day +"%Y%m%d").tar.gz
cd $DATA
#压缩数据库文件为一个文件
tar zcf $backDataPath/$DataBakName *
#上传到FTP空间
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
passive
type binary
lcd $backDataPath
put $DataBakName
bye
END