持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
[toc]
简介
重要更新
发现问题不在这里,可能出在其他地方,就当是排错的记录吧
遇到的问题
- auditd添加一条规则,监控的路径是一个目录
[root@localhost ~]# auditctl -w /home/kira/test [root@localhost ~]# auditctl -l -w /home/kira/test -p rwxa 复制代码
- 目录已添加,注意,后面的操作我会在上层
/home/kira
进行操作
- 目录已添加,注意,后面的操作我会在上层
- 增加一个文件
[kira@localhost test]$ cd .. [kira@localhost ~]$ touch xx 复制代码
- 看一下日志,发现问题
type=PATH msg=audit(1655776535.937:257): item=1 name="xx" inode=665677 dev=08:02 mode=040755 ouid=1000 ogid=1000 rdev=00:00 obj=unconfined_u:object_r:user_home_t:s0 nametype=DELETE cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0OUID="kira" OGID="kira" 复制代码
问题就在这里,我在home
,目录删除了test
目录下的xx
文件,但是只显示了我在home
目录下删除了xx
,但是这中间夹杂的还有其他目录
排查记录
打断点
- 这个地方是大部分的事件到来时会处理的函数,在这里的断点能看到很多后续对事件的处理信息,比如生成最后的log字符串
/usr/src/debug/audit-3.0.1-3.oe2203.x86_64/src/auditd.c default: distribute_event(cur_event); cur_event = NULL; break; 复制代码
- 这个回调函数是收到事件的入口函数,所有回调的事件都从这里开始
/usr/src/debug/audit-3.0.1-3.oe2203.x86_64/src/libev/ev.c ecb_noinline void ev_invoke_pending (EV_P) { pendingpri = NUMPRI; do { --pendingpri; /* pendingpri possibly gets modified in the inner loop */ while (pendingcnt [pendingpri]) { ANPENDING *p = pendings [pendingpri] + --pendingcnt [pendingpri]; p->w->pending = 0; EV_CB_INVOKE (p->w, p->events); EV_FREQUENT_CHECK; } } while (pendingpri); } 复制代码
- 可以在while里打断点
排查
最开始看的是distribute_event
函数,发现里面其实对字符串的处理很少,无非是添加时间信息,开始查找,name这个字段到底是什么时候添加的,这时候把字符串的地址拿去监视,再网上排查,发现其实这个字符串在收到这个事件的时候,字符串就是就绪的,后续基本没有修改了
最后
写完文章,发现,其实可能是规则弄错了,,,,, 明天继续排查,,, 发现今天一天可能都是无用功。。。