12 个适用于 Linux 的 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以防止从 MySQL 内部访问底层文件系统[mysqld]
。
local-infile=0
4.更改MYSQL默认端口
Port变量设置用于侦听 TCP/IP 连接的 MySQL 端口号。默认端口号为3306,但您可以在[mysqld]部分下更改它,如下所示。
Port=5000
5.启用 MySQL 日志记录
日志是了解服务器上发生的情况的最佳方式之一,如果发生任何攻击,您可以轻松地从日志文件中查看任何与入侵相关的活动。您可以通过在部分下添加以下变量来启用 MySQL 日志记录[mysqld]
。
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 安全提示。