MySQL是世界上最流行的开源数据库系统, MariaDB (MySQL的一个分支)是世界上发展最快的开源数据库系统。 安装MySQL服务器后,默认配置是不安全的,保护它是通用数据库管理的基本任务之一。
另 请 参阅 : 了解初学者的MySQL / MariaDB - 第1部分
这将有助于加强整体Linux服务器安全性,因为攻击者总是扫描系统任何部分的漏洞,而数据库过去一直是主要的目标领域。 一个常见的例子是暴力破解MySQL数据库的根密码。
在本指南中,我们将解释Linux的有用的MySQL / MariaDB安全最佳实践。
1.安全的MySQL安装
这是安装MySQL服务器之后的第一个推荐步骤,即保护数据库服务器。 这个脚本通过要求你提高你的MySQL服务器的安全性:
- 如果您在安装过程中未设置密码,请为root帐户设置一个密码。
- 通过删除可从本地主机外部访问的根帐户来禁用远程root用户登录。
- 删除匿名用户帐户和测试数据库,默认情况下可以被所有用户访问,甚至匿名用户。
# mysql_secure_installation
运行后,设置root密码并输入[ Yes / Y ]并回答一系列问题,然后按[Enter] 。
安全的MySQL安装
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文件只能写入根目录。 这会阻止其他用户更改数据库服务器配置。
# chmod 644 /etc/my.cnf
7.删除MySQL Shell历史记录
在MySQL shell上执行的所有命令都由mysql客户端存储在历史文件中: 〜/ .mysql_history 。 这可能是危险的,因为对于您要创建的任何用户帐户,在shell中输入的所有用户名和密码都将记录在历史记录文件中。
# cat /dev/null > ~/.mysql_history
8.不要从命令行运行MySQL命令
正如你所知道的,你在终端上输入的所有命令都存储在历史文件中,具体取决于你使用的shell(例如〜/ .bash_history for bash)。 设法访问这个历史文件的攻击者可以很容易地看到在那里记录的任何密码。
强烈建议不要在命令行输入密码,如下所示:
# mysql -u root -ppassword_
用密码连接MySQL
当您检查命令历史文件的最后一部分时,您将看到上面输入的密码。
# 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 '[email protected]%!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安全提示。