Как проверять входы в систему с помощью last и lastb

Быстрые ссылки
- Файл wtmp
- Команда last
- Показать конкретное количество строк
- Показывать имена сетей для удалённых пользователей
- Скрыть IP и имена сети
- Выбор записей по дате
- Поиск до конечной даты
- Форматы времени и дат
- Поиск по относительным единицам
- Вчера, сегодня и сейчас
- Опция present
- Команда lastb
- Итог
Файл wtmp
В Linux (и похожих Unix-системах) события входа/выхода сохраняются в бинарном файле wtmp. Этот файл фиксирует моменты входа, выхода, перезагрузок и uptime через записи с временной меткой. “wtmp” — стандартный архив успешных сессий; содержимое не является читаемым текстом, поэтому для анализа используют специализированные утилиты.
Краткое определение: wtmp — бинарный журнал успешных сеансов входа/выхода; btmp — бинарный журнал неудачных попыток входа.
Почему это важно: аудит по wtmp помогает обнаруживать посторонние подключения, анализировать временные паттерны активности и связывать успешные и неудачные попытки входа.
Команда last
last считывает wtmp и выводит построчный список сессий. По умолчанию вывод идёт в хронологическом порядке от самых новых записей вне консоли до самых старых.
Простой запуск:
lastЧто содержится в каждой строке (слева направо):
- имя пользователя;
- терминал или псевдо-терминал (например, tty1, pts/3 или :0 для локальной сессии X);
- IP-адрес или имя удалённого хоста (если доступно);
- дата и время входа;
- длительность сессии или пометка “still logged in” / “still running” для текущих сессий.
Пояснение: в журнал автоматически попадает запись пользователя reboot при каждом запуске системы; поле терминала содержит информацию о версии ядра, а длительность для таких записей отражает uptime.
Показать конкретное количество строк
Если wtmp большой, полезно ограничить количество выводимых строк. last принимает параметр с дефисом, обозначающий число строк от начала (то есть самых последних сессий):
last -5Команда вернёт пять самых последних записей — обычно то, что администратор хочет увидеть в первую очередь.

Показывать имена сетей для удалённых пользователей
Опция -d пытается разрешить IP-адрес в сетевое имя (обратное DNS-резолвинг). Это удобно, если вам важны доменные имена, а не только IP.
last -dВажно: резолвинг выполняется через системный DNS и может быть медленным или недоступным; иногда адрес остаётся в виде IP.

Скрыть IP-адреса и сетевые имена
Если вам не нужны IP-адреса (например, для печатного отчёта), используйте опцию -R, чтобы подавить поле хоста.
last -RВ следующих примерах по удобству для читаемости использована опция -R; но при расследовании подозрительных подключений поле с IP крайне полезно, и его лучше не скрывать.

Выбор записей по дате
Опция -s (since) ограничивает вывод записями, произошедшими начиная с указанной даты/времени. Формат даты предпочтителен ISO-подобный (YYYY-MM-DD или компактный YYYYMMDDHHMMSS), но поведение может отличаться между реализациями.
Пример: показать записи с 00:00 26 мая 2019 года:
last -R -s 2019-05-26Вывод включает записи, начиная с 00:00 указанной даты и до конца лога.

