网站搜索

Linux 的 12 个 MySQL/MariaDB 安全最佳实践


MySQL 是世界上最流行的开源数据库系统,MariaDB(MySQL 的一个分支)是世界上发展最快的开源数据库系统。安装MySQL服务器后,它的默认配置是不安全的,保护它是一般数据库管理中的基本任务之一。

另请阅读:初学者学习 MySQL/MariaDB – 第 1 部分

这将有助于强化和增强 Linux 服务器的整体安全性,因为攻击者总是扫描系统任何部分的漏洞,而数据库在过去一直是关键目标区域。一个常见的例子是暴力破解 MySQL 数据库的 root 密码。

在本指南中,我们将解释 Linux 上有用的 MySQL/MariaDB 安全最佳实践。

1. 安全MySQL安装

这是安装 MySQL 服务器后建议的第一个步骤,以确保数据库服务器的安全。该脚本通过要求您执行以下操作来帮助提高 MySQL 服务器的安全性:

  • 如果您在安装过程中没有设置,请为 root 帐户设置密码。
  • 通过删除可从本地主机外部访问的 root 帐户来禁用远程 root 用户登录。
  • 删除匿名用户帐户和测试数据库,默认情况下所有用户(甚至匿名用户)都可以访问它们。
mysql_secure_installation

运行后,设置 root 密码并输入 [Yes/Y] 并按 [Enter] 回答一系列问题。

2. 绑定数据库服务器到环回地址

此配置将限制来自远程计算机的访问,它告诉 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 以防止使用 [mysqld] 部分下的以下指令从 MySQL 内访问底层文件系统。

local-infile=0

4.更改MYSQL默认端口

Port 变量设置将用于侦听 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 的 ~/.bash_history)。设法访问此历史文件的攻击者可以轻松查看其中记录的任何密码。

强烈建议不要在命令行中输入密码,如下所示:

mysql -u root -ppassword_

当您检查命令历史记录文件的最后一部分时,您将看到上面输入的密码。

history 

连接 MySQL 的正确方法是。

mysql -u root -p
Enter password:

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

对于服务器上运行的每个应用程序,仅向负责给定应用程序的数据库的用户授予访问权限。例如,如果您有一个 WordPress 站点,请为 WordPress 站点数据库创建一个特定用户,如下所示。

mysql -u root -p
MariaDB [(none)]> CREATE DATABASE osclass_db;
MariaDB [(none)]> CREATE USER 'osclassdmin'@'localhost' IDENTIFIED BY 'osclass@dmin%!2';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON osclass_db.* TO 'osclassdmin'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

并记住始终删除不再管理服务器上任何应用程序数据库的用户帐户。

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

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

您可以在这里找到更多信息:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11.定期更改MySQL密码

这是一条常见的信息/应用程序/系统安全建议。您执行此操作的频率完全取决于您的内部安全策略。但是,它可以防止可能长期跟踪您的活动的“窥探者”访问您的 mysql 服务器。

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

12.定期更新MySQL服务器包

强烈建议定期升级 mysql/mariadb 软件包,以跟上供应商存储库的安全更新和错误修复。通常,默认操作系统存储库中的软件包已经过时。

yum update
apt update

对 mysql/mariadb 服务器进行任何更改后,请务必重新启动该服务。

systemctl restart mariadb		#RHEL/CentOS
systemctl restart mysql		#Debian/Ubuntu

另请阅读:15 个有用的 MySQL/MariaDB 性能调整和优化技巧

就这样!我们很高兴通过下面的评论表收到您的来信。请与我们分享上面列表中缺少的任何 MySQL/MariaDB 安全提示。