Еще одна интересная возможность в свежих версиях Linux систем прошла мимо меня – Session Recording в Cockpit, т.е. возможность записи терминальных сессий пользователей, всех их действий и, соответственно, результатов их действий. Данная возможность может быть очень интересна в местах, где требуется повышенная безопасность и мониторинг всех действий администраторов, а также, например, для обучения каким-то базовым вещам. Хочешь что-то показать? – проиграл запись терминала. Удобно.
Ниже о том, как это запустить.
Итак, три основных компонента для записи сессий пользователей:
- tlog – утилита которая выполняет фиксацию всего ввода-вывода в терминале, а так же обладает функцией воспроизведения записей. «Сидит» между терминалом пользователя и оболочкой (shell), в которой данный пользователь работает. Важное ограничение – tlog не записывает графическую сессию пользователя;
- SSSD – сервис предоставляющий механизмы аутентификации для пользователей. Именно здесь указывается, чьи сессии мы будем записывать;
- 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, тогда сейчас самое время ознакомиться с основными его функциями:
- Мониторинг системы;
- Просмотр логов системных служб;
- Управление сетевыми интерфейсами;
- Управление учетными записями;
- Запуск и остановка служб;
- Программное обеспечение. Установка, удаление, обновление;
- Доступ к терминалу;
- Настройки SELinux.
И все это и многое другое черед web-интерфейс. Удобно для начинающих, а также, если по какой-то причине нужно выполнить базовые операции, но работать в консоли не очень удобно, например, с экрана телефона.
Теперь мы имеем установленный Cockpit и дополнение Session Recording, которое будет отображаться в меню Web-интерфейса:
Пройдем весь путь настройки записи терминала для пользователя vmik:
Перейдем в пункт меню Session Recording и выберем пункт Configuration в правом верхнем углу:
Откроется окно настроек записи терминальных сессий:
Интересные пункты:
- Shell – оболочка, действия в которой будем записывать. По умолчанию /bin/bash;
- Notice – предупреждающее сообщение, которое будет видеть пользователь при логине в терминал о том, что его сессия записывается;
- 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.