Поиск до конечной даты
Опция -t (until) задаёт верхнюю границу временного интервала. Вместе -s и -t позволяют получить записи между двумя моментами.
Например, чтобы получить события с 2019-05-26 00:00 до 2019-05-27 00:00:
last -R -s 2019-05-26 -t 2019-05-27Обратите внимание, что некоторые форматы дат и времени в разных дистрибутивах могут работать по-разному — ниже есть раздел про форматы.
Форматы времени и дат
Поддерживаемые форматы, которые чаще всего работают:
- YYYYMMDDhhmmss (пример: 20190526110000)
- YYYY-MM-DD (время устанавливается на 00:00:00)
- hh:mm (день — сегодня, секунды = 00)
- now, yesterday, today, tomorrow
- относительные выражения: +5min, -2days
Пример, который не сработал в ряде тестов с пробельным разделением между датой и временем (зависит от реализации):
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00Вместо него надёжно работать будет компактная форма:
last -R -s 20190526110000 -t 20190527130000Совет: если команда не возвращает ожидаемых записей, попробуйте сначала проверить более широкие интервалы и затем сужать временной диапазон.
Поиск по относительным единицам
Можно задавать интервалы относительно текущего времени. Пример: получить записи с двух дней назад до одного дня назад:
last -R -s -2days -t -1daysЭто удобно в автоматизированных скриптах для сбора метрик за последние N дней.
Вчера, сегодня и сейчас
Ключевые «шорткаты»:
last -R -s yesterday -t todayЭтот вызов покажет события начиная с 00:00 вчерашнего дня до 00:00 сегодняшнего (не включает текущие записи сегодня). Чтобы охватить период от начала дня до текущего момента, используйте:
last -R -s today -t nowОпция now эквивалентна сегодняшней дате и текущему времени.
Опция present
-p позволяет найти, кто был залогинен в конкретный момент времени, независимо от времени входа/выхода. Если указан только hh:mm, считается, что дата — сегодня.
Примеры:
last -R -p 09:30
last -R -p nowЗаписи, которые покрывают указанное время, будут включены. Для текущего момента это даёт тот же результат, что и команда who, но last -p может показать пользователей, которые в момент времени были активны, даже если они позже вышли.

