Хто, коли і звідки? Задля безпеки важливо знати, хто отримував доступ до вашого комп’ютера на базі Linux. Зараз ми розглянемо, як це можна зробити.
Файл журналу wtmp
Операційні системи Linux та інші, що базуються на Unix, такі як MacOS, відмінно ведуть системні журнали. У системі зберігається інформація практично про все, що вас цікавить. Файл журналу, який нас цікавить, має назву wtmp. Літера “w” у назві, ймовірно, означає “хто” або “коли” – тут думки розходяться. “tmp” скоріш за все є скороченням від “тимчасовий”, але може означати і “мітка часу”.
Файл wtmp – це журнал, де фіксується кожна подія входу та виходу з системи. Перегляд інформації з журналу wtmp є важливим кроком для адміністраторів, які дбають про безпеку. Для домашнього комп’ютера це може бути не так критично, але цікаво подивитися історію використання комп’ютера.
На відміну від багатьох текстових файлів журналу в Linux, wtmp є двійковим файлом. Для доступу до інформації з нього потрібно використовувати спеціальний інструмент.
Цим інструментом є команда last
.
Команда last
Команда last
зчитує дані з журналу wtmp та виводить їх у вікно терміналу.
Якщо ви введете last
і натиснете Enter, буде відображено повний список записів з файлу журналу.
last
Кожен запис з wtmp буде показано у вікні терміналу.
Зліва направо кожен рядок містить:
Ім’я користувача, що здійснив вхід.
Термінал, через який було здійснено вхід. Запис терміналу :0 означає, що користувач увійшов у систему безпосередньо на комп’ютері.
IP-адреса комп’ютера, з якого було здійснено вхід.
Дата та час входу.
Тривалість сесії.
Останній рядок відображає дату та час найранішого запису в журналі.
Запис для фіктивного користувача “reboot” додається до журналу при кожному завантаженні комп’ютера. У полі терміналу відображається версія ядра. Тривалість сеансу для цих записів показує час роботи комп’ютера.
Відображення певної кількості рядків
Команда last
без параметрів показує весь журнал, більша частина якого просто прокручується за межі вікна терміналу. Видно лише початок журналу, що зазвичай не є корисним.
Можна задати команді last
виведення певної кількості рядків. Для цього потрібно вказати потрібну кількість у командному рядку. Не забувайте про дефіс перед числом. Щоб побачити п’ять рядків, потрібно ввести -5
, а не 5
:
last -5
Це виведе перші п’ять рядків журналу, тобто найновіші дані.
Відображення мережевих імен для віддалених користувачів
Параметр -d
(Domain Name System) вказує команді last
спробувати перетворити IP-адреси віддалених користувачів на їхні імена машин або мереж.
last -d
Не завжди вдається перетворити IP-адресу на мережеве ім’я, але команда зробить це, коли це можливо.
Приховування IP-адрес та мережевих імен
Якщо IP-адреси або мережеві імена вам не потрібні, скористайтеся параметром -R
(no Hostname), щоб приховати це поле.
Оскільки це дає більш чистий результат без зайвих переносів, цей параметр використовується в подальших прикладах. Якщо ви використовували last
для виявлення незвичайної активності, то приховувати IP-адреси не варто.
Фільтрація записів за датою
Ви можете використовувати параметр -s
(since), щоб обмежити виведення, показуючи лише події входу з певної дати.
Щоб побачити події входу, які відбулися з 26 травня 2019 року, використайте наступну команду:
last -R -s 2019-05-26
Виведення покаже записи про події входу, що відбулися з 00:00 зазначеного дня до останніх записів у файлі журналу.
Пошук до певної дати
Ви можете використовувати параметр -t
(until), щоб вказати дату закінчення. Це дає змогу вибрати набір записів про вхід, що відбулися між двома датами.
Ця команда виведе записи про вхід з 00:00 26-го числа до 00:00 27-го числа. Це обмежить список сеансами, які відбулися лише 26-го числа.
Формати часу та дати
З параметрами -s
і -t
можна використовувати не тільки дати, але й час.
Формати, що можуть використовуватися з last
для визначення дати та часу:
РРРРММДДггххсс
РРРР-ММ-ДД год:хх:сс
РРРР-ММ-ДД год:хх – секунди будуть встановлені на 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
Це не означає, що в сьогоднішній день не було записів, це очікувана поведінка. Команда виводить записи з дати початку до дати закінчення, не включаючи записи в дату закінчення.
Опція now
– це скорочення від “сьогодні в поточний час”. Щоб побачити події входу, що відбулися з 00:00 до моменту виконання команди, використовуйте:
last -R -s today -t now
Тут відобразяться всі події входу на поточний момент, включаючи тих, хто ще в системі.
Параметр -p
(present)
Параметр -p
(present) дає змогу дізнатися, хто був у системі в конкретний момент часу.
Неважливо, коли вони увійшли чи вийшли, якщо вони були в системі у вказаний вами час, їх буде включено до списку.
Якщо ви вказали час без дати, то last
вважає, що ви маєте на увазі “сьогодні”.
last -R -p 09:30
Користувачі, що все ще в системі (очевидно), не мають часу виходу; вони будуть позначені як “все ще в системі”. Якщо комп’ютер не перезавантажувався з моменту, який ви вказали, то він також буде позначений як “все ще працює”.
Використовуючи now
з опцією -p
, ви можете побачити, хто зараз в системі.
last -R -p now
Це складніший спосіб досягти того, що можна отримати за допомогою команди who
.
Команда lastb
Варто згадати про команду lastb
. Вона зчитує дані з журналу під назвою btmp
. Щодо назви журналу є трохи більше згоди. “b” означає bad (погано), а частина “tmp” все ще обговорюється.
lastb
показує невдалі спроби входу. Вона приймає ті ж самі параметри, що й команда last
. Оскільки це були невдалі спроби входу, усі записи матимуть тривалість 00:00.
Команду lastb
потрібно запускати з правами адміністратора (sudo
).
sudo lastb -R
Заключне слово
Знання того, хто, коли і звідки входив у систему Linux, є корисною інформацією. Доповнюючи це даними про невдалі спроби входу, ви отримуєте перші кроки для розслідування підозрілої поведінки.