По умолчанию все команды, выполненные от sudo записываются в /var/log/secure, помимо sudo в этот файл пишется еще немало других событий. Логично что найти потом кто и что выполнил в куче логов не так просто. Поэтому сконфигурируем ОС так, чтобы логи писались в другой файл, например, /var/log/sudo.

Укажем в какой файл писать события

Для этого отредактируем файл /ets/sudoers и добавим переменную logfile.

sudo visudo
Defaults  logfile=/var/log/sudo

Для выходи из visudo выполните :wq, или нажмите дважды CRTL+Z.

Логирование в одну строку

По умолчанию лог о том, что пользователь выполнил команду под sudo разбивается на несколько строк, что не совсем удобно для отправки в систему мониторинга, в моём случае elasticsearch. Поэтому я сделаю так чтобы всё помещалось в одну строку.

sudo visudo
Defaults  loglinelen=0

Для выходи из visudo выполните :wq, или нажмите дважды CRTL+Z.

Проверка

Теперь, когда всё настроено просто выполняем sudo команду и проверяем что появилось об этом событие в файле /var/log/sudo.

cat /var/log/sudo
Nov 21 10:44:35 : user1 : TTY=pts/0 ; PWD=/home/user1 ; USER=root ; COMMAND=/bin/ls

Настройка filebeat

В качестве агента для отправки событий в elasticsearch я буду использовать filebeat. Писать о том, как его установить я не буду, так как там ничего необычного.

Добавим новый input для filebeat:

sudo vim /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: filestream
 id: "sudo"
 enabled: true
 paths:
 - /var/log/sudo
 fields:
 tag: sudo
sudo systemctl restart filebeat

Grok для pipeline

Для того чтобы разбить событие на поля в Elasticsearch можно воспользоваться pipeline, для этого можно использовать следующий Pattern для Grok:

%{SYSLOGTIMESTAMP:system.syslog.timestamp} : %{USERNAME:sudo.user} : TTY=%{NOTSPACE:sudo.tty} ; PWD=%{NOTSPACE:sudo.pwd} ; USER=%{USERNAME:sudo.userbecome} ; COMMAND=%{GREEDYDATA:sudo.command}|%{SYSLOGTIMESTAMP:system.syslog.timestamp} : %{USERNAME:sudo.user} : %{GREEDYDATA:sudo.allow} ; TTY=%{NOTSPACE:sudo.tty} ; PWD=%{NOTSPACE:sudo.pwd} ; USER=%{USERNAME:sudo.userbecome} ; COMMAND=%{GREEDYDATA:sudo.command}