1.数据库存放位置检查
- mysql -uroot -p
- show variables where variable_name = ‘datadir’
加固
- set global datadir = ‘路径’
#my.cnf文件下添加 - datadir = ‘路径’
2.最小权限运行数据库
- ps 命令查看进程 ,grep过滤结果,使用下面命令查看运行mysql的用户
ps -ef | grep mysql
加固
- 创建低权限账号和组
groupadd mysql
useradd -r -g mysql mysql - 给新建账号添加密码
passwd mysql - 修改MYSQL安装目录的权限(提前关闭mysql服务)
chown -R mysl.mysql mysql安装路径 - 读写执行权限最小化755
chmod 755 mysql安装根路径
chmod 755 mysql安装后执行目录(bin)
chmod 755 mysql安装后lib库(libexec)
chmod -R go-rwx mysql数据存储目录(data)
5.重启mysql服务即可
service mysqld start
3.禁止使用MySQL命令历史记录
- find / -name “.mysql_histry”
加固 - echo “export MYSQL_HISTORY=dev/null” >> /etc/profile
- ln -s /dev/null .mysql_history文件路径
- rm -r .mysql_history文件路径
4.控制慢查询日志权限
如果没有开启慢查询表示安全
第一种方法
- 查看慢查询日志文件名称和路径
select @@slow_query_log_file;
#或者
show variables like ‘slow_query_log_file’; - 查看是否开启慢查询, slow_query_log 值:ON表示开启,OFF表示关闭
show variables like ‘%query%’;
第二种方法,直接查看mysql配置文件 /etc/my.cnf
- cat /etc/my.cnf
#看[mysqld]下面是否有以下配置: - logout=file
- slow_query_log=on
- slow_query_log_file=路径
- long_query_time=2
- 日志文件的权限
- ls -l 慢查询日志文件路径
加固
#修改慢查询日志权限如下
- chmod 660 慢查询日志文件
- chmod msyql.mysql 慢查询日志文件
5.控制通用日志文件权限
文件日志权限应满足660
没有开启慢查询表示安全
- 查看是否开启通用日志记录,general_log 为on表示打开功能
- 其中通用日志位置为show variables like ‘%general%’;
加固
- chmod 660 <log_file>
- chown mysql:mysql <log_file>
6.审计日志文件权限控制
查看审计文件权限是否超过660
- show variables like ‘%audit_log_file%’
查看权限 - ls -l 审计文件
加固#修改权限和所属权限
- chmod 660
- chown mysql:mysql
7.查看SQL版本是否需要打补丁
- show variables like ‘version’
8.删除test数据库
查看是否存在test默认数据库,需要进行删除
- show database
加固
- drop database test;
9.禁止读取本地文件
确定mysql数据库关闭读取文件内容,local_infile应为OFF
- show variables like ‘local_infile’
加固
临时设置
- set @@local_infile=0
永久设置 - 修改/etc/my.cnf 加入local-infile = 0
10.关闭原始日志功能
原始日志选项会决定一些敏感信息是否会被明文写进日志中,例如查询日志、慢查询日志、二进制日志,确保数据库配置文件中存在如下配置项
- 查看配置文件中是否有 log-raw=ON或者log-raw=1
- cat /etc/my.cnf
加固
#修改mysql 配置文件 /etc/my.cnf 加入 log-raw=0
11.数据库定时备份
加固
定时备份数据库
- 新建备份文件并赋予可以执行的权限
mkdir -p /home/mysql_backup/
touch /home/mysql_backup/mysql_backup.sh
chmod 551 /home/mysql_backup/mysql_backup.sh - 编辑/home/mysql_backup/mysql_backup.sh
vim /home/mysql_backup/mysql_backup.sh - 写入一下内容
backupdir=/home/mysql_backup
time=date +%Y_%m_%d_%H_%M_%S
db_user=root
db_pass=123456
mysqldump --all-databases -u d b u s e r − p db_user -p dbuser−pdb_pass | gzip > b a c k u p d i r / backupdir/ backupdir/time.sql.gz
find $backupdir -name “*.sql.gz” -type f -mtime +5 -exec rm -rf {} ; > /dev/null 2>&1 - 编辑crontab
crontab -e - 在最后一行加入
**/1 * * * root /home/mysql_backup/mysql_backup.sh - 重启crontab
- service crond restart