0x01 MySQL的安全加固

补丁

  • 安全基线项说明:满足业务正常运行的前提下,安装新版本,修补漏洞
  • 检查方法
    查看 MySQL 的版本信息: select version();
  • 加固方法:安装最新版 http://www.mysql.com

检查口令

  • 安全基线项说明:确保数据库不存在弱口令,提高数据库安全性
  • 检查方法

    mysql> use mysql;
    mysql> select user,password from mysql.user;

将密码 hash 导入 cain 软件破解

  • 加固方法:将密码修改为复杂密码

    mysql> use mysql;
    mysql> update user set password=password('复杂的新密码') where user='需要修改的用户';
    mysql> flush privileges;

检查匿名账号

  • 安全基线项说明:确保数据库不存在匿名账户,提高数据库安全性
  • 检查方法

    mysql> use mysql;
    mysql> select user,password from mysql.user;

存在 user 和 password 字段均为空的行

  • 加固方法:删除匿名账户

    mysql> use mysql;
    mysql> delete from user where user='';
    mysql> flush privileges;

删除无关账号

  • 安全基线项说明:如果与业务和数据库无关的账号,应该删除
  • 检查方法

    mysql> use mysql;
    mysql> select user,password from mysql.user;

  • 加固方法:删除相关账户

    mysql> use mysql;
    mysql> delete from user where user='无关账号';
    mysql> flush privileges;

数据库授权

  • 安全基线项说明:合理设置用户权限,防止权限滥用
  • 检查方法

    mysql> show grants for test@localhost;

  • 加固方法:一般引用用户建议授予最小权限

    mysql> grant 权限1,权限2,权限n on 数据库名称.表名称 to 用户名@用户地址
    mysql> grant select,insert on db.table to test@localhost;

文件安全

  • 安全基线项说明:合理设置数据库文件权限,防止未授权访问或篡改
  • 检查方法

    # ls -al .mysql_history .bash_history 应为 600 权限
    # ls -al /etc/my.cnf 应为 644 权限
    # find / -name .MYD | xarge ls -al 应为 600 权限
    # find / -name .MYI | xarge ls -al 应为 600 权限
    # find / -name .frm | xarge ls -al 应为 600 权限

  • 加固方法:保护数据库文件,授予恰当的权限

    # chmod 600 .mysql_history .bash_history
    # chmod 600 .MYD .MYI .frm
    # chmod o-rw /etc/my.cnf

日志审核

  • 安全基线项说明:合理设置日志审核,保证安全事件发生可查询日志记录
  • 检查方法

    [mysql]
    log = filename

查看 my.cnf 或 my.ini 文件,查看是否包含如上设置

  • 加固方法:编辑my.cnf 或 my.ini 文件,保存后并重启
    [mysql]
    log-bin = /var/log/mysql/log-bin
    log = /var/log/mysql/mysql.log
    log-error = /var/log/mysql/mysql-err.log
    log-update = /var/log/mysql/mysql-upd.log

运行账户

  • 安全基线项说明:MySQL 服务以普通用户运行,防止数据库最高权限被利用
  • 检查方法

    # ps -ef | grep mysql
    # grep -i user /etc/my.cnf

  • 加固方法:编辑 my.cnf 文件

    [mysql.server]
    user=mysql

可信 IP 地址控制

  • 安全基线项说明:只允许可信任 IP 访问数据库,降低数据库风险
  • 检查方法

    mysql> select user,host from mysql.user;

查看可访问数据库的 IP 和 IP对应的账号

  • 加固方法:编辑 my.cnf 文件

    mysql> grant all privileges on . to '可信任用户'@'可信任IP地址' identified by '可信任用户密码' with grant option;

连接数限制

  • 安全基线项说明:根据业务需求设置数据库最大连接数
  • 检查方法

    [mysql]
    max_connections = 1000

    mysql> show variables like 'max_connections';

  • 加固方法:编辑my.cnf 或 my.ini 文件,保存后并重启

    [mysql]
    max_connections = 1000

Last modification:February 14th, 2020 at 06:39 am