Файл .bash_history показывает только команды, которые пользователь ввёл, и только если он не очищал историю. Пользователь может стереть её одной командой и не оставить следов, если только логирование не настроено в месте, к которому у него нет доступа.
Если нужно видеть, что пользователи делают на общем сервере прямо сейчас, или нужен журнал, который останется даже при попытке скрыть активность, история Bash для этого не подходит.
Рассмотрим способы мониторинга активности пользователей в реальном времени и инструменты, которые надёжнее файла истории из домашнего каталога.
** См. также: [Мониторинг активности пользователей с помощью psacct или acct ]**
1. Просмотр файла истории Bash пользователя
Все команды, которые пользователь выполняет в интерактивной оболочке Bash, обычно сохраняются в скрытый файл .bash_history в его домашнем каталоге.
cat /home/ravi/.bash_history
Так можно увидеть команды, которые пользователь вводил в предыдущих сессиях оболочки.
Однако по умолчанию файл истории не содержит меток времени. Видно, какие команды выполнялись, но не видно, когда именно.
2. Добавление меток времени в историю Bash
Чтобы отображать дату и время для каждой записи в истории, задайте переменную окружения HISTTIMEFORMAT:
export HISTTIMEFORMAT='%F %T '
history
В этом формате используются следующие обозначения:
%Fпоказывает дату в формате YYYY-MM-DD.%Tпоказывает время в формате HH:MM:SS.
После этого команда history выводит метки времени рядом с каждой командой, и просматривать активность становится заметно проще.
Чтобы включить такое поведение автоматически для всех пользователей, добавьте следующую строку в /etc/profile или /etc/bash.bashrc:
export HISTTIMEFORMAT='%F %T '
Это повлияет только на новые сессии оболочки после повторного входа пользователей. Важно помнить, что .bash_history нельзя считать надёжным журналом аудита. Файл принадлежит пользователю, поэтому он может очистить его командой history -c, отключить историю, сбросив переменную HISTFILE, или даже отредактировать файл перед выходом из системы.
Метки времени делают историю удобнее для просмотра собственных команд, но они не мешают пользователю удалить или изменить свою историю.
Если нужна достоверная запись активности, потребуются специализированные инструменты аудита, о которых пойдёт речь ниже.
** См. также: [Настройка даты и времени для каждой команды в истории Bash ]**
3. Просмотр пользователей, вошедших в систему, и их текущих процессов
Команда w даёт быстрый обзор пользователей, которые сейчас вошли в систему. Она показывает, кто вошёл, откуда установлено подключение, как долго пользователь бездействует и какую команду он выполняет в данный момент.
w
В выводе присутствуют:
- имена вошедших пользователей;
- удалённый узел или терминал, с которого выполнено подключение;
- время входа и время бездействия;
- команда или процесс, который сейчас выполняется.
Это удобно для быстрой проверки состояния, но нужно помнить, что w показывает только текущее состояние системы. Она не отслеживает активность постоянно и не сохраняет историю команд.
4. Мониторинг команд в реальном времени с помощью Sysdig
Если нужно видеть команды в момент их выполнения, sysdig подходит гораздо лучше. В отличие от истории Bash, он отслеживает системные вызовы в реальном времени, поэтому активность видна сразу.
После установки sysdig выполните:
sysdig -c spy_users
Что означают параметры:
sysdigзапускает инструмент трассировки системных вызовов.-c spy_usersиспользует встроенный chisel spy_users для отображения интерактивных команд и смены каталогов, выполняемых вошедшими пользователями.
Как только пользователь нажимает Enter, команда сразу появляется на экране. Поэтому sysdig удобен для диагностики и наблюдения за активностью на работающей системе.
5. Запись терминальных сессий пользователей с помощью tlog
Иногда наблюдения за командами в реальном времени недостаточно. Может понадобиться полная запись терминальной сессии пользователя для последующего просмотра. В этом помогает tlog.
tlog записывает терминальные сессии целиком, включая ввод пользователя и вывод терминала, чтобы позже их можно было воспроизвести для аудита или диагностики.
Чтобы вручную запустить запись сессии:
tlog-rec-session
Чтобы воспроизвести записанную сессию:
tlog-play -i session.log
Команды работают так:
tlog-rec-sessionзапускает терминальную сессию, которая записывает всё, что пользователь вводит, и всё, что отображается на экране.tlog-play -i session.logвоспроизводит записанную сессию с исходным таймингом, поэтому можно точно увидеть, что происходило.
В большинстве production-сред администраторы настраивают tlog через PAM (Pluggable Authentication Modules), чтобы запись запускалась автоматически при входе пользователя, без необходимости вручную запускать tlog-rec-session.
RHEL, Rocky Linux и другие дистрибутивы на базе Red Hat включают tlog в официальные репозитории. Для Debian и Ubuntu инструмент тоже доступен, но его может потребоваться установить вручную.
6. Постоянный аудит с помощью auditd
Если нужен надёжный журнал аудита, который пользователи не могут изменить, подойдёт auditd. Он фиксирует системные события на уровне ядра и сохраняет их в /var/log/audit/audit.log, который обычные пользователи не могут редактировать или удалять.
Чтобы записывать запуск всех программ пользователями в 64-битной системе, добавьте правило аудита:
auditctl -a always,exit -F arch=b64 -S execve
Чтобы посмотреть недавно зафиксированные события запуска программ:
ausearch -m execve -ts recent
Эти команды делают следующее:
auditctl -a always,exit -F arch=b64 -S execveдобавляет правило, которое записывает каждый системный вызовexecve. Он возникает при каждом запуске программы.ausearch -m execve -ts recentищет в журнале аудита недавно зафиксированные событияexecve.
Поскольку auditd фиксирует события на уровне ядра, а не полагается на историю оболочки пользователя, он даёт гораздо более достоверный журнал аудита. Поэтому его часто применяют в средах с требованиями к безопасности и соответствию нормам.
7. Запись терминальной сессии с помощью script
Если нужно записать терминальную сессию для диагностики, демонстрации или документирования, команда script станет простым и быстрым вариантом.
Запуск записи:
script -a session.log
Что означают параметры:
-aдописывает данные в существующий файл журнала, а не перезаписывает его.session.logфайл, в который сохраняется терминальная сессия.
Всё, что отображается в терминале во время сессии, записывается в файл журнала. Чтобы остановить запись, выполните:
exit
Команда script легковесна и доступна в большинстве дистрибутивов Linux без дополнительной настройки. Однако она записывает только сессии, запущенные вручную.
Для постоянного аудита всей системы или автоматической записи пользовательских сессий лучше подойдут tlog или auditd.
См. также:
- Советы по усилению безопасности современных Linux-серверов
- Аудит безопасности Linux-системы с помощью Lynis
- Лучшие открытые межсетевые экраны для защиты Linux-серверов
- Практическое руководство по Nmap в Kali Linux
Заключение
История Bash удобна для быстрого просмотра команд, которые выполнял пользователь, но не стоит считать её надёжным журналом аудита, поскольку пользователи могут изменить или удалить её. Для быстрого взгляда на текущую активность команда w показывает, кто вошёл в систему и чем занят.
Если нужен мониторинг в реальном времени, sysdig позволяет видеть команды в момент выполнения. Для долгосрочного аудита и записи сессий tlog и auditd дают заметно более надёжное решение, которое не зависит от истории оболочки пользователя.
Если вы используете другой инструмент или подход для мониторинга активности пользователей в Linux, расскажите о нём в комментариях. Редакции будет интересно узнать.






Пока нет комментариев. Будьте первым!