欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL 操作系统加固配置

程序员文章站 2022-04-05 19:03:47
...

目录

  • 进入mysql数据库
  • 账号
  • 口令
  • 授权
  • 日志
  • 补丁
  • 网络连接
  • 可信IP地址访问控制
  • 连接数设置

进入MySQL数据库:

命令:mysql -u root -p

账号

以普通账户安全运行mysqld,禁止mysql以管理员账号权限运行

操作指南
  • 参考配置操作
    Unix 下以通过在/etc/my.cnf中设置:

[mysql.server]
user=mysql

vim /etc/my.cnf
MySQL 操作系统加固配置

  • 补充操作说明
    计算机入侵数据库是非常危险的,因此必须要用普通用户登录数据库,来进行操作,因此有必要对一些主机操作权限
    如下图所示:授权给部分主机权限
    MySQL 操作系统加固配置
检查方法
  • 判定条件

各种操作系统下以管理员权限运行。
Unix 下禁止以 root 账号运行 mysqld;

  • 检测操作

检查进程属主和运行参数是否包含–user=mysql类似语句:

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

这两行命令自己下去敲去,看是否包含-user=mysql类似语句。

应按照用户分配账号,避免不同用户间共享账号

操作指南
  • 参考配置操作

//创建用户,并指定特定用户,特定IP登录数据库
create user aaa@qq.com‘指定ip地址’ identified by ‘asyaxy’;
这样就创建了一个名为xxx的用户,密码为asyaxy,然后登录。
登录:mysql -u xxx -p asyaxy -h 192.168.2.114

