RHEL/CentOS 8 и запись терминальных сессий пользователей

Еще одна интересная возможность в свежих версиях Linux систем прошла мимо меня – Session Recording в Cockpit, т.е. возможность записи терминальных сессий пользователей, всех их действий и, соответственно, результатов их действий. Данная возможность может быть очень интересна в местах, где требуется повышенная безопасность и мониторинг всех действий администраторов, а также, например, для обучения каким-то базовым вещам. Хочешь что-то показать? – проиграл запись терминала. Удобно.

Ниже о том, как это запустить.

Итак, три основных компонента для записи сессий пользователей:

  1. tlog – утилита которая выполняет фиксацию всего ввода-вывода в терминале, а так же обладает функцией воспроизведения записей. «Сидит» между терминалом пользователя и оболочкой (shell), в которой данный пользователь работает. Важное ограничение – tlog не записывает графическую сессию пользователя;
  2. SSSD – сервис предоставляющий механизмы аутентификации для пользователей. Именно здесь указывается, чьи сессии мы будем записывать;
  3. Web-Console – он же cockpit, позволяет управлять записью и воспроизведением сессий через web-интерфейс.

Займемся установкой:

Установим cockpit, tlog, а так же дополнение Session Recording.

[root@v-centos8 ~]# yum install cockpit cockpit-session-recording tlog

Запустим cockpit и добавим в автозагрузку:

[root@v-centos8 ~]# systemctl enable cockpit.socket –now

Теперь cockpit доступен через браузер по порту 9090 нашего сервера.

Если вы раньше не работали с Cockpit, тогда сейчас самое время ознакомиться с основными его функциями:

  1. Мониторинг системы;
  2. Просмотр логов системных служб;
  3. Управление сетевыми интерфейсами;
  4. Управление учетными записями;
  5. Запуск и остановка служб;
  6. Программное обеспечение. Установка, удаление, обновление;
  7. Доступ к терминалу;
  8. Настройки SELinux.

И все это и многое другое черед web-интерфейс. Удобно для начинающих, а также, если по какой-то причине нужно выполнить базовые операции, но работать в консоли не очень удобно, например, с экрана телефона.

Теперь мы имеем установленный Cockpit и дополнение Session Recording, которое будет отображаться в меню Web-интерфейса:

Пройдем весь путь настройки записи терминала для пользователя vmik:

Перейдем в пункт меню Session Recording и выберем пункт Configuration в правом верхнем углу:

Откроется окно настроек записи терминальных сессий:

Интересные пункты:

  1. Shell – оболочка, действия в которой будем записывать. По умолчанию /bin/bash;
  2. Notice – предупреждающее сообщение, которое будет видеть пользователь при логине в терминал о том, что его сессия записывается;
  3. SSSD Configuration – пользователи, либо группы пользователей, для которых включена запись терминала. По умолчанию отключена для всех.

Включим запись терминала для пользователя vmik в настройках SSSD Configuration:

Scope – some. Пишем терминалы не всех пользователей, а только выборочных;

Users – vmik. Записываем сессию пользователя vmik. Если нужно добавить новых пользователей, указываем через запятую.

Сохраняем изменения.

Теперь зайдем пользователем vmik в терминал и проверим результат:

Первое, что можно заметить это предупреждение о записи сессии пользователя. Попробуем сделать какие-либо действия:

И проверим результат записи нашей сессии. По умолчанию отображаются все сессии, но для удобства можно использовать временной промежуток, который указывается выше:

Фиксируется пользователь, время начала сессии, время окончания сессии и ее продолжительность.

Выберем последнюю сессию и просмотрим ее с помощью встроенного плеера:

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

Просмотр сессий в терминале:

Ранее мы просматривали записи сессий через веб-интерфейс, что очень удобно. Однако, остается еще вариант просмотра через терминал с помощью tlog-play.

Для того чтобы воспроизвести запись сессии в первую очередь нам необходим ее ID. Получить его можно несколькими способами:

  • Через Cockpit, внутри самой сессии:
  • Выполнить поиск по журналу с ключевым словом rec:

[root@v-centos8 ~]# journalctl -o verbose | grep -i \"rec\"

Легко находятся ID всех сессий, но более сложно находятся ID именно нужной сессии.

Получив ID запускаем проигрывание. Оно будет выполняться в консоли так же, как и выполнялось пользователем. С теми же задержками и исправлениями:

[root@v-centos8 ~]#  tlog-play -r journal -M TLOG_REC=b3fbfc8f77aa46b6a04249e0a4e772c3-6b5e-af2d1

Красным выделен результат проигрывания сессии. Тоже забавно наблюдать.

Экспортирование сессий в файл:

Для экспорта файла журнала, а соответственно и записанных сессий, необходимо установить дополнительный пакет systemd-journal-remote:

[root@v-centos8 ~]# yum install systemd-journal-remote

И экспоритруем журнал:

[root@v-centos8 ~]# journalctl -o export | /usr/lib/systemd/systemd-journal-remote -o /tmp/shell.journal -

Теперь лог можно перенести на другой сервер в /var/log/journal, либо как советуют в /var/log/journal/remote и изучать записи сессий там. Можно настроить, например, автоматический перенос логов на центральный сервер, откуда производится анализ.

В качестве заключения:

Запись терминальных сессий является действительно удобной и часто незаменимой в некоторых местах функцией. Как можно заметить, реализовать это сейчас достаточно просто и удобно благодаря Cockpit.

Стоит не забывать про экспорт журналов на централизованный сервер, либо выполнять запись сессий с помощью syslog.

Leave a Reply

Your email address will not be published. Required fields are marked *