LINUX.ORG.RU
ФорумAdmin

Мониторинг файловых операций в каталоге

 ,


0

1

Добрый день! Столкнулся с задачей мониторинга файловой активности (чтение, запись, создание, удаление и т.д.) одного из локальных каталогов сервера. А именно нужно читать лог за определенный период и выдергивать из него скриптом информацию: имя пользователя, дата, время, исполненная команда. Пытаюсь использовать auditd. В audit.rules прописано правило

-w /access -p rwxa -k "rule#1"
Все работает прекрасно, в логе появляется строка
type=USER_CMD msg=audit(07/21/2016 16:33:11.830:463) : user pid=31976 uid=h1 auid=h1 ses=31 msg='cwd=/home/h1 cmd=touch /access/123++++++++ terminal=pts/1 res=success'
которая ищется утилитой ausearch. Но если пользователь root, тип события почему-то изменяется с USER_CMD на PATH, а вместо одной строки в логе появляется 3, из которых не вполне понятно, что за команда была исполнена, да и остальные данные выдернуть сложнее. Выглядит это так
type=PATH msg=audit(07/21/2016 16:34:39.130:492) : item=1 name=/access/123333333----- inode=664164 dev=fd:00 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=CREATE 
type=PATH msg=audit(07/21/2016 16:34:39.130:492) : item=0 name=/access/ inode=663994 dev=fd:00 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT 

Можно ли как-то привести лог к единому виду? Пробовал прописывать в правиле -F uid>=0, но ничего не меняется. Дополнительные утилиты аудита типа aureport не дают такой полной информации, в частности о выполненной команде. Может быть, есть более простые способы получения подобных логов?

P.S. Да, еще нужен IP-адрес, с которого произведены изменения. В случае с рядовым пользователем он также легко грепается по номеру сессии.



Последнее исправление: mzv (всего исправлений: 1)

Вообще говоря, события аудита могут состоять из нескольких записей. В логе auditd в каждой строке в параметре msg как раз указан идентификатор события, к которому относится данная запись (т.е. строка).

Каждая запись описывает какую-то часть события. Например, если мониторить системные вызовы, то в одной записи будет указано, какой, собственно, системный вызов был вызван (пардон за каламбур), в других записях - с какими параметрами он был вызван, ещё может быть указано, какая текущая директория у программы, которая его вызвала, и так далее.

Со всеми типами записей можешь ознакомиться здесь.

Скорее всего, из-за твоего фильтра в лог попадают не все нужные записи. Сказать, почему у пользователей записи USER_CMD, а у рута только PATH, точно не могу. Возможно, дело в разных шеллах, или как там пользователи работают. Делай такие фильтры, чтобы попадало больше записей, анализируй события целиком, а не по одной записи.

P.S. вот, например, событие, которое записал мой аудит на запуск less /var/log/audit/audit.log, зацени, сколько записей:

type=SYSCALL msg=audit(1469352548.364:2621009): arch=c000003e syscall=59 success=yes exit=0 a0=7ffd5ab7f850 a1=7f5eb4ae0168 a2=c769c0 a3=7ffd5ab7f140 items=2 ppid=10476 pid=14489 auid=1234 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=14297 comm="less" exe="/bin/less" key=(null)
type=EXECVE msg=audit(1469352548.364:2621009): argc=2 a0="less" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1469352548.364:2621009):  cwd="/root"
type=PATH msg=audit(1469352548.364:2621009): item=0 name="/usr/bin/less" inode=392618 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
type=PATH msg=audit(1469352548.364:2621009): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=917351 dev=08:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
type=PROCTITLE msg=audit(1469352548.364:2621009): proctitle=6C657373002F7661722F6C6F672F61756469742F61756469742E6C6F67
Кстати, да, заметь, как отображаются строки, содержащие пробелы и прочие необычные символы: без кавычек, в шестнадцатеричном виде; предусмотри в своих скриптах обработку такой формы.

P.P.S. если ты определяешь IP пользователя по терминалу/номеру сессии, лучше обрабатывать лог в потоковом режиме и писать сразу в каком-то своём формате, удобном тебе - если искать потом, есть ненулевая вероятность, что на каком-то терминале сидит уже другой пользователь, либо номер сессии продолбался (хотя, возможно, я неправильно тебя понял, и этой проблемы у тебя нет). Посмотри в сторону audisp для этого, я таким образом записывал, в каком lxc-контейнере событие происходит.

tiandrey ★★★★★
()
Последнее исправление: tiandrey (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.