温馨提示×

Ubuntu MySQL数据库如何进行安全加固

小樊
49
2025-10-24 18:01:36
栏目: 云计算

Ubuntu MySQL数据库安全加固指南

1. 安装最新稳定版本的MySQL

首先,通过Ubuntu官方APT仓库安装MySQL服务器,确保获取最新的安全补丁和功能优化:

sudo apt update
sudo apt install mysql-server

安装完成后,立即通过mysql_secure_installation脚本完成初始安全配置(包括设置root密码、删除匿名用户、禁止远程root登录、删除测试数据库等)。

2. 运行安全初始化脚本

执行mysql_secure_installation工具,完成以下关键操作:

  • 设置root用户强密码(包含大小写字母、数字、特殊字符,长度≥12位);
  • 删除匿名用户(DELETE FROM mysql.user WHERE User='');
  • 禁止root用户远程登录(UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;);
  • 删除默认的test数据库(DROP DATABASE IF EXISTS test;);
  • 重新加载权限表(FLUSH PRIVILEGES;)。

3. 强化用户权限管理

  • 创建专用用户:避免使用root账户进行日常操作,创建仅具备必要权限的用户(如newuser),并限制其访问范围(如仅允许本地访问):
    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
    GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    
  • 遵循最小权限原则:仅授予用户完成工作所需的最小权限(如SELECTINSERT而非ALL PRIVILEGES)。

4. 配置SSL/TLS加密传输

为防止数据在传输过程中被窃取,启用MySQL SSL加密:

  • 安装OpenSSL:sudo apt install openssl
  • 生成证书和密钥:
    openssl genpkey -algorithm RSA -out /etc/mysql/mysql_private.key -aes256
    openssl req -new -key /etc/mysql/mysql_private.key -out /etc/mysql/mysql_csr.csr
    openssl x509 -req -days 365 -in /etc/mysql/mysql_csr.csr -signkey /etc/mysql/mysql_private.key -out /etc/mysql/mysql_certificate.crt
    
  • 修改MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf),在[mysqld]部分添加:
    ssl-ca = /etc/mysql/mysql_certificate.crt
    ssl-cert = /etc/mysql/mysql_certificate.crt
    ssl-key = /etc/mysql/mysql_private.key
    
  • 重启MySQL服务:sudo systemctl restart mysql

5. 调整防火墙规则

使用ufw(Uncomplicated Firewall)限制对MySQL端口(默认3306)的访问,仅允许信任的IP地址连接:

sudo ufw allow from <trusted_ip> to any port 3306/tcp
sudo ufw enable

若无需远程访问,可直接禁止3306端口:sudo ufw deny 3306/tcp

6. 禁用危险功能与修改默认端口

  • 禁用本地文件存取:在/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]部分添加local-infile=0,防止MySQL读取本地文件(如LOAD DATA LOCAL INFILE命令);
  • 修改默认端口:将MySQL默认端口3306更改为非标准端口(如37777),减少被自动化扫描工具发现的风险:
    [mysqld]
    port = 37777
    

修改后重启MySQL服务。

7. 启用日志与监控

  • 开启二进制日志:在/etc/mysql/mysql.conf.d/mysqld.cnf中添加log_bin = /var/log/mysql/mysql-bin.log,记录所有数据库变更操作,便于故障恢复和审计;
  • 记录慢查询日志:添加slow_query_log = 1long_query_time = 2(超过2秒的查询视为慢查询),帮助识别性能瓶颈和潜在攻击;
  • 定期审查日志:使用grepawk等工具分析日志,及时发现异常登录(如频繁的失败登录尝试)或恶意操作。

8. 定期更新与备份

  • 更新MySQL版本:定期运行sudo apt update && sudo apt upgrade mysql-server,安装最新的安全补丁,修复已知漏洞;
  • 定期备份数据:使用mysqldump工具定期备份数据库(如每日备份),并将备份文件存储在安全的位置(如异地服务器或云存储):
    mysqldump -u root -p mydatabase > /backups/mydatabase_$(date +%F).sql
    

9. 其他安全措施

  • 设置强密码策略:通过MySQL全局变量强制要求用户使用复杂密码:
    SET GLOBAL validate_password.policy = MEDIUM;  -- 密码需包含大小写字母、数字和特殊字符
    SET GLOBAL validate_password.length = 12;      -- 密码最小长度为12位
    
  • 禁用远程root登录:即使需要远程访问,也应创建专用用户(如remote_user)并授予特定权限,而非直接使用root账户。

0