温馨提示×

Linux MariaDB如何进行安全配置

小樊
38
2025-12-12 11:20:00
栏目: 云计算

Linux MariaDB 安全配置清单

一 基础加固

  • 运行安全初始化向导,完成设置 root 密码、删除匿名用户、禁止 root 远程登录、删除 test 数据库等:执行命令:sudo mysql_secure_installation。完成后务必重启服务:sudo systemctl restart mariadb(或 mysql)。
  • 限制网络面:仅本地访问时,在 MariaDB 配置 [mysqld] 中加入 bind-address = 127.0.0.1;如需远程仅开放到管理网段,改为指定内网地址。
  • 禁止导入本地文件:在 [mysqld] 中设置 local-infile=0,降低通过 LOAD DATA LOCAL INFILE 读取服务器文件的风险。
  • 配置导入导出白名单:设置 secure_file_priv=/var/lib/mysql/import(示例路径),仅允许在该目录进行导入导出,避免任意路径读写。
  • 运行身份与文件权限:确认 mysqld 以 mysql 用户运行;数据目录(如 /var/lib/mysql)权限设为 700,配置文件(如 /etc/my.cnf)设为 644 且仅 root 可写。

二 用户与权限最小化

  • 按应用创建最小权限账户,避免共享账户;示例:
    • CREATE DATABASE app_db;
    • CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass!23';
    • GRANT SELECT,INSERT,UPDATE,DELETE ON app_db.* TO 'app_user'@'localhost';
    • FLUSH PRIVILEGES;
  • 清理高风险权限:非必要账户撤销 FILEPROCESSSUPER 等权限;示例:REVOKE FILE,PROCESS,SUPER ON *.* FROM 'user';
  • 精细化主机来源:将管理账户限制为管理网段或跳板机来源,例如将 root@localhost 调整为 root@'192.168.1.0/255.255.255.0'(按需设置)。
  • 定期清理不再使用的账户与数据库,避免权限残留。

三 加密传输与静态加密

  • 启用 SSL/TLS:生成 CA 与服务器证书,配置 MariaDB 使用证书并强制客户端加密连接;证书与密钥目录(如 /etc/mysql/ssl)权限设为 600,属主 mysql:mysql
  • 静态数据加密(TDE):启用 file_key_management 插件并配置密钥文件(如 /etc/mysql/keyring/encryption.key),确保密钥文件权限 600 且仅 mysql 可读。
  • 连接验证:在客户端连接时指定 --ssl-ca--ssl-cert--ssl-key,并在服务器端设置 require_secure_transport=ON(或按用户/库粒度要求加密)。

四 审计与日志

  • 启用审计插件:在 [mysqld] 中加载 server_audit 并设置日志路径与滚动策略,例如:
    • plugin_load_add = server_audit
    • server_audit_logging = ON
    • server_audit_output_type = FILE
    • server_audit_file_path = /var/log/mysql/server_audit.log
    • server_audit_file_rotate_size = 1G
    • server_audit_file_rotations = 10
      重启后在库中验证:SHOW GLOBAL VARIABLES LIKE 'server_audit%';,并检查日志文件是否生成。
  • 基础通用日志:按需开启查询日志或错误日志,便于入侵溯源与故障排查(生产环境注意性能与磁盘占用)。

五 维护与合规

  • 密码与策略:启用并校核密码复杂度插件(如 validate_password),设置长度、字符集与过期策略;定期轮换关键账户密码。
  • 补丁与更新:通过官方仓库及时更新 MariaDB 与相关组件,修复已知漏洞。
  • 安全基线巡检:定期核查关键项与命令示例:
    • 查看与禁用 local_infileSHOW VARIABLES LIKE 'local_infile';(配置 local-infile=0
    • 查看与设置 secure_file_privSHOW VARIABLES LIKE 'secure_file_priv';(设置为固定目录)
    • 查看高权限账户:SELECT user,host FROM mysql.user WHERE File_priv='Y' OR Process_priv='Y' OR Super_priv='Y';
    • 查看数据目录:SHOW VARIABLES LIKE 'datadir';(确保目录权限 700
    • 查看运行用户:ps -ef | egrep "^mysql.*$"(确认非 root 运行)
    • 清理命令历史:cat /dev/null > ~/.mysql_historyln -s /dev/null ~/.mysql_history
      每次变更配置后执行:sudo systemctl restart mariadb 使配置生效。

0