理论依据:
客户端连接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
理论依据:
减少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连接.
检查步骤:
使用如下命令查看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证书文件路径 不为空
配置要求:
以普通帐户安全运行mysqld,禁止mysql以管理员账号权限运行。
检查步骤:
使用以下命令查看mysqld进程的启动用户
合规标准:
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:
配置要求:
以普通帐户安全运行mysqld,禁止mysql以管理员账号权限运行。
审计步骤
检查步骤:
使用以下命令查看mysqld进程的启动用户
合规标准:
mysqld进程的启动用户不为administrator则合规,否则不合规.
加固方案
1、编辑数据库配置文件my.ini,在[mysqld]区域添加如下语句:
[mysqld]
user=mysql
2、重启mysql服务