Kdo, kdy a odkud? Bezpečnostní principy doporučují znát, kdo měl přístup k vašemu linuxovému systému. Ukážeme si, jak toho dosáhnout.
Protokol wtmp
Operační systémy Linux a podobné Unixové systémy, například MacOS, jsou známé svým detailním protokolováním. Hluboko uvnitř systému se skrývají záznamy téměř o všem. Zajímat nás bude konkrétně soubor protokolu s názvem wtmp. Písmeno „w“ by mohlo znamenat „kdy“ nebo „kdo“, názory se různí. Část „tmp“ s největší pravděpodobností znamená „dočasné“, ale může odkazovat i na „časové razítko“.
Záznamy v wtmp zachycují každou událost přihlášení a odhlášení. Kontrola těchto dat je důležitá pro správce systému z hlediska bezpečnosti. U běžného domácího počítače to nemusí být bezpečnostně kritické, ale je užitečné sledovat, jakým způsobem se počítač používá.
Wtmp je na rozdíl od mnoha textových protokolů v Linuxu binární soubor. Pro přístup k datům v něm je nutné použít specializovaný nástroj.
Tímto nástrojem je příkaz `last`.
Příkaz `last`
Příkaz `last` extrahuje data z protokolu wtmp a zobrazí je v terminálu.
Pokud zadáte `last` a stisknete Enter, zobrazí se všechny položky z logu.
last
Každá položka z wtmp se objeví v terminálovém okně.
Zleva doprava každý řádek obsahuje:
Jméno uživatele, který se přihlásil.
Terminál, ke kterému byl připojen. Záznam :0 znamená, že se přihlásil přímo u linuxového počítače.
IP adresa počítače, ze kterého byl připojen.
Časové razítko přihlášení.
Délka trvání relace.
Poslední řádek obsahuje datum a čas první zaznamenané relace v protokolu.
Při každém startu počítače se do protokolu přidá záznam o přihlášení fiktivního uživatele „reboot“. V poli terminálu je uvedena verze jádra. Doba trvání relace zde reprezentuje dobu, po kterou byl počítač v provozu.
Zobrazení určitého počtu řádků
Samotný příkaz `last` zobrazí celý protokol, z něhož většinu okamžitě prolistujeme. Vidět tak zůstanou nejstarší data, což nejspíš není to, co jste chtěli.
Můžete příkazu `last` určit, kolik řádků výstupu chcete. Uděláte to zadáním čísla na příkazovém řádku. Důležitá je pomlčka. Pro zobrazení pěti řádků použijte `-5`, nikoli `5`:
last -5
Zobrazí se prvních pět řádků protokolu, tedy nejnovější záznamy.
Zobrazení síťových názvů pro vzdálené uživatele
Volba `-d` (Domain Name System) říká příkazu `last`, aby se pokusil přeložit IP adresy vzdálených uživatelů na jména počítačů nebo sítě.
last -d
Překlad IP adresy na síťový název není vždy možný, ale příkaz to udělá, pokud je to proveditelné.
Skrytí IP adres a síťových názvů
Pokud vás IP adresy ani síťové názvy nezajímají, můžete je potlačit pomocí volby `-R` (bez hostitelského názvu).
Tato volba se používá v následujících příkladech, protože zjednodušuje výstup a zabraňuje ošklivému zalomení řádků. V případě, že chcete identifikovat podezřelou aktivitu, byste tuto volbu ale neměli používat.
Výběr záznamů podle data
Volbou `-s` (od) můžete omezit výstup tak, aby zobrazoval jen události přihlášení, které proběhly od zadaného data.
Chcete-li zobrazit události přihlášení od 26. května 2019, použijete následující příkaz:
last -R -s 2019-05-26
Výstup obsahuje záznamy o přihlášení od půlnoci zadaného dne až po nejnovější záznamy v logu.
Hledání do data ukončení
Pro nastavení koncového data můžete použít volbu `-t` (do). Zobrazí tak přihlašovací záznamy mezi dvěma zvolenými daty.
Tento příkaz zobrazí záznamy od půlnoci 26. do půlnoci 27. Tím se seznam omezí jen na relace přihlášené 26.
Formáty času a data
S volbami `-s` a `-t` můžete používat data i časy.
Možné formáty data a času pro `last` (údajně) jsou:
YYYYMMDDhhmmss
YYYY-MM-DD hh:mm:ss
YYYY-MM-DD hh:mm – sekundy se nastaví na 00
YYYY-MM-DD – čas se nastaví na 00:00:00
hh:mm:ss – datum se nastaví na dnešek
hh:mm – datum se nastaví na dnešek, sekundy na 00
Nyní
včera – čas se nastaví na 00:00:00
dnes – čas se nastaví na 00:00:00
zítra – čas se nastaví na 00:00:00
+ 5 min
-5 dní
Proč „údajně“?
Během výzkumu se druhý a třetí formát v seznamu neosvědčil. Příkazy byly testovány na distribucích Ubuntu, Fedora a Manjaro, které jsou založeny na Debainu, RedHatu a Archu, tedy na všech hlavních rodinách distribucí Linuxu.
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00
Jak vidíte, příkaz nevrátil žádné záznamy.
Použitím prvního formátu datumu a času se stejnými hodnotami se záznamy zobrazí:
last -R -s 20190526110000 -t 20190527130000
Vyhledávání podle relativních jednotek
Časové úseky můžete zadat i v minutách nebo dnech vzhledem k aktuálnímu datu a času. Zde požadujeme záznamy od dvou dnů zpět do jednoho dne zpět.
last -R -s -2days -t -1days
Včera, dnes a teď
Jako zkratku pro včerejší a dnešní datum lze použít slova `yesterday` a `today`.
last -R -s yesterday -t today
To, že se nezobrazí žádné dnešní záznamy je očekávané chování. Příkaz požaduje záznamy od počátečního data do koncového, nezahrnuje tedy záznamy z koncového data.
Volba `now` je zkratkou pro „dnes v aktuálním čase“. Pro zobrazení přihlášení, která proběhla od půlnoci do zadání příkazu použijte:
last -R -s today -t now
Zobrazí se všechna přihlášení do současné doby, včetně těch, která jsou stále aktivní.
Volba současnosti
Volba `-p` (současnost) vám umožňuje zjistit, kdo byl přihlášen v určitý okamžik.
Nezáleží na tom, kdy se přihlásili nebo odhlásili, ale pokud byli v zadaném okamžiku přihlášeni, objeví se ve výpisu.
Pokud zadáte čas bez data, bude se předpokládat „dnes“.
last -R -p 09:30
Lidé, kteří jsou stále přihlášeni, samozřejmě nemají uvedený čas odhlášení a jsou označeni jako „stále přihlášeni“. Pokud od zadaného okamžiku nebyl počítač restartován, bude označen jako „stále v chodu“.
Pokud použijete `now` s volbou `-p`, zjistíte, kdo je přihlášen v okamžiku zadání příkazu.
last -R -p now
Je to poněkud složitý způsob, jak zjistit to, co umí příkaz `who`.
Příkaz `lastb`
Příkaz `lastb` si zaslouží zmínku. Zpracovává data z protokolu s názvem btmp. U názvu tohoto logu existuje větší shoda. Písmeno „b“ značí špatné (bad), ale význam „tmp“ je stále diskutabilní.
`lastb` vypisuje špatné (neúspěšné) pokusy o přihlášení. Používá stejné volby jako `last`. Protože se jednalo o neúspěšné pokusy, všechny záznamy budou mít délku trvání 00:00.
Příkaz `lastb` vyžaduje oprávnění sudo.
sudo lastb -R
Závěrem
Mít přehled o tom, kdo, kdy a odkud se přihlásil k vašemu linuxovému počítači, je velmi užitečné. V kombinaci se záznamy o neúspěšných pokusech o přihlášení je to první krok při vyšetřování podezřelé aktivity.