温馨提示×

ubuntu下mysql安全加固措施

小樊
45
2025-10-18 08:55:06
栏目: 云计算

1. 运行安全初始化脚本
安装MySQL后,首要步骤是执行mysql_secure_installation脚本,完成基础安全配置:设置root用户强密码(包含大小写字母、数字和特殊字符,长度≥12位)、删除匿名用户(防止未授权访问)、禁止root远程登录(降低远程攻击风险)、删除测试数据库(避免敏感信息泄露),最后刷新权限使更改生效。

2. 强化用户权限管理

  • 创建专用用户:避免使用root进行日常操作,创建仅具备必要权限的用户(如CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'ComplexPass123!')。
  • 遵循最小权限原则:仅授予用户完成工作所需的最小权限(如GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'localhost'),避免过度授权。
  • 定期审查权限:通过SHOW GRANTS FOR 'app_user'@'localhost';查看用户权限,及时撤销不再需要的权限(如REVOKE DROP ON *.* FROM 'app_user'@'localhost';)。

3. 配置网络访问控制

  • 限制绑定地址:修改MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf),将bind-address0.0.0.0(允许所有IP连接)改为127.0.0.1(仅允许本地连接),减少远程攻击面。
  • 防火墙规则:使用ufw(Uncomplicated Firewall)仅允许必要端口(如SSH的22端口、MySQL的3306端口)的流量:sudo ufw allow 22/tcp && sudo ufw allow 3306/tcp && sudo ufw enable
  • 禁止远程root登录:通过SQL命令确保root用户无法从远程主机连接:UPDATE mysql.user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES;

4. 启用数据传输加密
为防止数据在传输过程中被窃取或篡改,配置MySQL使用SSL/TLS加密:

  • 生成SSL证书和密钥:openssl genpkey -algorithm RSA -out /etc/mysql/ssl/mysql_private.key -aes256 && openssl req -new -key /etc/mysql/ssl/mysql_private.key -out /etc/mysql/ssl/mysql_csr.csr && openssl x509 -req -days 365 -in /etc/mysql/ssl/mysql_csr.csr -signkey /etc/mysql/ssl/mysql_private.key -out /etc/mysql/ssl/mysql_certificate.crt
  • 配置MySQL:在/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]部分添加ssl-ca=/etc/mysql/ssl/mysql_certificate.crtssl-cert=/etc/mysql/ssl/mysql_certificate.crtssl-key=/etc/mysql/ssl/mysql_private.key
  • 重启服务:sudo systemctl restart mysql,并通过SHOW VARIABLES LIKE '%ssl%';验证SSL是否启用。

5. 定期更新与补丁管理
保持MySQL及系统软件包为最新版本,及时修补已知安全漏洞:

  • 更新软件包列表:sudo apt update
  • 升级MySQL:sudo apt upgrade mysql-server
  • 启用自动更新(可选):sudo apt install unattended-upgrades && sudo dpkg-reconfigure unattended-upgrades,确保系统自动安装安全补丁。

6. 日志管理与监控
启用日志记录以跟踪数据库活动,便于及时发现异常行为:

  • 启用通用查询日志:在/etc/mysql/mysql.conf.d/mysqld.cnf中添加general_log = 1general_log_file = /var/log/mysql/mysql-query.log,记录所有执行的SQL语句。
  • 启用慢查询日志:添加slow_query_log = 1slow_query_log_file = /var/log/mysql/mysql-slow.loglong_query_time = 2(记录执行时间超过2秒的查询),帮助优化查询性能并发现潜在攻击。
  • 定期审查日志:使用tail -f /var/log/mysql/mysql-query.log实时查看日志,或通过grep命令筛选异常操作(如grep "DROP" /var/log/mysql/mysql-query.log)。

7. 禁用危险功能
关闭MySQL中不必要的功能,降低安全风险:

  • 禁用本地文件加载:在/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]部分添加local-infile = 0,防止用户通过LOAD DATA LOCAL INFILE命令读取服务器本地文件。
  • 禁用远程表删除:设置sql_safe_updates = 1,要求DELETE或UPDATE语句必须包含WHERE条件,避免误操作导致数据丢失。

8. 定期数据备份
通过定期备份确保数据可恢复,应对数据丢失或勒索软件攻击:

  • 使用mysqldump工具备份数据库:mysqldump -u root -p --all-databases > /backup/mysql_all_databases_$(date +%F).sql
  • 存储备份文件:将备份文件存储在安全位置(如外部硬盘、云存储),并设置定期清理策略(如保留最近7天的备份)。

0