mysql> mysql> insert into
mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_subject)values(“localhost”,“pppadmin”,password(“passwd”),",",");
这样就创建了一个名为:phplamp密码为:1234的用户。

//然后登录一下。

mysql>exit;

@>mysql -u phplamp -p
@>输入密码
mysql>登录成功

  • 补充操作说明
    具体操作跟着上面那些命令敲一下即可
检测方法
  • 判定条件
    不用名称的用户可以连接数据库

  • 检测操作
    使用不同用户连接数据库

应删除或锁定与数据库运行、维护等工作无关的账号

操作指南
  • 参考配置操作

DROP USER 语句用于删除一个或多个MySQL账户。要使用 DROP USER,必须拥有mysql 数据库的全局 CREATEUSER 权限或 DELETE 权限。
账户名称的用户和主机部分与用户表记录的User和Host列值相对应。
使用 DROPUSER,您可以取消一个账户和其权限,操作如下: DROP USER user;
该语句可以删除来自所有授权表的帐户权限记录。

先对账户进行筛选,找出无用账户,并删除
查看筛选:select user , host , password from mysql.user;
删除用户:drop user ‘’@‘mysql’, ‘’@‘localhosy’, ‘root’@’::1’,‘root’@‘mysql’;
再次查看是否删除成功

  • 补充操作说明

要点:
DROP USER 不能自动关闭任何打开的用户对话。而且,如果用户有打开的对话,此时取消用户,则命令不会生效,直到用户对话被关闭后才生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。

检测方法
  • 检测操作:

mysql 查看所有用户的语句
输入指令
select user();
select user ,host ,password from mysql.user;
依次检查所列出的账户是否为必要账户,删除无用户或过期账户。
MySQL 操作系统加固配置
注:无关的账号主要指测试帐户、共享帐号、长期不用账号(半年以上不用)等

口令

检查帐户默认密码和弱密码

操作指南
  • 参考配置操作
    修改帐户弱密码
    如要修改密码,执行如下命令:

MySQL 操作系统加固配置

mysql> update user set password=password(test!p3’) where user=root’;
mysql> flush privileges;

  • 补充操作说明、
检测方法
  • 判定条件
    密码长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类。
    四分之三原则

  • 检测操作
    检查本地密码:(注意,管理帐号 root 默认是空密码)

mysql> use mysql;
mysql> select Host,User,Password,Select_priv,Grant_priv from user;

授权

在数据库权限配置能力内,根据用户的业务需要,配置其所需的最小权限。

操作指南
  • 参考配置操作
    合理设置用户权限,撤销危险授权

  • 补充操作说明

检测方法
  • 判定条件
    确保数据库没有不必要的或危险的授权
  • 检测操作
    查看数据库授权情况:
    SHOW GRANTS FOR ; ‘xxx’@‘localhost’
    授权并创建用户,给定密码:
    grant 权限 on 权限范围 to 用户 identified by ‘密码’
    移除访问权:
    REVOKE SELECT ON 库名. 表名 FROM ‘xxx’@‘localhost’;
    FLUSH PRIVILEGES;

mysql> use mysql;
mysql> select * from user;
mysql> select * from db;
mysql> select * from host;
mysql> select *from tables_priv;
mysql>select * from columns_priv;

回收不必要的或危险的授权,可以执行revoke命令:

mysql> help revoke
Name: ‘REVOKE’
Description:
Syntax:
REVOKE
priv_type [(column_list)]
[priv_type[(column_list)]]…
ON [object_type]
{
*
| .
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name

            } 
    FROM user [,user]...

日志

数据库应配置日志功能

操作指南

mysql 有以下几种日志:

错误日志: -log-err
查询日志: -log (可选)
慢查询日志:-log-slow-queries (可选)
更新日志:-log-update
二进制日志: -log-bin

在mysql 的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启 mysql 服务就行了。

例如:
#Enter a name for the binary log. Otherwise a default name will be used.
#log-bin=
#Enter a name for the query log file.Otherwise a default name will be used.
#log=
#Enter a name for the error log file.Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a de fault name will be used.
#log-update=
上面只开启了错误日志,要开其他的日志就把前面的“#”去掉

  • 补充操作说明
    1、show variables like ‘log_%’;查看所有的log命令
    2、show variables like ‘log_bin’;查看具体的log命令
检测方法
  • 判定条件
    启用审核记录对数据库的操作,便于日后检查

  • 检测操作
    打开/etc/my.cnf文件,查看是否包含如下设置(没有加上就行):

[mysqld]
log = filename

补丁

系统安装了最新的安全补丁 (注:在保证业务及网络安全的前提下,经过兼容性测试后)

操作指南
  • 参考配置操作
    下载并安装最新mysql安全补丁

  • 补充操作说明
    安全答报和补丁下载网址是htp://www.mysql.com

检测方法
  • 判定条件
    确保数据库为企业版,并且安装了最新安全补丁。如果是不安全的社区版,建议替换为企业版(收费)
  • 检测操作
    使用如下命令查看当前补丁版本:

mysql> SELECT VERSION();

网络连接

禁止网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。(仅限于应用和数据库在同一台主机的情况)

操作指南
  • 参考配置操作
    如果数据库不需远程访问,可以禁止远程tcp/ip连接,通过在mysqld 服务器中参数中添加 --skip-networking 启动参数来使mysql 不监听任何TCP/IP连接,增加安全性。
    强迫MySQL仅监听本机,方法是在my.cnf的[mysqld]部分增加下面一行:
    bind-address=127.0.0.1
  • 补充操作说明
检测方法
  • 判定条件

远程无法连接

  • 检测操作

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

或从客户机远程 telnet mysqlserver 3306

可信IP地址访问控制

通过数据库所在操作系统或防火墙限制,只有信任的IP地址才能通过监听器访问数据库。

操作指南
  • 参考配置操作
    执行命令:mysql> GRANT ALL PRIVILEGES ON db.*
    一> 一> TO 用户名@’IP子网/掩码’;
    只有通过指定 IP地址段的用户才可以登录

  • 补充操作说明

检测方法
  • 判定条件
    在非信任的客户端以数据库账户登陆被提示拒绝。

  • 检测操作
    用户从其它子网登录,将被拒绝

禁止非授权用户访问本地文件

禁用”LOAD DATA LOCAL INFILE”命令
以防止sql注入

  • 在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令:
    mysql> SELECT load_file("/etc/passwd")
  • 为禁用LOCAL INFILE命令,应当在MySQL的/etc/my.cnf的配置文件的[mysqld]部分增加下面的参数:
    set-variable=local-infile=0

连接数设置

根据机器性能和业务需求,设制最大最小连接数。

操作指南
  • 参考配置操作
    编辑 MySQL 配置文件:my.cnf 或者是 my.ini
    在[mysqld]配置段添加:
    max_connections=1000
    保存,重启MySQL 服务。
检测方法
  • 检测操作
    用命令:SHOW [FULL] PROCESSLIST 显示哪些线程正在运行
    mysql admin -uroot -p variables
    输入 root 数据库账号的密码后可看到
    |max connections | 1000 |

MySQL 操作系统加固配置

相关标签: 中间件