Кто, когда и откуда? Хорошие практики безопасности говорят, что вы должны знать, кто имеет доступ к вашему компьютеру Linux. Мы покажем вам, как это сделать.
Оглавление
Файл wtmp
Linux и другие Unix-подобные операционные системы, такие как MacOS, очень хорошо ведут журнал. Где-то в недрах системы есть журнал практически всего, о чем вы можете подумать. Интересующий нас файл журнала называется wtmp. «W» может означать «когда» или «кто» — похоже, никто не согласен. Часть «tmp», вероятно, означает «временный», но также может означать «отметку времени».
Что мы действительно знаем, так это то, что wtmp — это журнал, который фиксирует и записывает каждое событие входа и выхода. Просмотр данных в журнале wtmp — это основной шаг на пути к обеспечению безопасности при выполнении ваших обязанностей системного администратора. Для типичного семейного компьютера это может быть не так критично с точки зрения безопасности, но интересно иметь возможность проверить ваше совместное использование компьютера.
В отличие от многих текстовых файлов журнала в Linux, wtmp — это двоичный файл. Чтобы получить доступ к данным в нем, нам нужно использовать инструмент, предназначенный для этой задачи.
Этот инструмент — последняя команда.
Последняя команда
Последняя команда считывает данные из журнала wtmp и отображает их в окне терминала.
Если вы наберете последний и нажмете Enter, он отображать все записи из файла журнала.
last
Каждая запись из wtmp отображается в окне терминала.
Слева направо каждая строка содержит:
Имя пользователя вошедшего в систему.
Терминал, в который они вошли. Терминальная запись: 0 означает, что они вошли в систему на самом компьютере Linux.
IP-адрес машины, в которую они вошли.
Дата и время входа в систему.
Продолжительность сеанса.
Последняя строка сообщает нам дату и время самого раннего сеанса, записанного в журнале.
Запись для фиктивного пользователя «перезагрузка» вносится в журнал каждый раз при загрузке компьютера. Поле терминала заменяется версией ядра. Продолжительность сеанса входа в систему для этих записей представляет время безотказной работы компьютера.
Отображение определенного количества строк
Использование последней команды само по себе создает дамп всего журнала, большая часть которого проходит мимо окна терминала. Часть, которая остается видимой, — это самые ранние данные в журнале. Вероятно, это не то, что вы хотели видеть.
Вы можете указать последнему дать вам определенное количество строк вывода. Сделайте это, указав желаемое количество строк в командной строке. Обратите внимание на дефис. Чтобы увидеть пять строк, вам нужно ввести -5, а не 5:
last -5
Это дает первые пять строк из журнала, которые являются самыми последними данными.
Отображение сетевых имен для удаленных пользователей
Параметр -d (система доменных имен) сообщает последнему, что нужно попытаться разрешить IP-адреса удаленных пользователей в имени машины или сети.
last -d
Последний не всегда может преобразовать IP-адрес в сетевое имя, но команда сделает это, когда сможет.
Скрытие IP-адресов и сетевых имен
Если вас не интересует IP-адрес или сетевое имя, используйте параметр -R (без имени хоста), чтобы подавить это поле.
Поскольку это дает более аккуратный вывод без уродливых оберток, этот параметр использовался во всех следующих примерах. Если вы использовали последний, чтобы попытаться идентифицировать необычную или подозрительную активность, вы не подавили бы это поле.
Выбор записей по дате
Вы можете использовать параметр -s (с), чтобы ограничить вывод, чтобы отображались только события входа в систему, которые произошли с определенной даты.
Если вы хотите увидеть только события входа в систему, которые произошли с 26 мая 2019 года, вы должны использовать следующую команду:
last -R -s 2019-05-26
В выходных данных отображаются записи с событиями входа в систему, которые произошли с 00:00 в указанный день, до самых новых записей в файле журнала.
Поиск до конечной даты
Вы можете использовать -t (до), чтобы указать дату окончания. Это позволяет вам выбрать набор записей входа в систему, которые имели место между двумя интересующими датами.
Эта команда последней запрашивает получение и отображение записей входа с 00:00 (рассвет) 26-го числа до времени 00:00 (рассвет) 27-го числа. Это сужает список до сеансов входа в систему, которые имели место только 26-го числа.
Форматы времени и даты
Вы можете использовать время, а также дату с параметрами -s и -t.
Различные форматы времени, которые можно использовать с последними параметрами, использующими дату и время (предположительно):
ГГГГММДДччммсс
ГГГГ-ММ-ДД чч: мм: сс
ГГГГ-ММ-ДД чч: мм — секунды установлены на 00
ГГГГ-ММ-ДД — время установлено на 00:00:00
чч: мм: сс — дата установлена сегодня
чч: мм — дата будет установлена на сегодняшний день, секунды на 00
в настоящее время
вчера — время установлено на 00:00:00
сегодня — время установлено на 00:00:00
завтра — время установлено на 00:00:00
+ 5мин
-5 дней
Почему «якобы»?
Второй и третий форматы в списке не работали во время исследования для этой статьи. Эти команды были протестированы в дистрибутивах Ubuntu, Fedora и Manjaro. Это производные от дистрибутивов Debian, RedHat и Arch соответственно. Это охватывает все основные семейства дистрибутивов Linux.
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
Вчера, сегодня и сейчас
Вы можете использовать вчера и завтра как сокращение для вчерашней даты и сегодняшней даты.
last -R -s yesterday -t today
Не то чтобы здесь не было записей на сегодня. Это ожидаемое поведение. Команда запрашивает записи с даты начала до даты окончания. Он не включает записи с датой окончания.
Опция «сейчас» — это сокращение от «сегодня в текущее время». Чтобы увидеть события входа в систему, которые произошли с 00:00 (рассвет) до момента, когда вы введете команду, используйте эту команду:
last -R -s today -t now
Это покажет все события входа в систему вплоть до настоящего времени, включая те, которые все еще находятся в системе.
Настоящий вариант
Параметр -p (присутствует) позволяет узнать, кто вошел в систему в определенный момент времени.
Не имеет значения, когда они вошли в систему или вышли, но если они вошли в систему в указанное вами время, они будут включены в список.
Если вы указываете время без даты, последний предполагает, что вы имеете в виду «сегодня».
last -R -p 09:30
Люди, которые все еще находятся в системе (очевидно), не имеют времени выхода из системы; они описаны как все еще вошедшие в систему. Если компьютер не перезагружался с указанного времени, он будет отображаться как работающий.
Если вы используете сокращение now с параметром -p (present), вы можете узнать, кто вошел в систему во время выполнения команды.
last -R -p now
Это довольно сложный способ добиться того, что можно сделать с помощью команды who.
Команда lastb
Заслуживает упоминания команда lastb. Он читает данные из журнала с именем btmp. По этому названию журнала есть немного больше консенсуса. Буква «b» означает «плохо», но часть «tmp» все еще вызывает споры.
lastb перечисляет неудачные (неудачные) попытки входа в систему. Он принимает те же параметры, что и последний. Поскольку это были неудачные попытки входа в систему, все записи будут иметь продолжительность 00:00.
Вы должны использовать sudo с lastb.
sudo lastb -R
Последнее слово по делу
Зная, кто вошел в ваш компьютер с Linux, когда и откуда можно получить полезную информацию. Сочетание этого с подробностями неудачных попыток входа в систему дает вам первые шаги в расследовании подозрительного поведения.