MySQL 是世界上最流行的开源数据库系统,MariaDB(一个 MySQL 分支)是世界上增长最快的开源数据库系统。在安装 MySQL 服务器之后,在默认配置下是不安全的,确保数据库安全通常是通用数据库管理的基本任务之一。

这将有助于增强和提升整个 Linux 服务器的安全性,因为攻击者总是扫描系统任意部分的漏洞,而数据库在过去是重点目标区域。一个常见的例子是对 MySQL 数据库的 root 密码的强制破解。

在本指南中,我们将会讲解对开发者有帮助的 MySQL/MariaDB 的 Linux 最佳安全实践。

1. 安全地安装 MySQL

这是安装 MySQL 服务器后第一个建议的步骤,用于保护数据库服务器。这个脚本可以帮助您提高 MySQL 服务器的安全性:

  • 如果您在安装期间没有设置 root 帐户的密码,马上设置它

  • 通过删除可从本地主机外部访问的 root 帐户来禁用远程 root 用户登录

  • 删除匿名用户帐户和测试数据库,默认情况下,所有用户、甚至匿名用户都可以访问这些帐户和测试数据库

  1. # mysql_secure_installation

在运行上述命令之后,设置 root 密码并通过输入 [Yes/Y] 和按下 [Enter] 键来回答一系列问题。

安全安装 MySQL 情况界面

2. 将数据库服务器绑定到 Loopback 地址

此配置将限制来自远程机器的访问,它告诉 MySQL 服务器只接受来自本地主机的连接。你可以在主配置文件中进行设置。

  1. # vi /etc/my.cnf                       [RHEL/CentOS]    

  2. # vi /etc/mysql/my.conf                    [Debian/Ubuntu]

  3. OR

  4. # vi /etc/mysql/mysql.conf.d/mysqld.cnf    [Debian/Ubuntu]

[mysqld] 部分中添加下面这一行

  1. bind-address = 127.0.0.1

3. 禁用 MySQL 的 LOCAL INFILE

作为安全性增强的一部分,您需要禁用 local_infile,使用下面的指令以防止在 [mysqld] 部分从 MySQL 中访问底层文件系统。

  1. local-infile=0

4. 修改 MySQL 的默认端口

设置端口变量用于监听 TCP/IP 连接的 MySQL 端口号。默认端口号是 3306,但是您可以在 *[mysqld] *中修改它。

  1. Port=5000

5、启用 MySQL 日志

日志是了解服务运行过程中发生了什么的最好的方法之一,在受到任何攻击的时候都可以很容易的从日志里看到任何入侵相关的行为。可以通过将下边的变量添加到配置文件[mysqld]部分来开启mysql日志功能。

  1. log=/var/log/mysql.log

6、设置合适的 MySQL 文件的访问权限

确保你已经为所有的 mysql 服务文件和数据路径设置了合适的访问权限。文件 /etc/my.conf 只能由 root 用户修改,这样就可以阻止其他用户修改数据库服务的配置。

  1. # chmod 644 /etc/my.cnf

7、删除 MySQL shell 历史

你在 MySQL shell 中执行的所有的命令都会被 mysql 客户端保存到一个历史文件:~/.mysql_history。这样是很危险的,因为对于你创建过的任何用户账户,所有的在 shell 输入过的用户名和密码都会记录到历史文件里面。

  1. # cat /dev/null > ~/.mysql_history

8. 不要在命令行中运行 MySQL 命令

正如你所知道的,你在终端上输入的所有命令都会被存储在一个历史文件中,具体取决于你正在使用的shell(例如 bash 的 shell 历史文件放在 ~/.bash_history)。攻击者访问这个历史文件可以很容易地看到记录在那里的任何密码。

非常不建议在命令行里面输入密码,如下:

  1. # mysql -u root -ppassword_

使用密码连接 MySQL

当你查看命令行历史文件的最后的部分时,可以看到之前输入过的密码。

  1. # history

查看命令行输入历史

推荐连接 MySQL 的方式是

  1. # mysql -u root -p

  2. Enter password:

9. 定义特定应用的数据库用户

对于每一个在服务器上运行的应用,只设置一个与该应用相关的数据库用户。例如你有一个 wordpress 网站,如下创建一个 wordpress 的数据库用户:

  1. # mysql -u root -p

  2. MariaDB [(none)]> CREATE DATABASE osclass_db;

  3. MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';

  4. MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';

  5. MariaDB [(none)]> FLUSH PRIVILEGES;

  6. MariaDB [(none)]> exit

并且要记住对于不再使用的数据库用户要删掉。

10. 使用额外的安全插件和库

MySQL 包含许多安全插件:验证客户端连接到 MySQL 服务器的请求、密码校验和敏感信息的安全存储等,这些都在免费版本中提供。

在这里可查看更多:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. 定期修改 MySQL 密码

定期修改密码是一个常见的信息/应用/系统安全建议。多久修改一次密码由你内部的安全策略决定。定期修改密码可以阻止长期跟踪你的“窥探者”,获取你的密码,登录你的 MySQL 服务器。

  1. MariaDB [(none)]> USE mysql;MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';MariaDB [(none)]> FLUSH PRIVILEGES;

12. 定期更新 MySQL Server 包

强烈建议定期从官方仓库更新 mysql/mariadb 包来获取最新的安全更新和错误改进。通常情况下操作系统中默认的包是过时的。

  1. # yum update

  2. # apt update

在对 mysql/mariadb server 进行任何修改之后,要重启服务。

  1. # systemctl restart mariadb        #RHEL/CentOS

  2. # systemctl restart mysql        #Debian/Ubuntu

