mysql-5.7.44安装audit日志审计插件
最终实现:
建议mysql-5.7.34版本之后优先使用mariadb ,较新版本的mariadb已经默认支持audit:server-audit,直接启用即可,mysql社区版官方不支持audit,只能使用第三方插件
第三方插件
https://github.com/trellix-enterprise/mysql-audit
通过rpm安装mysql-5.7.44 (具体步骤略)
重点步骤
下载 v1.1.13 对应的
对应的结构
# 获取mysql插件目录
show global variables like 'plugin_dir';
#复制日志审计插件到mysql插件目录
cp lib/libaudit_plugin.so /usr/lib64/mysql/plugin/
# 修改权限
chmod +x /usr/lib64/mysql/plugin/libaudit_plugin.so
# 进入下载的v1.1.13
cd utils/
chmod +x offset-extract.sh
whereis mysqld
./offset-extract.sh /usr/sbin/mysqld
#如果提示没有gdb 则
yum install gdb
配置my.cnf
vi /etc/my.cnf
audit_json_file=on
plugin-load=AUDIT=libaudit_plugin.so
#audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate'
audit_json_log_file=/tmp/mysql-audit.json
audit_offsets=7840, 7888, 3648, 4808, 456, 360, 0, 32, 64, 160, 544, 8004, 4376, 3656, 3664, 3668, 6088, 2072, 8, 7072, 7112, 7096, 13488, 148, 672, 0
重启mysql
#查看配置是否生效
show variables like '%audit%';
#或者直接查看日志
tail -100f /tmp/mysql-audit.json
#报错
ERROR 1123 (HY000): Can't initialize function 'audit'; Plugin initialization function failed.
解决:关闭当前Linux系统中的selinux
临时关闭 setenforce 0
配置说明
默认情况下,安装后,AUDIT 插件不会记录活动。您必须明确启用所需的日志记录类型。配置是通过使用 MySQL 系统变量完成的。AUDIT 插件系统变量可以在服务器启动时使用命令行上的选项或 MySQL 选项文件(my.cnf 中的 [mysqld] 部分)设置。此外,大多数 AUDIT 插件系统变量可以在服务器运行时通过 SET 语句动态更改。
可用的AUDIT插件系统变量:
-
audit_json_log_file:json 日志文件名。如果启用了 audit_json_file 选项,则会将审计跟踪写入此文件。值可以是绝对路径,也可以是相对于 MySQL datadir 的路径。默认值:mysql-audit.json。
-
audit_json_file:json 日志文件 ON|OFF。
-
audit_json_file_sync:json 日志文件同步周期。如果此变量的值大于 0,则每次 audit_json_file_sync 写入后,审计日志都会同步到磁盘。默认值:0。
-
audit_json_file_flush:调用
set global audit_json_file_flush=on
将导致日志文件刷新(关闭并重新打开日志)。这可用于轮换日志,类似于 MySQL 管理其日志文件的方式。请参阅:http://dev.mysql.com/doc/refman/5.5/en/log-file-maintenance.html。有关进一步说明,请参阅问题#140。 -
audit_json_socket_name:json UNIX 套接字名称。如果启用了 audit_json_socket 选项,则会将审计跟踪写入此 UNIX 套接字。
-
audit_json_socket:json UNIX 套接字开|关。
-
audit_json_socket_write_timeout:提供写入 json 套接字的超时时间(以毫秒为单位)。当前值为 1000(= 1 秒)。值为零时禁用超时。目前,由于内部 MySQL API,最小实际超时时间为 1000 毫秒。(如果您提供的值较小但不为零,则会向上舍入。)我们希望未来版本能够提供更短的超时时间。在 1.1.3 版中引入。
-
audit_uninstall_plugin:AUDIT 卸载插件 ON|OFF(仅限命令行/conf 文件)。如果禁用,则通过 sql UNINSTALL 命令卸载 AUDIT 插件的尝试将失败。提供额外的插件卸载安全性。还可防止影响 5.1.46 及以下版本的CVE-2010-1621。
-
audit_validate_checksum:mysqld 二进制校验和验证 ON|OFF。请参阅安装页面中的故障排除部分。
-
audit_checksum:mysqld 需要验证的校验和(仅限命令行/conf 文件)。当 audit_offsets 存在时使用。如果指定的校验和与计算出的校验和不匹配,则插件不会加载。当手动设置了偏移量并且您想避免在升级 mysqld 后使用未经验证的手动偏移量时,这很有用。
-
audit_record_cmds:以逗号分隔的要记录到审计跟踪的命令列表。例如:
insert,update,delete
。 -
audit_record_objs:要记录到审计线索中的对象(表)的逗号分隔列表。表名称应指定为:
database.table
。支持通配符,可以指定:*.mytable
或mydb.*
。指定:{}
作为列表的一部分,以包含空集,以便同时捕获活动没有对象的情况(例如连接和退出)。 -
audit_whitelist_users:逗号分隔的白名单用户列表,这些用户的查询不会被记录。指定:
{}
作为列表的一部分以包含空用户。 -
audit_whitelist_cmds:以逗号分隔的白名单 cmd 列表,这些 cmd 的查询不会被记录。在 1.0.6 版中引入。
-
audit_force_record_logins
audit_record_cmds
:强制记录:连接、退出和登录失败命令,无论和变量中的设置如何audit_record_objs
。ON|OFF。默认值:OFF。在版本 1.0.8 中引入。 -
audit_header_msg:标头消息记录 ON|OFF。默认值:ON。在版本 1.0.6 中引入。
-
audit_password_masking_cmds:以逗号分隔的将应用密码屏蔽正则表达式的命令列表。默认值包括可能包含密码子句的 MySQL 命令:
CREATE_USER,GRANT,SET_OPTION,SLAVE_START,CREATE_SERVER,ALTER_SERVER,CHANGE_MASTER
。在版本 1.0.6 中引入。 -
audit_password_masking_regex:用于密码屏蔽的符合 PCRE 的正则表达式。正则表达式仅适用于命令类型如下指定的语句:
audit_password_masking_cmds
。在版本 1.0.6 中引入。 -
audit_json_file_retry:json 日志文件重试间隔。如果插件无法打开/写入 json 日志文件,将每隔指定的秒数重试打开一次。设置为 0 以禁用重试。默认为 60 秒。在 1.0.6 版中引入。
-
audit_json_socket_retry:json 套接字重试间隔。如果插件无法连接/写入 json 审计套接字,将每隔指定的秒数重试连接。设置为 0 以禁用重试。默认为 10 秒。在 1.0.6 版中引入。
-
audit_json_file_bufsize:用于记录的 json 文件缓冲区大小(以字节为单位)。值为 0 表示默认大小,值为 1 表示无缓冲。最大值:262144 (256KB)。较大的值可能会在记录大型语句(大于 4KB 的日志条目)时提高性能。默认为 0。如果在运行时需要更改,则执行刷新以使新值生效。默认为 ON。在版本 1.0.8 中引入。
-
audit_client_capabilities:如果启用,插件会将客户端功能位图的值作为无符号 64 位值发送。默认为 OFF。在版本 1.1.1 中引入。
-
audit_sess_connect_attrs:如果启用,插件会发送会话连接属性。默认为开启。目前仅支持 MySQL 5.6 和 5.7。在版本 1.1.1 中引入。注意:记录连接属性还需要 MySQL 5.6 及更高版本的客户端连接到服务器。连接属性是在 5.6 中作为通信协议的一部分添加的。启用后,将向每个日志条目添加以下形式的 json 条目:
"connect_attrs":{"_os":"Linux","_client_name":"libmysql","_pid":"11450","_client_version":"5.6.20-68.0","_platform":"x86_64","program_name":"mysql"}
。有关 MySQL 中连接属性的更多信息,请参阅:https ://dev.mysql.com/doc/refman/5.6/en/performance-schema-connection-attribute-tables.html 。 -
audit_socket_creds:如果启用,插件会发送有关客户端进程的信息,例如 PID、应用程序名称和拥有它的用户名。默认为开启。在 1.1.2 版中引入。
-
audit_before_after:控制插件是否在当前 SQL 语句执行之前或之后写入日志记录,或两者兼而有之。可能的值是
'before'
、'after'
或'both'
。默认值为'after'
。在版本 1.1.2 中引入。
笔记:
-
通过配置文件 (my.cnf) 在 MySQL 5.1 中配置布尔变量(启用/禁用)时,使用 0/1 作为值。例如:
audit_json_file=1
。MySQL 5.1 似乎存在一个问题,其中ON/OFF
my.cnf 中的值的布尔配置不起作用。 -
审计插件将记录从属服务器的 SQL 线程执行的所有活动。要关闭它,请通过设置将空用户列入白名单:
audit_whitelist_users='{}'
。 -
以上列表可能不完整。要查看所有可用的 AUDIT 系统变量,请运行:
mysqld --help --verbose