温馨提示×

Ubuntu下MySQL如何进行安全审计

小樊
41
2025-11-04 10:08:28
栏目: 云计算

Ubuntu下MySQL安全审计实施指南

一、基础安全配置(审计前提)

在启用审计前,需完成以下基础安全设置,降低数据库被攻击的风险,为审计提供可信环境:

  1. 更新系统与MySQL:运行sudo apt update && sudo apt upgrade mysql-server,确保系统及MySQL为最新版本,修复已知安全漏洞。
  2. 运行安全脚本:执行sudo mysql_secure_installation,完成以下操作:设置root密码、删除匿名用户、禁止root远程登录、删除测试数据库。
  3. 限制远程访问:编辑/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为127.0.0.1(仅允许本机访问);若需远程访问,使用CREATE USER 'user'@'特定IP' IDENTIFIED BY '密码'限定IP,并通过ufw配置防火墙:sudo ufw allow from 特定IP to any port 3306
  4. 禁用危险功能:编辑/etc/mysql/mysql.conf.d/mysqld.cnf,添加local-infile=0(禁用本地文件加载),防止攻击者通过SQL注入读取敏感文件。

二、开启通用查询日志(General Log)

通用查询日志记录所有到达MySQL Server的SQL语句,是最基础的审计手段,适合小规模环境:

  1. 临时开启:登录MySQL,执行SET GLOBAL general_log = 'ON';执行SHOW VARIABLES LIKE '%general_log%'确认状态为ON
  2. 查看日志文件:日志默认存储在/var/lib/mysql/目录下(文件名为主机名.log,如ubuntu.log),使用tail -f /var/lib/mysql/ubuntu.log实时查看日志。
  3. 永久生效:编辑/etc/mysql/mysql.conf.d/mysqld.cnf,添加以下配置:
    [mysqld]
    general_log = 1
    general_log_file = /var/log/mysql/mysql-general.log
    
    重启MySQL服务:sudo systemctl restart mysql,使配置生效。

三、使用审计插件(推荐:详细、可定制)

审计插件(如audit_log)可记录更详细的审计信息(如操作用户、时间、执行的SQL、影响的行数),适合生产环境:

1. 安装插件

  • Ubuntu 22.04及以上(MySQL 8.0+):审计插件已集成到MySQL中,无需额外下载。
  • 旧版本或第三方插件:从官方或可信源下载插件(如McAfee的mysql-audit-plugin),解压后将.so文件复制到MySQL插件目录(SHOW GLOBAL VARIABLES LIKE 'plugin_dir'查看路径),并授权:
    sudo cp libaudit_plugin.so /usr/lib/mysql/plugin/
    sudo chmod +x /usr/lib/mysql/plugin/libaudit_plugin.so
    sudo chown mysql:mysql /usr/lib/mysql/plugin/libaudit_plugin.so
    

2. 配置审计规则

登录MySQL,执行以下命令启用审计:

-- 安装插件
INSTALL PLUGIN audit SONAME 'libaudit_plugin.so';
-- 开启审计(JSON格式输出,便于解析)
SET GLOBAL audit_json_file = ON;
-- 设置审计记录的命令(如insert、delete、update等,默认记录所有)
SET GLOBAL audit_record_cmds = 'insert,delete,update,create,drop,alter,grant';

3. 永久配置

编辑/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]部分添加以下配置:

[mysqld]
-- 加载审计插件
plugin-load = AUDIT=libaudit_plugin.so
-- 开启JSON格式审计日志
audit_json_file = ON
-- 指定审计日志路径(需确保MySQL用户有写入权限)
audit_json_log_file = /var/log/mysql/mysql-audit.json
-- 记录的命令(可选:NULL表示记录所有)
audit_record_cmds = 'insert,delete,update,create,drop,alter,grant'
-- 记录的对象(可选:NULL表示记录所有,可指定数据库或表)
audit_record_objs = NULL

重启MySQL服务:sudo systemctl restart mysql,使配置生效。

4. 验证审计日志

  • 查看插件状态SHOW PLUGINS;,确认audit插件状态为ACTIVE
  • 查看审计日志:使用tail -f /var/log/mysql/mysql-audit.json实时查看日志,日志内容包括操作时间、用户、主机、执行的SQL、影响的表等。

四、日志管理与监控

  1. 定期审查日志:使用grepawk等工具分析日志,查找异常操作(如频繁的DROP TABLE、非工作时间的大批量INSERT)。例如:
    grep "DROP TABLE" /var/log/mysql/mysql-audit.json
    
  2. 日志轮转:配置logrotate防止日志文件过大,编辑/etc/logrotate.d/mysql,添加以下内容:
    /var/log/mysql/mysql-audit.json {
        daily
        rotate 7
        compress
        missingok
        notifempty
        create 640 mysql mysql
    }
    
  3. 设置告警:通过脚本监控日志中的关键字(如ERRORDROP),当发现异常时发送邮件或短信告警(可使用cron定时执行脚本)。

注意事项

  • 性能影响:审计日志会占用磁盘空间并增加I/O负载,生产环境需根据实际情况调整审计范围(如仅审计DML操作)。
  • 权限控制:确保只有管理员能访问审计日志,避免日志被篡改。
  • 合规性:根据《网络安全法》等法规要求,审计日志需保存至少6个月,建议将日志备份到异地存储。

0