Snoopy Logger - пишем все что запускается на сервере

Snoopy Logger

Всем известно что bash сохраняет все, что набирается в терминале, с различными нюансами настроек, но тем не менее. Все что запускается из командной строки попадает в файл .bash_history текущего пользователя. Есть и команда history, которая управляет историей командной строки (подробности в man history). Но предположим что нам необходимо знать обо всем что запускается в системе, не важно от имени какого пользователя, с терминала или нет, просто о любых выполняемых командах. Пример из жизни, внезапные перезагрузки сервера, без видимых на то причин.

Есть такая библиотека, snoopy, перехватывающая системные вызовы execv() и execve(), сохраняя все данные в лог. Запускается snoopy через /etc/ld.so.preload, работает незаметно для пользователей и процессов. Ее и настроим на рабочем сервере с debian 8.

root@someorg:/etc # cat /proc/version
Linux version 3.16.0-5-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.51-3+deb8u1 (2018-01-08)

Установка snoopy

Вообще установить snoopy можно из стандартных репозитариев, используя apt-get install, но там довольно старенькая версия, так что ставить будем, как рекомендует автор софта.

root@someorg:~ # cd /opt
root@someorg:/opt # wget -O snoopy-install.sh ]]>https://github.com/a2o/snoopy/raw/install/doc/install/bin/snoopy-install.sh]]>
root@someorg:/opt # chmod +x ./snoopy-install.sh
root@someorg:/opt # ./snoopy-install.sh stable
............................
...........................
SNOOPY LOGGER is now installed and enabled.

TIP #1: If Snoopy is to be enabled for all processes, you need
        to restart your system, or at least all services on it.

TIP #2: If you ever need to disable Snoopy, you should use provided
        'snoopy-disable' script. Use 'snoopy-enable' to reenable it.

TIP #3: Snoopy output can usually be found somewhere in /var/log/*
        Check your syslog configuration for details.

TIP #4: Configuration file location: /etc/snoopy.ini
        See included comments for additional configuration options.

Snoopy wishes you a happy logging experience:)

Настройка snoopy

В принципе snoopy вполне себе работает и "из коробки", но все логи пишутся в syslog, меня это не устраивает, поэтому подправим файл конфигурации /etc/snoopy.ini. Там все довольно доходчиво расписано, я поменял лишь пару строк.

Формат записи в лог, то есть что именно сохранять.

message_format = "%{datetime} [user %{username}:%{uid}] [process pid:%{pid} rpname:%{rpname} ppid:%{ppid}] sid:%{sid} tty:%{tty} [cwd:%{cwd} filename:%{filename}]: %{cmdline}"
%{datetime} - дата, время
%{username} - имя пользователя
%{uid} - идентификатор пользователя
%{pid} - идентификатор процесса
%{rpname} - имя корневого процесса
%{ppid} - идентификатор родительского процесса
%{sid} - идентификатор сессии
%{tty} - терминал
%{cwd} - рабочая директория
%{filename} - имя запускаемого файла
%{cmdline} - командная строка с параметрами запуска

Имейте в виду, изменение формата записи в лог делается "на лету", достаточно поправить конфиг, перезапускать snoopy не нужно.

Ну а это куда именно писать файл лога.

output = file:/var/log/snoopy.log

Кроме вышеприведенного, можно настроить различные фильтры записи, что сохранять, что нет.

В зависимости от нагруженности сервера, лог может разрастаться довольно быстро, так что рекомендую подкорректировать настройки logrotate, соответствующим образом.

Включение и выключение выполняется snoopy-enable, snoopy-disable, соответственно.

Удачи.

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
 oooo           .oooooo.                oooooo   oooo      o8o             
`888 d8P' `Y8b `888. .8' `"'
888 oooo 888 .ooooo oo `888. .8' oooo .ooooo oo
888 .8P' 888 d88' `888 `888.8' `888 d88' `888
888888. 888 888 888 `888' 888 888 888
888 `88b. `88b ooo 888 888 888 888 888 888
o888o o888o `Y8bood8P' `V8bod888 o888o 888 `V8bod888
888. 888 888.
8P' .o. 88P 8P'
" `Y888P "
Введите код, изображенный в стиле ASCII-арт.