设置规则后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
模块来解析事件消息。