分享到此结束,欢迎大家在文章下面评论,并且和我们分享文章中没有提到的安全提示。

英文原文: Web Design Trends To Watch Out For In 2018 原文地址: https://www.tecmint.com/mysql-mariadb-security-best-practices-for-linux/ 参与翻译: soaring, 凉凉_ 译文地址: https://www.oschina.net/translate/mysql-mariadb-security-best-practices-for-linux

推荐阅读

2018 年值得关注的 Web 设计趋势

RocketMQ 源码分析 - Message 顺序发送与消费

那些没说出口的研发之痛,做与不做微服务的几大理由

微信小游戏「跳一跳」技术手段高分秘籍实现

Spring干货汇总(含Spring Boot与Spring Cloud)

IntelliJ IDEA插件系列:五大装逼神器

我最常用的Intellij IDEA快捷键

最好用的 IntelliJ 插件 Top 10

长按指纹

一键关注



点击 “阅读原文” 看看本号其他精彩内容

12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践相关推荐

  1. MySQL 索引的最佳实践分享

    作者爱说话 忙忙碌碌的一周又过去了,这周最大的乐趣就是买了个小音箱,又可以下班的时候开始愉快的开始练琴了,程序员嘛,还是得培养点艺术细菌.哈哈 这周本来没想好写什么东西,刚好周五公司进行了内部技术分享 ...

  2. 后端传输大量log数据_京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展...

    数字化时代,数据库对任何企业而言都是其应用的核心资源.MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂.易于部署管理,且具有ACID特性.强大的SQL查询等特点,被各种业务系统作 ...

  3. 12个面向专业开发人员的VueJS最佳实践

    英文 | https://learnvue.co/2020/01/12-vuejs-best-practices-for-pro-developers/ 翻译 | 小爱 随着 VueJS的使用变得越来 ...

  4. 京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展

    云妹导读: 互联网公司业务往往都有着高并发.大数据量等特点,为了在激烈的市场竞争中占得先机,需要不断推陈出新,并做大量的促销运营活动.但由于互联网的特殊性,企业无法提前预判这些活动给技术架构带来的压力 ...

  5. mysql 主键 最佳实践_Spring Data Jpa + MySQL IDENTITY 主键下批量插入最佳实践

    Spring Data Jpa 虽然可以使用参数调整批量插入,但是仅限于主键策略不是 IDENTITY 的情况下,对于习惯了使用 IDENTITY 的 MySQL 选手来说,批量插入数据直接就悲剧了. ...

  6. RDS MySQL空间优化最佳实践

    在前三期介绍了RDS for MySQL参数优化,锁问题以及延迟优化最佳实践之后,本期将介绍存储空间相关的最佳实践.存储空间是RDS很重要的一个指标,在RDS的工单问题中,空间问题的咨询可以排在top ...

  7. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql

    从零开始安装mysql数据库 : 按照该顺序执行 :  a. 查看是否安装有mysql:yum list installed mysql*, 如果有先卸载掉, 然后在进行安装; b. 安装mysql客 ...

  8. mysql高可用最佳实践_mysql高可用方案

    1.一主多从 适用场景:数据实时性要求不高,读多写少. 实现方式:扩展slave数量,将读压力分散到多台slave机器上,以此解决数据库端的读性能瓶颈. 在实际应用场景中,MySQL复制90%以上都是 ...

  9. mysql 运维 最佳实践_Mysql 开发最佳实践

    1. Optimize Your Queries For the Query Cache 使用query cache来优化查询 Most MySQL servers have query cachin ...

最新文章

  1. 微信小程序开发 笔记
  2. 苹果手机透明桌面_苹果官网上,一个透明手机壳卖300多块钱,是不是在耍我们?...
  3. select 在各浏览器中显示option的测试结果分享
  4. 升腾联手VMware 发布首款本土化桌面虚拟化
  5. redis list命令操作
  6. php文件防删改,PHP实现增删改查以及防SQL注入
  7. 批发电脑配件_2019年10月电脑配件表
  8. 自动轨迹绘制的python代码_python 自动轨迹绘制的实例代码
  9. 华为nova 4e 3月14日发布:麒麟710+3200万前摄
  10. cas如何实现多系统间的相互认证_统一身份认证和单点登录的区别
  11. java第三方包学习之jsoup
  12. 设计模式(Design pattern—
  13. python学习:Python 包
  14. 大数据在消防安全中的新应用
  15. python连点封闭多边形_python实现根据给定坐标点生成多边形mask的例子
  16. C#学习笔记(三):值类型、引用类型及参数传递
  17. 各代iphone尺寸_iPhone尺寸
  18. 计算机学安杰拉,《朗文高级英语阅读参考-(上册)》.pdf
  19. node.js文件加密
  20. 基于标记的分水岭分割算法

热门文章

  1. linux split 命令 大文件 文件 分块 分割
  2. WEB 容器、WEB服务和应用服务器的区别与联系
  3. rose框架学习总结
  4. linux下字节对齐
  5. TCP/IP详解--学习笔记(12)-TCP的超时与重传
  6. 计算机地质应用软件,中国地质大学《质软件应用》作业报告.doc
  7. 由点到面(面试经验)
  8. 汉中职业技术学院计算机专业,2020年陕西省青年职业技能大赛计算机网络管理员决赛开幕式在汉中职院举行...
  9. 万能素材库_高中作文经典人物万能素材积累
  10. java 端口8161_ActiveMQ_Windows和Linux版本的安装部署