Ubuntu 上保护 MariaDB 的实用加固清单
一 基础加固与最小暴露
- 运行安全初始化向导,设置强密码,删除匿名账户与测试库,并禁止 root 远程登录:执行 mysql_secure_installation。
- 将 MariaDB 仅绑定到本地回环,编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,在 [mysqld] 加入:bind-address = 127.0.0.1(如确需远程,仅绑定内网地址并配合防火墙白名单)。
- 禁用本地文件读取,防止通过 SQL 注入读取敏感文件:在 [mysqld] 加入:local-infile=0。
- 限制可被导入导出的目录,避免任意文件读写:设置 secure_file_priv=/var/lib/mysql-files(或你指定的安全目录),并在 MariaDB 中确认:SHOW VARIABLES LIKE ‘secure_file_priv’;。
- 运行身份与文件权限:确认服务以 mysql 用户运行;数据目录(如 /var/lib/mysql)权限建议 700,配置文件 /etc/mysql/ 建议 644;清理敏感历史:cat /dev/null > ~/.mysql_history 或 ln -s /dev/null ~/.mysql_history。
- 避免命令行明文密码:使用 mysql -u root -p 交互输入,不在命令行中拼接密码。
二 账户与权限最小化
- 为每个应用创建最小权限的专用账户,避免使用 root 直连应用;示例:
- CREATE DATABASE appdb;
- CREATE USER ‘appuser’@‘192.168.1.50’ IDENTIFIED BY ‘StrongPass!’;
- GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO ‘appuser’@‘192.168.1.50’;
- FLUSH PRIVILEGES;
- 避免使用通配主机 ‘appuser’@‘%’;如必须远程,仅允许受控来源(单 IP 或内网网段),并在网络层再做白名单限制。
- 清理高危权限:非管理员不应拥有 FILE、PROCESS、SUPER 等权限;如误授予可执行:REVOKE FILE ON . FROM ‘user’;。
- 定期检查账户与来源主机:SELECT user,host FROM mysql.user;,确保不存在异常来源或过期账户。
三 网络与系统层防护
- 防火墙仅放行必要流量:使用 UFW 仅开放 SSH(22/自定义) 与数据库所在内网网段访问(如应用与数据库同机,则数据库端口不对公网开放)。
- 部署 Fail2ban 监控暴力登录:
- 安装:apt-get install fail2ban;
- 复制配置:cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local;
- 启用 SSH 监狱(示例):
- [sshd]
- enabled = true
- port = ssh
- logpath = /var/log/auth.log
- maxretry = 3
- bantime = 3600
- 启动:systemctl restart fail2ban && systemctl status -l fail2ban。
- 保持系统与数据库更新:定期 apt update && apt upgrade;对长时间运行场景启用 Canonical Livepatch 减少内核重启风险。
- 架构建议:数据库与公网服务解耦,数据库置于内网/VPC,仅允许应用服务器访问。
四 日志、审计与持续维护
- 启用与保留日志:在 [mysqld] 配置 log=/var/log/mysql.log(或按发行版配置错误日志/慢查询日志),并确保日志文件权限与轮转策略合理,便于事后取证。
- 定期审计与安全巡检:复核用户权限、来源主机、异常登录与慢查询;对关键操作建立变更记录与回滚预案。
- 持续加固:保持软件包与安全补丁更新,结合配置基线巡检与自动化合规检查,形成闭环。
五 快速核查清单
| 检查项 |
期望状态/示例 |
| root 远程登录 |
已禁用(仅本地或跳板机可 sudo 到系统后本地登录) |
| 匿名用户与 test 库 |
已删除 |
| 绑定地址 |
127.0.0.1(或内网地址),公网不直连 3306 |
| 本地文件读取 |
local-infile=0 |
| 导入导出目录 |
secure_file_priv 为固定安全目录 |
| 应用账户 |
最小权限、来源 IP/网段白名单 |
| 高危权限 |
仅管理员拥有 FILE/PROCESS/SUPER |
| 防火墙 |
仅放行 SSH 与内网数据库访问 |
| Fail2ban |
已启用并监控 SSH/数据库相关日志 |
| 日志与审计 |
启用错误/慢查询日志,定期审计与轮转 |
以上措施按“最小暴露—最小权限—纵深防御”的顺序实施,可显著降低被暴力破解、SQL 注入与横向渗透的风险。