Логирование вводимых команд в Linux

()

Очень часто администраторы дают пользователям выполнять некоторые команды с повышенными привелегиями с помощью инструментов вроде sudo или doas. Часто даже не имея прав суперпользователя пользователь может нанести определённый ущерб работающим сервисам. Поэтому в пообных случаях желательно иметь лог команд для последующего анализа инцидентов.

Хорошим решением для логирования команд является инструмент snoopy, выполненный в виде библиотеки, вещающей хук на определённые системные вызовы и логирующей их.

В Ubuntu для установки snoopy надо использовать команду:

sudo apt install snoopy

В процессе установки будет предложено сразу включить snoopy. Если понадобится изменить эти настройки то необходимо использовать команду:

dpkg-reconfigure snoopy

Диалоговое окно настройки snoopy с помощью dpkg-reconfigure

Кроме того можно вручную отредактировать файл "/etc/ld.so.preload", добавив/удалив строку с указанием полного пути к библиотеке "libsnoopy.so". После изменения настроек необходимо перезагрузить компьютер.

По умолчанию snoopy пишет сообщения в journald. Это не всегда удобно, да и формат записи по умолчанию несколько избыточен. Поэтому скорее всего вы захотите настроить snoopy. Настройки хранятся в файле "/etc/snoopy.ini" и после изменения файла сразу вступают в силу.

Файл содержит очень подробные комментарии, которых достаточно чтобы самостоятельно настроить snoopy по своему желанию. Но мы всё же рассмотрим небольшой пример конфигурации.

Что мы хотим: убрать лишнюю информацию из строк логов и логировать только команды из терминала (команды выполняемые демонами вроде cron нам не нужны). Для этого необходимо привести файл конфигурации к виду:

[snoopy]
; Формат строки в логе
message_format = "[login: %{login}, %{tty_username} as %{eusername}]: %{cmdline}"

; Фильтр событий
filter_chain = "only_tty"

Сразу после этого лог начнёт наполняться. Просмотреть его можно командой:

journalctl -xe -t snoopy

Вывод будет выглядеть примерно вот так:

авг 30 17:32:08 server snoopy[323]: [login: moose, moose as moose]: -bash
авг 30 17:32:08 server snoopy[326]: [login: moose, moose as moose]: cat /home/moose/.ssh/known_hosts
авг 30 17:32:10 server snoopy[334]: [login: moose, moose as moose]: free -m
авг 30 17:32:12 server snoopy[336]: [login: moose, moose as moose]: df -h
авг 30 17:32:14 server snoopy[337]: [login: moose, moose as moose]: sudo su -
авг 30 17:32:14 server snoopy[338]: [login: moose, moose as root]: su -
авг 30 17:32:14 server snoopy[347]: [login: moose, moose as root]: groups
авг 30 17:32:14 server snoopy[349]: [login: moose, moose as root]: lesspipe
авг 30 17:32:14 server snoopy[350]: [login: moose, moose as root]: basename /usr/bin/lesspipe
авг 30 17:32:14 server snoopy[352]: [login: moose, moose as root]: dirname /usr/bin/lesspipe
авг 30 17:32:14 server snoopy[354]: [login: moose, moose as root]: dircolors -b
авг 30 17:32:14 server snoopy[355]: [login: moose, moose as root]: mesg n
авг 30 17:32:17 server snoopy[356]: [login: moose, moose as root]: ps aux
авг 30 17:32:22 server snoopy[357]: [login: moose, moose as root]: journalctl -xe -t snoopy

Следует иметь ввиду что в логи всё равно попадает достаточно много мусора. Это связано с тем что при логин пользователя выполняется достаточно большой набор команд из файлов вроде "~/.bashrc". Но в любом случае такой журнал будет очень полезен при расследовании инцидентов.

На этом всё. Приятной работы!

Ключевые слова: snoopy, log.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE