最近因为一些事情的发生,出现了好端端的页面,变成了空页面。转头开发同事就来质问我,是不是我动了什么,后来经过调查发现,是平台运营的同事误删资料导致的。
所以如果运维或者开发部门有很多人都分配了数据库的增删改之类的操作权限的话,某一天哪个表或者字段丢失了都无法找到是谁干的,所以这个锅只能运维来背了。因此很有必要把数据库的操作记录保存下来,但是代价就是服务器的效能就会变差一些了,但为了安全起见,还是建议开启的。
在一些操作限制中,难免会有人质疑具有super权限的用户做了什么动作,所以还是把root用户也一同审计在内,可以避免不必要的麻烦
1.我们就以MysqL-5.7.17为例,安插第三方的插件来进行审计。通过多方了解,知道MysqL AUDIT Plugin是一个 MysqL安全审计插件,由McAfee提供,设计强调安全性和审计能力。可用作独立审计解决方案,或配置为数据传送给外部监测工具。
audit下载地址:
https://bintray.com/mcafee/MysqL-audit-plugin/release
2.准备安装audit插件
[root@~]unzip audit-plugin-MysqL-5.7-1.1.2-694-linux-x86_64.zip
Archive: audit-plugin-MysqL-5.7-1.1.2-694-linux-x86_64.zip
creating: audit-plugin-MysqL-5.7-1.1.2-694/
creating: audit-plugin-MysqL-5.7-1.1.2-694/lib/
inflating: audit-plugin-MysqL-5.7-1.1.2-694/lib/libaudit_plugin.so
inflating: audit-plugin-MysqL-5.7-1.1.2-694/COPYING
inflating: audit-plugin-MysqL-5.7-1.1.2-694/THIRDPARTY.txt
inflating: audit-plugin-MysqL-5.7-1.1.2-694/README.txt
creating: audit-plugin-MysqL-5.7-1.1.2-694/utils/
inflating: audit-plugin-MysqL-5.7-1.1.2-694/utils/offset-extract.sh
MysqL > show global variables like 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir |/data0/MysqL/lib/plugin/ |
+---------------+--------------------------+
1 row in set (0.00 sec)
4.将需要安装的插件复制到上述指定路径,并赋予可执行权限即可
[root@~]cd audit-plugin-MysqL-5.7-1.1.2-694/lib
[root@lib]cp libaudit_plugin.so /data0/MysqL/lib/plugin/
[root@~]cd /data0/MysqL/lib/plugin/
[root@plugin]chmod a+x libaudit_plugin.so
MysqL> install plugin audit soname 'libaudit_plugin.so';
Query OK,0 rows affected (1.78 sec)
MysqL> flush privileges;
Query OK,0 rows affected (0.00 sec)
6.加载插件完毕后,查看审计插件是否已经插入到了数据库内,并查看相关插件版本
MysqL> show global status like '%audit%';
+------------------------+-----------+
| Variable_name | Value |
+------------------------+-----------+
| Audit_protocol_version | 1.0 |
| Audit_version | 1.1.2-694 |
+------------------------+-----------+
2 rows in set (0.00 sec)
MysqL> set global audit_json_file=on;
Query OK,0 rows affected (0.00 sec)
8.查看数据库跟审计有关的相关信息
MysqL> show global variables like '%audit%';
+---------------------------------+------------+
| Variable_name | Value |
+-----------------------------------------------+
| audit_before_after | after |
| audit_checksum | |
| audit_client_capabilities | OFF |
| audit_delay_cmds | |
| audit_delay_ms | 0 |
| audit_force_record_logins | OFF |
| audit_header_msg | ON |
| audit_json_file | ON |
| audit_json_file_bufsize | 1 |
| audit_json_file_flush | OFF |
| audit_json_file_retry | 60 |
| audit_json_file_sync | 0 |
| audit_json_log_file | MysqL-audit.json |
| audit_json_socket | OFF |
| audit_json_socket_name | /var/run/db-audit/MysqL.audit__data0_MysqL-data_3306 |
| audit_json_socket_retry | 10 |
| audit_offsets | |
| audit_offsets_by_version | ON |
| audit_password_masking_cmds | CREATE_USER,GRANT,SET_OPTION,SLAVE_START,CREATE_SERVER,ALTER_SERVER,CHANGE_MASTER,UPDATE |
| audit_password_masking_regex | identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|\s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)(?<!\\)['|"] |
| audit_record_cmds | |
| audit_record_objs | |
| audit_sess_connect_attrs | ON |
| audit_socket_creds | ON |
| audit_uninstall_plugin | OFF |
| audit_validate_checksum | ON |
| audit_validate_offsets_extended | ON |
| audit_whitelist_cmds | BEGIN,COMMIT,PING |
| audit_whitelist_users | |
+---------------------------------+------------------------+
29 rows in set (0.00 sec)
9.可以更改你想存放日志的路径,以便日后记得在哪里查找查看日志
audit_json_log_file就是数据库中审计日志MysqL-audit.json存放的路径,一般审计日志放在了数据库的数据存放的路径上。像我的MysqL-audit.json就存放在/data0/MysqL-data里。当然如果你要换到你指定的路径也可以,用 MysqL > set global audit_json_log_file='你想放置的路径';
10.缩减日志内容
在查看已经开启的审计日志以后,你就会发现日志量太大了,只要网站有人访问,肯定都会有select的日志记录,因为在默认情况下audit_record_cmds=null,记录所有操作指令,但是我们开启审计日志的目的是为了审计,不是为了记流水账,所以只记录insert、delete、update就可以了。这样就比较符合我们的初衷,所以可以像下面那样做:
MysqL > set global audit_record_cmds = 'insert,delete,update';
11.局限到你想要审计的数据库即可
在默认情况下audit_record_objs=null,即是数据库里的所有对象都列为记录对象。但为了安全起见,我都审计。当然也可以指定哪些数据库的表格需要进行审计记录,如下例设置:
MysqL > set global audit_record_objs = 'MysqL.*,test.*';
12.MysqL审计还是有搞特殊化的,就是白名单这种东西,简言之就是可以指定谁免受审计之苦。
设定如下:
MysqL > set global audit_whitelist_users = 'z';
13.查看审计日志内容
cat /data0/MysqL-data/MysqL-audit.json
大概通过上述步骤,审计就可以说简略的完成了。
原文链接:https://www.f2er.com/centos/377602.html