Ubuntu上MySQL安全设置指南
在开始安全配置前,需确保系统及MySQL为最新版本。执行以下命令更新系统并安装MySQL:
sudo apt update && sudo apt upgrade -y
sudo apt install mysql-server -y
安装完成后,必须运行mysql_secure_installation脚本完成基础安全加固。该脚本会引导完成以下关键操作:
y移除所有匿名账户(避免未授权访问);y阻止root用户通过远程连接登录(降低被爆破风险);y删除默认的test数据库(避免敏感信息泄露);y使上述更改立即生效。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; # 刷新权限使更改生效
避免使用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;
默认情况下,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
使用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 # 查看防火墙状态
为防止数据在传输过程中被窃取,建议启用SSL/TLS加密:
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
编辑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
sudo systemctl restart mysql
sudo mysql -u root -p -e "SHOW VARIABLES LIKE '%ssl%';"
若have_ssl的值为YES,则表示SSL配置成功。
保持MySQL及系统为最新版本,及时修补安全漏洞:
sudo apt update && sudo apt upgrade mysql-server -y
定期检查MySQL日志(如/var/log/mysql/error.log),监控异常登录或操作;同时定期备份数据库(可使用mysqldump工具)。