商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 系统应用 > 浅谈12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践

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

  发布于2026-06-07 阅读(0)

扫一扫,手机访问

MySQL 无疑是开源数据库领域的标杆,而它的分支 MariaDB 近年来增长势头也相当强劲。不过,装好 MySQL 之后,默认配置可谈不上安全——确保数据库安全,是每个 DBA 的基本功。这么做不仅能保护数据库本身,也能提升整个 Linux 系统的安全水平,毕竟攻击者总是无孔不入,数据库更是他们眼中的“肥肉”。暴力破解 root 密码,就是最常见的手段之一。

下面这 12 条最佳实践,都是经过实战检验的硬核内容,照着做就能让你的 MySQL/MariaDB 站稳脚跟。

1. 安全地安装 MySQL

安装完 MySQL 后第一件该做的事是什么?运行安全安装脚本。它能帮你解决几个关键问题:

  • 如果安装时没设 root 密码,现在赶紧设上
  • 删除那些允许从本地主机外部访问的 root 账户,从根源上禁用远程 root 登录
  • 清理匿名用户和测试数据库——默认情况下连匿名用户都能访问它们
# mysql_secure_installation

运行上述命令后,设置 root 密码,并通过输入 [Yes/Y] 和回车键回答一系列问题。浅谈12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践

安全安装 MySQL 的界面

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

这条配置会限制远程机器访问,告诉 MySQL 只接受来自本地主机的连接。改起来很简单,编辑主配置文件就行:

# vi /etc/my.cnf                       [RHEL/CentOS]    
# vi /etc/mysql/my.conf                [Debian/Ubuntu] 
# 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 的默认端口

3306 是默认的 TCP 监听端口,改掉它能让很多自动化扫描工具失效。在 [mysqld] 里设置:

Port=5000

5. 启用 MySQL 日志

日志是了解服务运行状况的最佳方式之一,一旦遭到攻击,也能从日志里找到入侵痕迹。在 [mysqld] 部分添加:

log=/var/log/mysql.log

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

确保所有 MySQL 服务文件和数据路径的权限都恰当。比如 /etc/my.cnf 只能由 root 修改,防止其他用户篡改数据库配置:

# chmod 644 /etc/my.cnf

7. 删除 MySQL shell 历史

你在 MySQL shell 里执行的所有命令都会被保存在 ~/.mysql_history 中。这非常危险——你创建过哪些用户、输入过什么密码,全都会记录下来。

# cat /dev/null > ~/.mysql_history

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

终端里输入的所有命令都会被 shell 的历史文件记录(比如 bash 的 ~/.bash_history)。攻击者一旦拿到这个文件,就能看到你输入的密码。强烈不建议像下面这样直接输密码:

# mysql -u root -ppassword_

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

使用密码连接 MySQL

查看命令行历史,就能看到之前输入的密码:

# history

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

查看命令行输入历史

正确的连接方式是这样的:

# mysql -u root -p
Enter password:

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

每个在服务器上运行的应用,只分配一个与该应用相关的数据库用户。比如你有一个 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 自带不少安全插件,比如验证客户端连接、密码强度校验、敏感信息加密存储等,这些在免费版本中就能用。更多信息可参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/security-plugins.html

11. 定期修改 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 Server 包

强烈建议从官方仓库定期更新 MySQL/MariaDB 包,以获取最新的安全补丁和错误修复。操作系统默认仓库里的版本往往比较老旧。

# yum update
# apt update

对 MySQL/MariaDB 做任何修改之后,别忘了重启服务:

# systemctl restart mariadb     # RHEL/CentOS
# systemctl restart mysql       # Debian/Ubuntu
本文转载于:https://www.jb51.net/LINUXjishu/596404.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注