将 auditd 记录发送到我的 audispd 插件

将 auditd 记录发送到我的 audispd 插件

设置规则后auditctl,我想将那些匹配的记录发送到我的Python脚本进行进一步的分析。

这些是涉及的文件:

  • auditd记录:

    type=PATH msg=audit(1451011319.268:533): ...
    type=CWD msg=audit(1451011319.268:533):  cwd=”/home/root”
    type=SYSCALL msg=audit(1451011319.268.230:533): ... key=(null)
    
  • /etc/audisp/audispd.conf如下,

    q_depth = 80
    overflow_action = ignore
    priority_boost = 4
    max_restarts = 10
    name_format = HOSTNAME
    #name = mydomain
    
  • 插件audispd配置文件在/etc/audisp/plugin.d/

    active = yes
    direction = out
    path = /usr/bin/python
    type = always
    # two args, one is my Python script, the other is the log file
    args = /var/t/h.py /var/log/audit.log
    format = string
    
  • 我的 h.py 如下,

    # -*- coding: utf-8 -*-
    
    import sys
    
    print sys.argv[1]
    ...
    

但是,我的 Python 脚本无法从中获取任何记录auditd

我不知道哪里出了问题,请帮帮我!

答案1

似乎audispd正在将审计事件写入其插件标准输入。

(以下来源链接来自https://github.com/packetstash/auditd/tree/ba912fa614a7e73160a4eba338e55890d6e8f62f。这是我在 Server Fault 上发表的第一篇文章,我不能包含超过两个链接。

尤其:

  • 它在 处创建一对插座audisp/audispd.c#L484
  • 然后分叉,将子进程的标准输入设置为套接字对的一端:audisp/audispd.c#L500
  • 并将事件写入另一端:audisp/audispd.c#L533

您的脚本将从 继承打开的文件描述符audispd,包括 stdout (fd #1),它将重新打开到/dev/null。因此,print在 脚本中可能没有任何效果,您必须写入某个文件。

尝试以下方法:

import sys

with open('/tmp/my_audit.log', 'w') as log_file:
  for event_message in sys.stdin:
    log_file.write('%s\n' % event_message)

您可能还想使用bindings/python/auparse_python.c模块来解析事件消息。

相关内容