mysql安全基线设置

一、禁用local-infile选项 | 访问控制

禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力

编辑Mysql配置文件/etc/my.cnf,在[mysqld] 段落中配置local-infile参数为0,并重启mysql服务: 
``` 
local-infile=0
 ```

二、删除'test'数据库 | 服务配置

测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少mysql服务器的攻击面。

登陆数据库执行以下SQL语句删除test数据库:
```
DROP DATABASE test;
flush privileges;
```

三、确保没有用户配置了通配符主机名 | 身份鉴别

避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网

执行SQL更新语句,为每个用户指定允许连接的host范围。
1.  登录数据库,执行`use mysql;` ;
2.  执行语句`select user,Host from user where Host='%';`查看HOST为通配符的用户;
3.  删除用户或者修改用户host字段,删除语句:`DROP USER 'user_name'@'%';` 。更新语句:`update user set host = <new_host> where host = '%';`。
4.  执行SQL语句:
```
OPTIMIZE TABLE user;
flush privileges;
```

 

四、禁用symbolic-links选项 | 服务配置

禁用符号链接以防止各种安全风险

编辑Mysql配置文件/etc/my.cnf,在[mysqld] 段落中配置`symbolic-links=0`,5.6及以上版本应该配置为`skip_symbolic_links=yes`,并重启mysql服务。

 

五、修改默认3306端口 | 服务配置

避免使用熟知的端口,降低被初级扫描的风险

编辑/etc/my.cnf文件,[mysqld] 段落中配置新的端口参数,并重启mysql服务:
```
port=3506 
```

 

六、为Mysql服务使用专用的最低特权帐户 | 访问控制

使用最低权限帐户运行服务可减小MySQL天生漏洞的影响。受限帐户将无法访问与MySQL无关的资源,例如操作系统配置。

使用非root和非sudo权限用户启动Mysql服务

 

七、禁止使用--skip-grant-tables选项启动Mysql服务 | 访问控制

使用此选项,会导致所有客户端都对所有数据库具有不受限制的访问权限。

编辑Mysql配置文件/etc/my.cnf,删除skip-grant-tables参数,并重启mysql服务

 

八、确保配置了log-error选项 | 安全审计

启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。

编辑Mysql配置文件/etc/my.cnf,在[mysqld_safe] 段落中配置log-error参数,<log_path>代表存放日志文件路径,如:/var/log/mysqld.log,并重启mysql服务: 
```
log-error=<log_path>
```

九、确保log-raw选项没有配置为ON | 安全审计

当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。

编辑Mysql配置文件/etc/my.cnf,删除log-raw参数,并重启mysql服务

十、确保MYSQL_PWD环境变量未设置 | 身份鉴别

mysql_pwd环境变量的使用意味着mysql凭证的明文存储,极大增加mysql凭据泄露风险。

删除系统环境变量中Mysql密码(MYSQL_PWD)配置

十一、匿名登陆检查 | 身份鉴别

检查Mysql服务是否允许匿名登陆

登陆Mysql数据库,执行以下命令删除匿名帐户:
```
 delete from user where user='';
flush privileges;
```

posted @ 2019-12-26 17:37  凉生墨客  阅读(1942)  评论(0编辑  收藏