基线检查-MySQL5.x Linux&Windows

检查是否禁止mysql对本地文件存取

理论依据:
客户端连接web服务器时,可以使用SQL注入漏洞从web服务器读取文件。

配置要求:
禁用mysql对本地文件存取的功能。

检查步骤:
1、登录数据库;
2、执行如下sql查看local_infile参数值:
mysql>show variables like 'local_infile';

合规标准:
参数local_infile的值为OFF则合规,否则不合规。

加固方案

1、使用命令查找mysql配置文件:
#ps -ef|grep -i "mysqld\s"|awk '{for(i=1;i如果这条命令的结果输出为空,可通过下面的命令查看mysql默认读取my.cnf的目录,顺序排前的优先。
#mysqld --verbose --help 2>/dev/null|grep -A 1 "Default options"|grep -i "my.cnf"
如果第二条命令输出的my.cnf文件都不存在,说明没有给mysql指定配置文件,需要创建一个新的my.cnf
2、修改配置文件my.cnf,在文件中的[mysqld]区域插入如下内容:
local-infile = false
3、重启mysql服务
#service mysql restart

检查是否存在空密码

理论依据:
空密码允许用户不需要提供口令就可以成功登录数据库,从而使得目标设备的认证机制无效。

配置要求:
不允许存在空密码用户

检查步骤:
1、登录数据库;
2、执行如下sql查看数据库是否存在空密码的账号:
mysql>select User, Password from mysql.user where length(password) = 0 or password is null

合规标准:
系统不存在空密码的账号则合规,否则不合规。

加固方案

1、登录数据库。
2、查看密码为空的用户:
mysql>select User, Password from mysql.user where length(password) = 0 or password is null
3、对密码为空的用户进行密码修改,例如修改root账号的密码:
mysql>use mysql;
mysql>update user set password=password('******') where user='root';
mysql>commit;

检查是否配置日志功能

理论依据:
1、启用错误日志可以提高对MySQL恶意攻击的检测能力;
2、将MySQL日志移出数据库分区,可以有效降低通过耗尽mysql数据库可用磁盘空间导致的拒绝服务攻击;

配置要求:
数据库需要配置错误日志,以便于出现问题时更好分析原因和恢复

检查步骤:
1、登录数据库;
2、执行如下sql查看数据库错误和二进制日志配置:
mysql>show variables like 'log_error'
mysql>show variables like 'log_bin'

合规标准:
配置了数据库错误日志和二进制日志则合规,否则不合规。

加固方案

1、使用命令查找mysql配置文件:
#ps -ef|grep -i "mysqld\s"|awk '{for(i=1;i如果这条命令的结果输出为空,可通过下面的命令查看mysql默认读取my.cnf的目录,顺序排前的优先。
#mysqld --verbose --help 2>/dev/null|grep -A 1 "Default options"|grep -i "my.cnf"
如果第二条命令输出的my.cnf文件都不存在,说明没有给mysql指定配置文件,需要创建一个新的my.cnf
2、修改配置文件my.cnf,在文件中的[mysqld]区域插入如下内容:
log-bin = #开启二进制日志,将替换为实际日志存储路径
log-error = #开启错误日志,将替换为实际日志存储路径
3、重启mysql服务
#service mysql restart

检查是否更改默认mysql管理员账号

理论依据:
减少root账号和mysql数据库的交互次数,可以降低通过Mysql客户端出现的漏洞来破坏系统的可能性。

配置要求:
修改数据库管理员root的名称。

检查步骤:
1、登录数据库;
2、执行如下sql查看数据库是否存在root账号:
mysql>select user from mysql.user where user ='root'

合规标准:
数据库不存在名称为root的账号则合规,否则不合规。

加固方案

1、登录数据库
2、选择需要操作的数据库
mysql>use mysql;
3、修改root账号名称
mysql>update mysql.user set user="新用户名" where user="root";
mysql>commit;

检查是否存在匿名账户

理论依据:
匿名帐户是没有名字的用户,它们允许默认的登录和权限有时可以被其他用户使用。避免使用匿名帐户将确保只有可信的主体能够与MySQL进行交互。

配置要求:
删除匿名账户

检查步骤:
1、登录数据库;
2、执行如下sql查看账户名称为空的账号:
mysql>select count(user) from mysql.user where user=''\G

合规标准:
不存在账户名称为空的账号则合规,否则不合规。

加固方案

1、以管理身份登录数据库执行如下语句:
mysql>select * from mysql.user where user='';

2、对于查询到的用户使用以下步骤进行删除:
mysql>delete from mysql.user where user='' and host='';
mysql>commit;

检查是否使用ssl连接

理论依据:
SSL将保护敏感信息的机密性和完整性,因为它遍历不受信任的网络。

配置要求:
要求使用ssl连接.

检查步骤:
使用如下命令查看mysql数据库ssl配置:
mysql>show variables like 'ssl_key'
mysql>show variables like 'ssl_ca'
mysql>show variables like 'ssl_cert'
mysql>show variables like 'have_openssl'

合规标准:
启用了ssl则合规,否则不合规.

加固方案

have_openssl功能 启用
cert认证证书文件路径 不为空
认证秘钥文件 不为空
ca证书文件路径 不为空

检查是否禁止mysql以管理员账号权限运行

配置要求:
以普通帐户安全运行mysqld,禁止mysql以管理员账号权限运行。

检查步骤:
使用以下命令查看mysqld进程的启动用户

ps -ef|grep "mysqld"|grep -v "grep"|awk '{print $1}'

合规标准:
mysqld进程的启动用户不为root则合规,否则不合规.

加固方案

1、使用命令查找mysql配置文件:
#ps -ef|grep -i "mysqld\s"|awk '{for(i=1;i如果这条命令的结果输出为空,可通过下面的命令查看mysql默认读取my.cnf的目录,顺序排前的优先。
#mysqld --verbose --help 2>/dev/null|grep -A 1 "Default options"|grep -i "my.cnf"
如果第二条命令输出的my.cnf文件都不存在,说明没有给mysql指定配置文件,需要创建一个新的my.cnf
2、编辑/etc/my.cnf,在[mysqld]区域添加如下语句:
[mysqld]
user=mysql
3、重启mysql服务
#service mysql restart

Windows下mysql:

检查是否禁止mysql以管理员账号权限运行

配置要求:
以普通帐户安全运行mysqld,禁止mysql以管理员账号权限运行。
审计步骤
检查步骤:
使用以下命令查看mysqld进程的启动用户

tasklist /V /FI "IMAGENAME eq mysqld.exe"

合规标准:
mysqld进程的启动用户不为administrator则合规,否则不合规.
加固方案
1、编辑数据库配置文件my.ini,在[mysqld]区域添加如下语句:
[mysqld]
user=mysql
2、重启mysql服务

posted @ 2022-03-25 21:49  清汤自打  阅读(665)  评论(0编辑  收藏  举报