首页主机资讯如何配置Linux MySQL安全设置

如何配置Linux MySQL安全设置

时间2025-11-10 22:06:03发布访客分类主机资讯浏览1369
导读:1. 修改默认配置文件限制访问 编辑MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/my.cnf),修改以下两项: 绑定本地地址:将bind-address设置为127.0.0....

1. 修改默认配置文件限制访问
编辑MySQL配置文件(通常位于/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf),修改以下两项:

  • 绑定本地地址:将bind-address设置为127.0.0.1,限制MySQL仅监听本地连接,避免暴露在公网;
  • 禁用DNS解析:添加skip-name-resolve,防止MySQL通过DNS解析主机名,提升连接性能并减少DNS欺骗风险。
    修改后重启MySQL服务使配置生效:sudo systemctl restart mysql

2. 强化root账户安全

  • 设置强密码:登录MySQL后,使用ALTER USER命令为root用户设置包含大小写字母、数字和特殊字符的强密码(长度不低于12位):
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword!';
        
    FLUSH PRIVILEGES;
        
    
  • 限制远程访问:默认情况下,root用户允许从任何IP远程登录,需修改其Host字段为localhost,仅允许本地访问:
    UPDATE mysql.user SET Host='localhost' WHERE User='root' AND Host='%';
        
    FLUSH PRIVILEGES;
        
    
  • 禁用默认账户与测试数据库:删除匿名用户(无法通过密码验证的用户)和测试数据库(默认创建的空数据库),避免未授权访问:
    DELETE FROM mysql.user WHERE User='';
        
    DROP DATABASE IF EXISTS test;
        
    FLUSH PRIVILEGES;
        
    

3. 创建专用用户并实施最小权限原则
避免使用root用户进行日常操作,创建专用用户并授予最小必要权限(如仅需访问特定数据库的SELECTINSERT权限):

-- 创建用户(指定允许访问的主机,如localhost或特定IP)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'AppSpecificPassword!';
    
-- 授予特定数据库的只读权限(示例)
GRANT SELECT, INSERT ON my_database.* TO 'app_user'@'localhost';
    
-- 刷新权限使变更生效
FLUSH PRIVILEGES;
    

定期审核用户权限,使用SHOW GRANTS FOR 'app_user'@'localhost'; 查看用户权限,及时回收不必要的权限(如REVOKE DELETE ON my_database.* FROM 'app_user'@'localhost'; )。

4. 配置密码安全策略

  • 启用密码插件:安装validate_password插件,强制密码符合复杂性要求(如长度、大小写字母、数字、特殊字符):
    INSTALL PLUGIN validate_password SONAME 'validate_password.so';
        
    -- 设置密码长度至少12位,包含至少1个大写字母、1个特殊字符
    SET GLOBAL validate_password_length = 12;
        
    SET GLOBAL validate_password_mixed_case_count = 1;
        
    SET GLOBAL validate_password_special_char_count = 1;
        
    
  • 设置密码有效期:通过全局变量或用户级别设置密码过期时间(如全局90天,用户级别180天),强制用户定期更改密码:
    -- 全局设置(需修改my.cnf配置文件并重启服务)
    SET GLOBAL default_password_lifetime = 90;
        
    -- 用户级别设置(覆盖全局策略)
    ALTER USER 'app_user'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
        
    
  • 使用强认证插件:优先使用caching_sha2_password(MySQL 8.0+默认)替代旧的mysql_native_password,提升密码存储安全性:
    ALTER USER 'app_user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'AppSpecificPassword!';
        
    

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

  • 生成证书与密钥:使用MySQL自带的mysql_ssl_rsa_setup工具生成自签名证书(生产环境建议使用CA颁发的证书):
    sudo mysql_ssl_rsa_setup --datadir=/etc/mysql/ssl
    
  • 配置MySQL启用SSL:编辑my.cnf文件,在[mysqld]部分添加证书路径:
    [mysqld]
    ssl-ca=/etc/mysql/ssl/ca.pem
    ssl-cert=/etc/mysql/ssl/server-cert.pem
    ssl-key=/etc/mysql/ssl/server-key.pem
    
  • 强制用户使用SSL:修改用户权限,要求其连接时使用SSL(如app_user用户):
    ALTER USER 'app_user'@'localhost' REQUIRE SSL;
        
    
  • 验证SSL连接:使用mysql命令指定--ssl-mode=REQUIRED参数连接,确认加密生效:
    mysql -u app_user -p --ssl-mode=REQUIRED
    

6. 配置防火墙限制访问
使用Linux防火墙(如ufwfirewalld)限制MySQL端口(默认3306)的访问,仅允许信任的IP地址或网段连接:

  • 使用ufw(Ubuntu/Debian)
    sudo ufw allow from trusted_ip to any port 3306/tcp  # 替换trusted_ip为信任的IP
    sudo ufw enable
    
  • 使用firewalld(CentOS/RHEL)
    sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="trusted_ip" port port="3306" protocol="tcp" accept'  # 替换trusted_ip
    sudo firewall-cmd --reload
    

通过netstat -tuln | grep 3306ss -tuln | grep 3306命令确认MySQL仅监听本地地址(127.0.0.1),避免公网暴露。

7. 启用日志记录与监控
开启MySQL的日志功能,记录数据库操作以便后续审计和排查安全事件:

  • 错误日志:记录MySQL运行时的错误信息(默认开启),位置可通过SHOW VARIABLES LIKE 'log_error'; 查看(通常为/var/log/mysql/error.log)。
  • 通用查询日志:记录所有客户端连接和执行的SQL语句(生产环境谨慎开启,避免性能影响):
    [mysqld]
    general_log = 1
    general_log_file = /var/log/mysql/general.log
    
  • 慢查询日志:记录执行时间超过阈值的SQL语句(帮助优化性能,同时发现潜在攻击):
    [mysqld]
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow-queries.log
    long_query_time = 2  # 执行时间超过2秒的查询视为慢查询
    

修改配置后重启MySQL服务,定期检查日志文件,使用pt-query-digest等工具分析慢查询日志,及时发现异常操作(如大量SELECT *查询、频繁的登录失败尝试)。

8. 定期更新与安全审计

  • 更新MySQL版本:及时安装MySQL官方发布的安全补丁,修复已知漏洞(如通过sudo apt-get update & & sudo apt-get upgrade mysql-server更新Ubuntu系统上的MySQL)。
  • 运行安全脚本:使用MySQL自带的mysql_secure_installation工具进行初始安全配置(如设置root密码、删除匿名用户、禁止远程root登录等),适用于新安装的MySQL实例:
    sudo mysql_secure_installation
    
  • 定期安全审计:检查my.cnf配置文件,确保没有不必要的权限设置(如未使用的端口、多余的bind-address配置);使用SELECT User, Host, authentication_string FROM mysql.user; 查看用户列表,确认无多余或未使用的账户。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何配置Linux MySQL安全设置
本文地址: https://pptw.com/jishu/746709.html
Linux MySQL日志分析方法 Linux MySQL主从复制原理

游客 回复需填写必要信息