После установки 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
.
Я не знаю, где не так, пожалуйста, помогите мне!
Кажется, что audispd
записывает события аудита в свои плагины stdin.
(Ссылки на источник ниже относятся к https://github.com/packetstash/auditd/tree/ba912fa614a7e73160a4eba338e55890d6e8f62f. Это мой первый пост о сбое сервера, и я не могу включить более двух ссылок).
В частности:
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
модуль для анализа сообщений о событиях.