LANMP安全配置之MySQL安全配置

0x00前言上周学习了一下LANMP安全配置之Apache安全配置用的最多的数据库就是MySQL了所以这周继续学习一下MySQL安全配置还是参考《PHPWeb安全开发实战》一书,再做一些补充0x01密码设置安装成功后第一件事就是改root默认密码,然后设置复杂密码5.5以前,rpm包安装完MySQL后,root用户密码为空5.6中,rpm包安装完MySQL后,会随机生成一个root密码,保存在/r...

LANMP安全配置之MySQL安全配置
0x00 前言

上周学习了一下LANMP安全配置之Apache安全配置
用的最多的数据库就是MySQL了
所以这周继续学习一下MySQL安全配置
还是参考《PHP Web安全开发实战》一书,再做一些补充

0x01 密码设置

安装成功后第一件事就是改root默认密码,然后设置复杂密码

  • 5.5以前,rpm包安装完MySQL后,root用户密码为空
  • 5.6中,rpm包安装完MySQL后,会随机生成一个root密码,保存在/root/.mysql_secret
  • 5.7以后,使用mysqld --initialize初始化时,默认会自动生成随机密码,并且不创建除root@localhost 外的其他账号,也不创建test库;
0x02 权限安全

在了解权限分配之前
先了解以下MySQL下的几个控制权限的表

  • USER 可列出可以连接服务器的用户及其口令,并且指定有哪种全局权限。这里指定的权限适用于所有数据库。
  • DB 列出数据库。这里指定的权限适用于所有某个数据库的所有表。
  • HOST 控制特定主机对数据库的访问权限
  • TABLES_PRIV 制定表级权限。这里指定的权限适用于某个表的所有列。
  • COLUMNS_PRIV 制定列级权限。这里指定的权限适用于某个表的所有特定列。
  • 另外 INFORMATION_SCHEMA也保存一些权限信息,是为DBA提供元数据的一种方式,但它实际上是一个视图,不是表。

    再了解一下权限分配验证流程
    PHP与数据库进行连接登录时
    第一步,身份认证。先从USER表判断IP、用户名、密码是否存在
    第二步,权限分配。按照USER->DB->TABLES_ PRIV->COLUMNS_PRIV的顺序进行梯级验证。
    验证过程中,如果USER表中对应权限为Y,则此用户对所有数据库的权限全为Y,将不再验证DB、TABLES_ PRIVH和COLUMNS_PRIV;如果为N,则往下一级(DB)进行验证。

    所以MySQL中的权限安全配置:
    (1)针对每个网站建立一个单独的账户
    (2)为每个网站单独建立一个专属数据库
    (3)按照user->db->tables_priv->columns_pri的顺序进行细粒度的权限控制
    (4)为每个用户单独配置一个专属数据库,保证当前用户的所有操作只能发生在它自己的数据库中,防止SQL注入发生后,黑客通过注入点访问到系统表

    0x03 网络配置

    MySQL默认使用3306端口
    1.限制IP
    对于MYSQL的限制访问IP,可从两个方面达到目的
    (1)主机层
    Windows下,可通过Windows防火墙
    Linux下,可通过iptables来限制允许访问的IP
    Eg:只允许192.168.1.0网段进行访问

    iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 3306 -j ACCEPTiptables -P INPUT DROP

    (2)应用层
    在USER表中限制root账户只能在本机登录
    如图

    2.修改端口
    Windows,在MySQL配置文件my.ini中设置
    Linux,MySQL配置文件为my.cnf

    port = 3306

    在这里插入图片描述
    3.限制单个用户的连接数量
    更改my.ini中max_connections=值,保存文件,重启mysql服务。
    在这里插入图片描述

    0x04 MySQL日志

    启动MySQL日志来帮助加固MySQL安全
    MySQL下有以下几种日志

    • 错误日志:log-error="/logs/mysql.log"
    • 查询日志:log="/logs/mysql.log"
    • 慢查询日志:log-show-queries="/logs/mysql_show.log"
    • 更新日志:log-update="/logs/mysql_update.log"
    • 二进制日志:log-bin="/logs/bin"

    查看日志是否开启命令:

    show variable like 'log_%';
    源文地址:https://www.guoxiongfei.cn/csdn/4646.html
    0