「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。
这一章节我们需要知道MySQL的安全基线标准和加固方式。
MySQL基线检查
- 1、更新版本
- 2、普通用户运行
- 3、删除匿名账户和无关账户
- 4、修改弱口令
- 5、用户权限
- 6、文件权限
- 7、可信IP
- 8、开启日志
- 9、连接数限制
1、更新版本
在业务允许的情况下,安装新版本,修补漏洞。
select version();
查看MySQL版本,结合漏洞情报,判断是否需要安装最新版本。
2、普通用户运行
MySQL服务需要使用普通用户运行,比如mysql用户。
ps -ef | grep mysqld
属主PID是mysql 或者 运行参数指定了运行用户 --user=mysql
grep -i user /etc/my.cnf
数据库配置文件通过 user=mysql
指定了用户是mysql
如果运行用户不是mysql,就在 /etc/my.cnf 添加一行 user=mysql
3、删除匿名账户和无关账户
查询用户,用户名和密码字段为空的,就是匿名账户。
MySQL 5.7 以前:select user,password from mysql.user;
MySQL5.7 以后:select user,host,authentication_string from mysql.user;
删除匿名账户:delete from mysql.user where user='';
刷新权限后生效,否则还可以登录:flush privileges;
4、修改弱口令
修改数据库用户的弱口令。
MySQL 5.7 以前:select user,password from mysql.user;
MySQL 5.7 以后:select user,authentication_string from mysql.user;
MySQL5.7以前修改密码:
update user set password=password('1234567') where user='root';
flush privileges;
MySQL5.7以后修改密码:alter user 'root'@'localhost' identified by '1234567';
5、用户权限
按照软件安全设计的最小特权原则分配用户权限。
查看用户权限:show grants for root@localhost;
查看用户权限: select * from mysql.user where user='root'\G
设置权限 grant select on *.* to test@localhost;
删除权限 revoke select on *.* from test@localhost;
6、文件权限
ll ~/.mysql_history ~/.bash_history
权限600ll /etc/my.cnf
权限644find / -name *.ibd | xargs ls -al
权限600find / -name *.MYD | xargs ls -al
权限600find / -name *.MYI| xargs ls -al
权限600find / -name *.frm| xargs ls -al
权限600
7、可信IP
根据实际业务需求,设置可信IP访问。
查看所有用户和登录主机
select user,host from mysql.user;
修改指定用户的登录主机
update mysql.user set host = '192.168.153.197' where user = 'test';
flush privileges;
刷新权限生效
8、开启日志
在 /etc/my.cnf
添加一行 log-error=filename
,开启日志记录,重启服务生效。
9、连接数限制
根据实际业务设置最大连接数。
show variables like 'max_connections';
查看最大连接数。
如果每设置,就在数据库配置文件 /etc/my.cnf 中,添加一行 max_connections=1000
,重启服务生效。