Hur man använder det sista kommandot på Linux

By rik

Vem, när och var? För att upprätthålla god säkerhetspraxis är det viktigt att ha koll på vilka användare som har haft tillgång till din Linux-dator. Här beskriver vi hur du kan ta reda på det.

Loggfilen wtmp

Linux, liksom andra Unix-baserade operativsystem såsom MacOS, är kända för sin omfattande loggning. Det finns loggar som registrerar nästan varenda händelse i systemet. Den loggfil som är av intresse för oss här är wtmp. Bokstaven ”w” kan potentiellt stå för ”vem” eller ”när”, men det råder lite oenighet om det. ”tmp”-delen antas ofta stå för ”temporary”, men kan även tolkas som ”timestamp”.

Oavsett tolkningen är wtmp en fil som loggar varje lyckad inloggning och utloggning. Att analysera informationen i wtmp-loggen är en grundläggande säkerhetsåtgärd, speciellt för systemadministratörer. Även om det kanske inte är lika kritiskt för en vanlig hemdator, kan det vara intressant att överblicka datorns användning.

Till skillnad från många textbaserade loggfiler i Linux, är wtmp en binär fil. För att läsa informationen i den behöver vi använda ett specialverktyg.

Det verktyget kallas för kommandot `last`.

Kommandot `last`

Kommandot `last` tolkar datan från wtmp-loggen och presenterar den i terminalfönstret.

Om du skriver `last` i terminalen och trycker på Enter, kommer alla poster från loggfilen att visas.

last

Varje rad i utskriften motsvarar en post i wtmp-loggen.

Från vänster till höger, innehåller varje rad följande information:

Användarnamnet på den som loggade in.
Terminalen som användes för inloggningen. En post `:0` indikerar att inloggningen gjordes direkt på datorn.
IP-adressen från vilken inloggningen skedde.
Tid och datum för inloggningen.
Sessionens varaktighet.

Den sista raden visar datum och tid för den första sparade sessionen i loggen.

Varje gång datorn startas om, loggas en inloggningspost för den fiktiva användaren ”omstart”. I dessa poster ersätts terminalfältet med information om kärnversionen. Varaktigheten för dessa poster motsvarar datorns driftstid.

Visa ett specifikt antal rader

Om du använder kommandot `last` utan argument, kommer hela loggen att visas i terminalen och försvinna snabbt. Det du ser är vanligtvis de äldsta posterna i loggen, vilket förmodligen inte är det du vill se.

Du kan ange ett specifikt antal rader som ska visas med `last`. Det gör du genom att ange antalet rader efter kommandot, med ett minustecken framför. För att se fem rader skriver du `-5` och inte `5`:

last -5

Detta visar de fem senaste posterna i loggen.

Visa nätverksnamn för fjärranvändare

Med alternativet `-d` (Domain Name System) kan `last` försöka översätta fjärranvändares IP-adresser till deras maskin- eller nätverksnamn.

last -d

Det är inte alltid möjligt för `last` att konvertera IP-adressen till ett nätverksnamn, men kommandot kommer att göra sitt bästa.

Dölja IP-adresser och nätverksnamn

Om du inte är intresserad av IP-adressen eller nätverksnamnet, kan du dölja den informationen med alternativet `-R` (no hostname).

Detta gör utskriften mer överskådlig. I följande exempel kommer vi att använda det här alternativet. Om du använde `last` för att upptäcka ovanlig eller misstänkt aktivitet, bör du inte dölja den här informationen.

Filtrera poster efter datum

Du kan använda alternativet `-s` (since) för att begränsa utdata till att endast visa inloggningar som skett efter ett visst datum.

Om du endast vill se inloggningar som har skett sedan den 26 maj 2019, använder du följande kommando:

last -R -s 2019-05-26

Detta visar inloggningar som har skett från klockan 00:00 den angivna dagen fram till de senaste posterna i loggen.

Söka till ett slutdatum

Med alternativet `-t` (till) kan du ange ett slutdatum. Detta gör det möjligt att visa inloggningar som har skett under en viss tidsperiod.

