审计实时事件处理C / C ++

时间:2017-03-29 06:51:24

标签: c++ c audit

我试图用C / C ++编写一个过程来实时分析审计事件。

目前,我使用af_unix插件从Unix套接字读取审核事件(默认情况下为/var/run/audisp_events)。

我尝试使用select()recv()来使用套接字中的事件,如下所示:

select(FD_SETSIZE, &set, NULL, NULL, NULL);
recv(sockfd, message, size, MSG_DONTWAIT);

然后发送到auparse回调以将缓冲区similer解析为此example

auparse_feed(au, buf, (size_t)len);
auparse_flush_feed(au);

这里的问题是auditd事件可以是多记录事件(比如SYSCALL),并且使用recv()只消耗一些记录而不是所有记录,所以在解析回调中,我不会&#39 ; t拥有所有信息。

然后我尝试使用getline()一次使用一条记录,但我仍然无法判断记录是一个记录事件还是记录事件。

阅读审核文档here后,我发现了这个: EOE Triggered to record the end of a multi-record event. 我可以使用它来知道何时停止使用(因为getline()是阻塞操作),但EOE事件仅存在于多记录事件中。

我的问题是:

  • 使用af_unix插件是实时使用审计事件的最佳方式吗?
  • 是否有任何方法可以从记录信息中了解这是多记录事件?如果没有,是否有关于哪些事件是多记录事件的文件?

1 个答案:

答案 0 :(得分:0)

您应该为此使用Audit Dispatcher(audisp)插件。

以下是一些资源:

有关事件中的记录数,请致电auparse_get_num_records