ubuntu

mysql在ubuntu中的安全策略

小樊
47
2025-10-26 18:34:40
栏目: 云计算

1. 系统与MySQL基础安全初始化
在Ubuntu上部署MySQL前,需先通过sudo apt update && sudo apt upgrade更新系统至最新版本,修补潜在系统漏洞。安装MySQL时,优先使用官方APT仓库(sudo apt install mysql-server),确保软件来源可信。安装完成后,必须运行sudo mysql_secure_installation脚本,该脚本会引导完成以下关键操作:设置root用户强密码(包含大小写字母、数字和特殊字符,长度≥12位)、删除匿名用户(避免未认证访问)、禁止root用户远程登录(降低远程攻击风险)、删除默认test数据库(防止测试数据泄露)、重新加载权限表(使设置立即生效)。

2. 用户权限与访问控制
遵循最小权限原则创建用户并授予权限:避免直接使用root用户进行日常操作,而是为每个应用或用户创建专用账户。例如,创建仅能访问特定数据库的本地用户:CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!',然后按需授权:GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost',最后刷新权限:FLUSH PRIVILEGES。若需允许远程访问,应创建专门用户并限制其来源IP(如'app_user'@'192.168.1.%'),而非使用%通配符允许所有IP。定期审查用户权限(通过SELECT user, host, plugin FROM mysql.user;),删除闲置或未使用的账户。

3. 网络与连接安全配置
修改MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf),将bind-address从默认的127.0.0.1(仅允许本地连接)调整为所需IP(如0.0.0.0允许所有IP或特定IP段),以控制连接来源。使用ufw(Uncomplicated Firewall)限制MySQL端口(默认3306)的访问:sudo ufw allow from 192.168.1.0/24 to any port 3306 proto tcp(仅允许指定网段访问),然后启用防火墙:sudo ufw enable。若无需远程访问,建议保持bind-address127.0.0.1,彻底禁用远程连接。

4. 数据传输与存储加密
启用SSL/TLS加密保护数据传输:首先安装OpenSSL(sudo apt install openssl),然后生成私钥和证书: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配置文件,在[mysqld]部分添加:ssl-ca=/etc/mysql/ssl/mysql_certificate.crtssl-cert=/etc/mysql/ssl/mysql_certificate.crtssl-key=/etc/mysql/ssl/mysql_private.key,重启MySQL服务(sudo systemctl restart mysql)。此外,可通过SELECT * FROM performance_schema.session_status WHERE variable_name = 'Ssl_cipher'验证SSL是否生效。对于敏感数据(如用户密码、银行卡号),使用AES加密函数存储(INSERT INTO users (password) VALUES (AES_ENCRYPT('mypassword', 'encryption_key'));),查询时使用AES_DECRYPT解密。

5. 日志与监控审计
开启MySQL日志记录以追踪异常操作:编辑配置文件,在[mysqld]部分添加log_error = /var/log/mysql/mysql_error.log(错误日志,记录严重错误)、general_log = 1general_log_file = /var/log/mysql/mysql_general.log(通用查询日志,记录所有查询,生产环境谨慎开启以避免性能影响)。设置日志文件权限,仅允许MySQL用户读取:sudo chown mysql:mysql /var/log/mysql/*.logsudo chmod 640 /var/log/mysql/*.log。使用监控工具(如Percona Monitoring and Management、Zabbix或MySQL Enterprise Monitor)实时监控数据库性能指标(如CPU使用率、内存占用、连接数、慢查询),并设置告警阈值(如连接数超过100时触发邮件告警)。定期审查日志(如每天检查错误日志),识别异常行为(如频繁的登录失败、未授权的访问尝试)。

6. 系统与数据库维护
定期更新MySQL至最新版本(sudo apt update && sudo apt upgrade mysql-server),及时修补已知安全漏洞(如CVE漏洞)。制定加密备份策略:使用mysqldump工具备份数据库(mysqldump -u root -p --all-databases > /backup/mysql_all_$(date +%F).sql),并将备份文件存储在安全位置(如异地服务器、云存储),同时加密备份文件(如使用gpg加密:gpg -c /backup/mysql_all_$(date +%F).sql)。定期测试备份恢复流程(如每月一次),确保备份文件可用。清理旧备份文件(如保留最近7天的备份),避免占用过多存储空间。

0
看了该问题的人还看了