Följande kommando kommer att hämta inloggningar från klockan 00:00 den 26:e till 00:00 den 27:e. Detta begränsar listan till sessioner som skett under den 26:e.

Tids- och datumformat

Du kan använda olika tids- och datumformat med alternativen `-s` och `-t`.

De olika tidsformat som kan användas med `last` är (enligt dokumentationen):

ÅÅÅÅMMDDhhmmss
ÅÅÅÅ-MM-DD hh:mm:ss
ÅÅÅÅ-MM-DD hh:mm – sekunder sätts till 00
ÅÅÅÅ-MM-DD – tiden sätts till 00:00:00
hh:mm:ss – datum sätts till idag
hh:mm – datum sätts till idag, sekunder till 00
nu
igår – tiden sätts till 00:00:00
idag – tiden sätts till 00:00:00
imorgon – tiden sätts till 00:00:00
+5 min
-5 dagar

Varför ”enligt dokumentationen”?

Under arbetet med den här artikeln har det visat sig att det andra och tredje formatet i listan inte fungerade. Dessa kommandon testades på Ubuntu-, Fedora- och Manjaro-distributioner. Det täcker de flesta huvudfamiljerna av Linux-distributioner.

last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00

Som du ser, returnerade kommandot inga poster alls.

Använder vi det första formatet från listan, med samma datum och tider som i föregående kommando, returneras posterna som förväntat:

last -R -s 20190526110000 -t 20190527130000

Söka med relativa tidsenheter

Du kan också ange tidsperioder i minuter eller dagar i relation till nuvarande datum och tid. Här ser vi loggar från två dagar sedan till en dag sedan.

last -R -s -2days -t -1days

Igår, idag och nu

Du kan använda nyckelorden `yesterday` och `today` som genvägar för gårdagens och dagens datum.

last -R -s yesterday -t today

Observera att detta inte inkluderar några poster för idag. Detta är det förväntade beteendet. Kommandot hämtar poster från startdatumet till slutdatumet, men inte inklusive slutdatumet.

Alternativet `now` är en genväg för ”idag vid den aktuella tiden”. För att se inloggningar som har skett sedan 00:00 till den tidpunkt då du utför kommandot, använd det här kommandot:

last -R -s today -t now

Detta visar alla inloggningar som har skett sedan midnatt, inklusive de som fortfarande är inloggade.

Alternativet -p (present)

Alternativet `-p` (present) låter dig ta reda på vem som var inloggad vid en viss tidpunkt.

Det spelar ingen roll när de loggade in eller ut, utan endast om de var inloggade vid den tidpunkt som du anger.

Om du anger en tid utan datum, antar `last` att du menar ”idag”.

last -R -p 09:30

De användare som fortfarande är inloggade har ingen utloggningstid; de anges som ”still logged in”. Om datorn inte har startats om sedan den angivna tiden, visas den som ”still running”.

Om du använder `now` med alternativet `-p`, får du reda på vilka som är inloggade vid den tidpunkt då du utför kommandot.

last -R -p now

Detta är ett något mer omständligt sätt att uppnå samma sak som med kommandot `who`.

Kommandot `lastb`

Kommandot `lastb` förtjänar också att nämnas. Det läser data från loggfilen `btmp`. Det råder lite mer enighet kring vad ”b” i det här fallet står för, nämligen ”bad”, alltså ”misslyckat”. ”tmp”-delen är fortfarande föremål för debatt.

`lastb` listar alla misslyckade inloggningsförsök. Det accepterar samma alternativ som `last`. Eftersom det är misslyckade inloggningsförsök, kommer alla poster ha en varaktighet på 00:00.

Du måste använda `sudo` med `lastb`.

sudo lastb -R

Slutord

Att veta vem som har loggat in på din Linux-dator, när och varifrån, är värdefull information. Genom att kombinera den med detaljer om misslyckade inloggningsförsök kan du ta de första stegen mot att undersöka misstänkt beteende.