Команда lastb
lastb читает btmp и показывает неудачные попытки входа. Формат вывода похож на last, но длительность сессий равна 00:00, потому что попытки не привели к успешной сессии.
Важно: btmp обычно доступен только для root, поэтому используйте sudo:
sudo lastb -Rlastb полезна для обнаружения брутфорс-атак, последовательных неудачных попыток и источников таких попыток.
Когда last может не показать ожидаемые данные
- Файл wtmp/btmp может быть очищен администратором или ротацией логов; старые записи удалены.
- Если система использует альтернативные механизмы аутентификации или централизованные логи (например, PAM с удалёнными аудит-агентами), часть информации может не попасть в локальный wtmp.
- Виртуализованные окружения или контейнеры иногда не пишут в общесистемный wtmp или имеют собственные журналы.
- Некорректные форматы даты/времени в командах -s/-t в зависимости от версии утилиты.
Альтернативы и дополнения
- journalctl -b /var/log/auth.log — для систем, где события аутентификации пишутся в systemd-journald или текстовые логи.
- ausearch/auditctl — для детального аудита через Linux Audit Framework.
- Системы централизованного логирования (syslog/nginx/ELK, SIEM) — позволяют коррелировать входы с другими событиями.
- lastlog — показывает последний вход для каждого пользователя (полезно для быстрого обзора).
Выбор инструмента зависит от задачи: быстрый локальный аудит — last/lastb; корелляция и долгосрочный анализ — централизованный SIEM.
Методика расследования подозрительного входа (мини-SOP)
- Сбор начальных данных
- last -R -s <дата> -t <дата> — получить список подозрительных сессий.
- sudo lastb -R -s <дата> -t <дата> — собрать неудачные попытки.
- Идентификация источника
- Если есть IP, выполнить whois и обратный DNS, посмотреть геолокацию (только для ориентира).
- Сопоставление с другими логами
- /var/log/auth.log, journalctl, sudo/secure — проверить привилегированные действия.
- Оценка риска
- Были ли выполнены команды с повышенными привилегиями? Есть ли следы отключения журналирования?
- Контейнеризация и учет пользователей
- Проверить, не использовал ли пользователь общий аккаунт (например, ubuntu, ec2-user).
- Ответные меры
- Сброс пароля, блокировка IP или аккаунта, уведомление владельца системы и запись инцидента.
- Документирование
- Сохранить выводы (включая содержимое wtmp/btmp при помощи last -f PATH, если нужно) и временные метки.
Контрольные списки по ролям
Администратор:
- Проверил wtmp и btmp за интересующий период.
- Сопоставил записи с /var/log/auth.log и journalctl.
- Проверил sudo-историю и crontab на подозрительные задания.
- При необходимости заблокировал аккаунт и запретил доступ по ключу/паролю.
Аналитик SOC:
- Сверил IP-источники с угрозоразведкой и списками подозрительных адресов.
- Оценил попытки брутфорса (частота, временные окна).
- Подготовил временную шкалу событий для инцидент-репорта.
Helpdesk/поддержка:
- Проверил, не связана ли активность с пользователем (путешествие, смена IP).
- Помог пользователю безопасно сменить пароль и настроить MFA.
Чек-лист при расследовании инцидента (кратко)
- Сохранить копии текущих логов и wtmp/btmp.
- Зафиксировать точные временные метки и смещения временных зон.
- Проверить совпадения между успешными и неудачными входами.
- Проверить время и командную историю (если доступна).
- Изолировать скомпрометированные учётные записи.
Тесты и критерии приёмки
Критерии приёмки инструментов и сценариев тестирования:
- Команда last возвращает записи за указанный интервал при корректных параметрах.
- Команда lastb возвращает неудачные попытки и требует root-доступ.
- Опция -R действительно скрывает поле хоста.
- Опция -d разрешает DNS-имена, если есть обратная запись.
Тестовые сценарии:
- Создать тестовую учётную запись, выполнить вход и выход, убедиться, что запись появилась в last.
- Смоделировать неудачную попытку входа и проверить lastb.
- Проверить поведение при ротации файлов wtmp/btmp (архивация и восстановление).
Шпаргалка команд (cheat sheet)
last # показать все записи из wtmp
last -5 # 5 последних записей
last -R # скрыть поле хоста (IP/имя)
last -d # попытаться разрешить IP в имя
last -s 2019-05-26 # записи с 2019-05-26 00:00
last -s 20190526110000 # записи с точного времени
last -s -2days -t -1days # за относительный интервал
last -p 09:30 # кто был в 09:30 сегодня
sudo lastb -R # просмотреть btmp (неудачи)Дерево принятия решения (Mermaid)
flowchart TD
A[Есть подозрительная сессия?] -->|Нет| B[Завершить]
A -->|Да| C{Есть IP в записи?}
C -->|Да| D[Проверить whois, DNS, блокировать IP при необходимости]
C -->|Нет| E[Проверить локальные учетные записи и sudo logs]
D --> F[Сопоставить с auth.log/journalctl]
E --> F
F --> G{Найдены привилегированные действия?}
G -->|Да| H[Эскалировать инцидент, изолировать систему]
G -->|Нет| I[Отметить и мониторить]Сценарии, когда процедура не сработает
- wtmp/btmp были повреждены или удалены — в этом случае придётся опираться на другие логи и резервные копии.
- Если злоумышленник сменил или подделал системное время, временные метки могут быть некорректными.
- В контейнерных окружениях события могут не записываться в системный wtmp.
Безопасность и приватность
- Храните резервные копии wtmp/btmp в защищённом месте; это чувствительные журналы.
- При обмене выводами с третьими лицами удаляйте или маскируйте IP/hostname, если важно соблюдение приватности.
- Используйте MFA и ограничение входа по IP для снижения риска удалённых атак.
Короткая методика проверки (для быстрой работы)
- last -R -5 — быстрый обзор последних сессий.
- sudo lastb -R -5 — проверить неудачные попытки.
- last -R -s today -t now — кто был сегодня.
- Сопоставить с journalctl и auth.log при подозрениях.
Глоссарий (одна строка)
wtmp — бинарный журнал успешных входов/выходов; btmp — бинарный журнал неудачных попыток; last — утилита для чтения wtmp; lastb — утилита для чтения btmp.
Итог
Команды last и lastb — простые и надёжные инструменты для локального аудита входов в систему. Они даёт быстрый обзор того, кто и когда подключался к вашей машине, и служат хорошей отправной точкой при расследовании подозрительной активности. Для глубокой аналитики стоит сочетать их вывод с системными журналами, аудит-логами и централизованными системами логирования.
Важное: при расследовании всегда сохраняйте исходные данные и документируйте шаги, чтобы сохранить доказательства и воспроизводимость проверки.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента