12 条用于 Linux的MySQL/MariaDB 安全最佳实践

英文:tecmint,译文:oschina

www.oschina.net/translate/mysql-mariadb-security-best-practices-for-linux

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

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

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

1. 安全地安装 MySQL

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

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

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

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

# mysql_secure_installation

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

安全安装 MySQL 情况界面

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

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

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

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

OR

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

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

bind-address=127.0.0.1

3. 禁用 MySQL 的 LOCAL INFILE

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

local-infile=0

4. 修改 MySQL 的默认端口

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

Port=5000

5、启用 MySQL 日志

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

log=/var/log/mysql.log

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

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

# chmod 644 /etc/my.cnf

7、删除 MySQL shell 历史

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

# cat /dev/null > ~/.mysql_history

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

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

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

# mysql -u root -ppassword_

使用密码连接 MySQL

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

# history

查看命令行输入历史

推荐连接 MySQL 的方式是

# mysql -u root -p

Enterpassword:

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

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

# mysql -u root -p

MariaDB[(none)]>CREATEDATABASEosclass_db;

MariaDB[(none)]>CREATEUSER'osclassdmin'@'localhost'IDENTIFIEDBY'osclass@dmin%!2';

MariaDB[(none)]>GRANTALLPRIVILEGESONosclass_db.*TO'osclassdmin'@'localhost';

MariaDB[(none)]>FLUSHPRIVILEGES;

MariaDB[(none)]>exit

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

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

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

本文来自企鹅号 - 数据库开发媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的django

23.Django基础

Django基本配置 Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成...

3375
来自专栏小狼的世界

Tomcat 安装与配置

Tomcat 在官方网站中提供了两个 Windows 安装版本,一个是普通安装版,一个是解压版。普通安装版带了安装器,像我们安装其他Windows程序一样,可以...

841
来自专栏JetpropelledSnake

Linux学习笔记之Centos6.9安装Python3.6

如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,

461
来自专栏Azura技术分享

整合的Nginx为LNMP环境

接上前面的文章Nginx编译安装、CentOS MySQL5.5编译安装、PHP5.6编译安装、

90
来自专栏西安-晁州

Docker学习之Docker镜像基本使用

Docker学习之Docker镜像基本使用 获取镜像 命令格式:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[...

33011
来自专栏应兆康的专栏

Python Web - Flask笔记10

编写uwsgi配置文件: 在项目的路径下面,创建一个文件叫做yingjoy_uwsgi.ini的文件,然后填写以下代码: [uwsgi] # Djang...

692
来自专栏linux系统运维

Linux监控平台介绍,zabbix监控介绍,安装zabbix,忘记Admin密码如何做

1134
来自专栏企鹅号快讯

利用OnionScan对暗网进行搜索(一)

介绍一款扫描暗网中的隐藏服务,并收集一些潜在的泄漏数据的工具:OnionScan。这是一个非常棒的工具。 (一)首先我们需要做以下几件事: 1.配置运行的服务器...

3068
来自专栏Ryan Miao

linux centos中添加删除修改环境变量,设置java环境变量

前言 安装完软件必要添加环境变量。指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋。好吧,好记星不如烂笔头。当然,最重要的是,...

3436
来自专栏电光石火

Tomcat配置Web程序几种方式

Tomcat是我们常用的一种web应用服务器,特别是javaweb开发的时候往往使用的是tomcat服务器。在使用tomcat的过程中,我们常常会遇到配置t...

1785

扫码关注云+社区