温馨提示×

Ubuntu上MySQL安全设置指南

小樊
36
2025-11-10 16:54:19
栏目: 云计算

Ubuntu上MySQL安全设置指南

1. 安装MySQL服务器

在开始安全配置前,需确保系统及MySQL为最新版本。执行以下命令更新系统并安装MySQL:

sudo apt update && sudo apt upgrade -y
sudo apt install mysql-server -y

2. 运行安全初始化脚本

安装完成后,必须运行mysql_secure_installation脚本完成基础安全加固。该脚本会引导完成以下关键操作:

  • 设置root密码:为root用户创建强密码(包含大小写字母、数字和特殊字符);
  • 删除匿名用户:输入y移除所有匿名账户(避免未授权访问);
  • 禁止远程root登录:输入y阻止root用户通过远程连接登录(降低被爆破风险);
  • 删除测试数据库:输入y删除默认的test数据库(避免敏感信息泄露);
  • 重新加载权限:输入y使上述更改立即生效。

3. 修改root用户认证方式(可选但推荐)

MySQL 8.0及以上版本默认使用auth_socket插件认证root用户(仅本地登录无需密码),为提升安全性,建议切换为mysql_native_password插件:

sudo mysql -u root -p  # 使用root密码登录

在MySQL命令行中执行以下查询,确认root用户的认证方式:

SELECT user, authentication_string, plugin, host FROM mysql.user;

plugin列为auth_socket,则执行以下命令修改:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_strong_password';
FLUSH PRIVILEGES;  # 刷新权限使更改生效

4. 创建专用用户并授权(最小权限原则)

避免使用root用户进行日常操作,创建专用用户并授予其所需的最小权限:

sudo mysql -u root -p

在MySQL命令行中执行以下命令(以创建app_user用户为例,仅授予app_db数据库的所有权限):

CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'strong_password_123';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

若需允许远程访问,可将localhost替换为%(代表任意主机),但需谨慎使用:

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'secure_remote_password';
GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;

5. 配置MySQL监听地址(允许远程访问需谨慎)

默认情况下,MySQL仅监听本地地址(127.0.0.1),若需允许远程连接,需修改配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到bind-address配置项,将其值从127.0.0.1改为0.0.0.0(允许所有IP连接)或特定IP(如192.168.1.100):

bind-address = 0.0.0.0

保存文件并重启MySQL服务:

sudo systemctl restart mysql

6. 防火墙配置

使用ufw(Uncomplicated Firewall)开放MySQL默认端口(3306),仅允许可信IP访问:

sudo ufw allow from trusted_ip to any port 3306/tcp  # 替换trusted_ip为实际可信IP
sudo ufw enable  # 启用防火墙
sudo ufw status  # 查看防火墙状态

7. 配置SSL/TLS加密(保护数据传输)

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

7.1 安装OpenSSL并生成证书

sudo apt install openssl -y
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

7.2 配置MySQL使用SSL

编辑MySQL配置文件:

sudo nano /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

7.3 重启MySQL并验证SSL

sudo systemctl restart mysql
sudo mysql -u root -p -e "SHOW VARIABLES LIKE '%ssl%';"

have_ssl的值为YES,则表示SSL配置成功。

8. 定期更新与维护

保持MySQL及系统为最新版本,及时修补安全漏洞:

sudo apt update && sudo apt upgrade mysql-server -y

定期检查MySQL日志(如/var/log/mysql/error.log),监控异常登录或操作;同时定期备份数据库(可使用mysqldump工具)。

0