Snoopy Logger — пишем все что запускается на сервере
Есть такая библиотека, snoopy, перехватывающая системные вызовы execv() и execve(), сохраняя все данные в лог. Запускается snoopy через /etc/ld.so.preload, работает незаметно для пользователей и процессов. Ее и настроим на рабочем сервере с debian 8.
root@someorg:/etc # cat /proc/version Linux version 3.16.0-5-amd64 ([email protected]) (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, соответственно. Удачи.