Анализ SSH-сессий с помощью команды zgrep и grep
В системном администрировании важную роль играет мониторинг и анализ логов. Логи позволяют отслеживать активность пользователей, выявлять потенциальные угрозы безопасности и диагностировать ошибки. Одним из ключевых логов в Unix-подобных системах является файл /var/log/auth.log
, в котором фиксируются события аутентификации, включая вход через SSH.
Зачем анализировать сессии SSH?
SSH (Secure Shell) — это защищённый протокол удалённого доступа к серверу. Каждый раз, когда пользователь подключается к серверу по SSH, система записывает информацию об этом в логи. В частности, событие session opened for user
указывает на успешное открытие пользовательской сессии. Анализ таких записей позволяет:
- Понять, кто и когда подключался к серверу.
- Отследить необычную или потенциально вредоносную активность.
- Выполнить аудит доступа к серверу.
Команда для поиска SSH-сессий
Для поиска событий открытия сессий через SSH можно использовать следующую команду:
zgrep sshd /var/log/auth.log* -h | grep -F 'session opened for user'
Разбор команды
1. zgrep sshd /var/log/auth.log*
Команда zgrep
работает как обычный grep
, но умеет обрабатывать также сжатые файлы .gz
. Это удобно, потому что старые версии файла /var/log/auth.log
часто хранятся в сжатом виде (например, /var/log/auth.log.1.gz
, /var/log/auth.log.2.gz
и т.д.).
Флаг sshd
указывает на то, что мы ищем только те строки, которые связаны с работой SSH-сервера.
2. -h
Этот параметр отключает вывод названий файлов перед результатами. Таким образом, в консоли будут видны только сами строки совпадений, без лишней информации.
3. | grep -F 'session opened for user'
Результаты предыдущего поиска передаются через пайп (|
) на вход второй команды grep
. Здесь уже фильтруется текст по точной строке 'session opened for user'
.
Флаг -F
говорит grep
, что нужно интерпретировать строку как обычный текст, а не как регулярное выражение.
Что показывает эта команда?
Команда выводит список всех событий, когда пользователь успешно вошёл в систему через SSH и была создана новая сессия. Пример вывода может выглядеть так:
Aug 10 14:22:35 server sshd[1234]: pam_unix(sshd:session): session opened for user alice by (uid=0)
Aug 10 15:05:12 server sshd[5678]: pam_unix(sshd:session): session opened for user root by (uid=0)
Каждая запись содержит:
- Дату и время события.
- Имя хоста.
- PID процесса sshd
.
- Имя пользователя, открывшего сессию.
- UID пользователя, инициировавшего сессию (в данном случае — root, uid=0).
Как использовать результаты анализа?
- Аудит безопасности: Если вы замечаете неожидаемые сессии (например, вход под учётной записью root или в ночное время), это может быть сигналом о компрометации системы.
- Мониторинг активности: Можно отслеживать, какие пользователи наиболее активны, и как часто они подключаются к серверу.
- Автоматизация: Эту команду можно встроить в скрипты, чтобы автоматически собирать статистику или отправлять оповещения при подозрительной активности.
Возможные модификации команды
Если вам нужно сузить диапазон поиска или обработать данные иначе, можно адаптировать команду:
-
Поиск за конкретную дату:
bash zgrep 'Aug 10' /var/log/auth.log* | zgrep sshd | grep -F 'session opened for user'
-
Подсчёт количества сессий:
bash zgrep sshd /var/log/auth.log* -h | grep -Fc 'session opened for user'
-
Сохранение результата в файл:
bash zgrep sshd /var/log/auth.log* -h | grep -F 'session opened for user' > ssh_sessions.log