Ubuntu下MySQL安全审计实施指南
在启用审计前,需完成以下基础安全设置,降低数据库被攻击的风险,为审计提供可信环境:
sudo apt update && sudo apt upgrade mysql-server,确保系统及MySQL为最新版本,修复已知安全漏洞。sudo mysql_secure_installation,完成以下操作:设置root密码、删除匿名用户、禁止root远程登录、删除测试数据库。/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。/etc/mysql/mysql.conf.d/mysqld.cnf,添加local-infile=0(禁用本地文件加载),防止攻击者通过SQL注入读取敏感文件。通用查询日志记录所有到达MySQL Server的SQL语句,是最基础的审计手段,适合小规模环境:
SET GLOBAL general_log = 'ON';执行SHOW VARIABLES LIKE '%general_log%'确认状态为ON。/var/lib/mysql/目录下(文件名为主机名.log,如ubuntu.log),使用tail -f /var/lib/mysql/ubuntu.log实时查看日志。/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、影响的行数),适合生产环境:
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
登录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';
编辑/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,使配置生效。
SHOW PLUGINS;,确认audit插件状态为ACTIVE。tail -f /var/log/mysql/mysql-audit.json实时查看日志,日志内容包括操作时间、用户、主机、执行的SQL、影响的表等。grep、awk等工具分析日志,查找异常操作(如频繁的DROP TABLE、非工作时间的大批量INSERT)。例如:grep "DROP TABLE" /var/log/mysql/mysql-audit.json
logrotate防止日志文件过大,编辑/etc/logrotate.d/mysql,添加以下内容:/var/log/mysql/mysql-audit.json {
daily
rotate 7
compress
missingok
notifempty
create 640 mysql mysql
}
ERROR、DROP),当发现异常时发送邮件或短信告警(可使用cron定时执行脚本)。DML操作)。