Spor hvem som har brukt din Linux-maskin!

Hvem, når og hvorfra? Gode sikkerhetsrutiner innebærer at du har oversikt over hvem som har hatt adgang til din Linux-maskin. Vi viser deg hvordan du kan finne denne informasjonen.

Filen wtmp

Linux og andre Unix-baserte systemer, som MacOS, er dyktige til å føre logger. Et sted dypt inne i systemet finnes det logger for nesten alt tenkelig. Loggfilen som er av interesse her heter wtmp. Bokstaven «w» kan enten stå for «hvem» eller «når» – det er ikke enighet om dette. «tmp»-delen står antagelig for «temporær», men kan også representere «tidsstempel».

Det som er sikkert er at wtmp er en logg som fanger opp og registrerer hver eneste inn- og utlogging. Å gjennomgå dataene i wtmp-loggen er et viktig element i en sikkerhetsorientert tilnærming til systemadministrasjon. For en typisk datamaskin i hjemmet er dette kanskje ikke like kritisk fra et sikkerhetsperspektiv, men det kan være interessant å se på din samlede bruk av maskinen.

I motsetning til mange andre tekstbaserte loggfiler i Linux, er wtmp en binær fil. For å kunne lese dataene den inneholder, må vi benytte et verktøy som er spesielt designet for dette formålet.

Dette verktøyet heter `last`.

Kommandoen `last`

Kommandoen `last` leser data fra wtmp-loggen og viser dem i et terminalvindu.

Ved å skrive `last` og trykke Enter, vil du se alle oppføringene fra loggfilen.

last

Hver post fra wtmp-filen presenteres i terminalvinduet.

Fra venstre mot høyre viser hver linje:

Brukernavnet til personen som logget inn.
Terminalen de var logget på. En terminaloppføring på :0 indikerer at de var logget på selve Linux-maskinen.
IP-adressen til maskinen de logget inn fra.
Tidspunkt og dato for innlogging.
Varigheten av økten.

Den siste linjen i utdataen viser dato og klokkeslett for den tidligste registrerte økten i loggen.

En innloggingsoppføring for den fiktive brukeren «reboot» legges til i loggen hver gang maskinen starter opp. Feltet for terminal er erstattet med kjerneversjonen. Varigheten av den påloggede økten for disse oppføringene gjenspeiler maskinens oppetid.

Vis et bestemt antall linjer

Ved å bruke `last`-kommandoen alene vil hele loggen skrives ut, hvorav det meste vil forsvinne forbi terminalvinduet. Det som forblir synlig er de tidligste dataene i loggen. Dette er sannsynligvis ikke det du var ute etter.

Du kan instruere `last` til å vise et bestemt antall linjer. Dette gjøres ved å angi antallet linjer du ønsker i kommandolinjen. Husk bindestreken. For å se fem linjer, må du skrive `-5`, ikke `5`:

last -5

Dette viser de fem første linjene fra loggen, som er de nyeste dataene.

Vis nettverksnavn for eksterne brukere

Alternativet `-d` (Domain Name System) forteller `last` å forsøke å konvertere IP-adresser til eksterne brukere til et maskin- eller nettverksnavn.

last -d

Det er ikke alltid mulig for `last` å konvertere IP-adressen til et nettverksnavn, men kommandoen vil forsøke dette når det er mulig.

Skjul IP-adresser og nettverksnavn

Hvis du ikke er interessert i IP-adresser eller nettverksnavn, kan du bruke alternativet `-R` (ingen vertsnavn) for å undertrykke dette feltet.

Ettersom dette gir en mer oversiktlig utskrift uten lange linjer, har dette alternativet blitt benyttet i de følgende eksemplene. Hvis du brukte `last` for å oppdage uvanlig eller mistenkelig aktivitet, ville du ikke undertrykke dette feltet.

Velg poster etter dato

Du kan bruke alternativet `-s` (siden) for å begrense utdataene til å kun vise innloggingshendelser som har funnet sted fra en bestemt dato.

Hvis du kun ønsker å se innloggingshendelser som fant sted fra og med 26. mai 2019, ville du bruke følgende kommando:

last -R -s 2019-05-26

Utdataen viser alle poster fra klokken 00:00 den angitte dagen, og opp til de nyeste postene i loggfilen.

Søk frem til en sluttdato

Du kan bruke `-t` (til) for å angi en sluttdato. Dette lar deg velge et utvalg av innloggingsposter som fant sted mellom to angitte datoer.

Denne kommandoen ber `last` om å hente og vise innloggingspostene fra kl. 00:00 den 26. til kl. 00:00 den 27. Dette begrenser utskriften til kun innloggingsøkter som fant sted den 26.

Tids- og datoformater

Du kan benytte både klokkeslett og datoer med alternativene `-s` og `-t`.

De ulike tidsformatene som kan benyttes med `last`-alternativene som involverer datoer og klokkeslett er (angivelig):

ÅÅÅÅMMDDhhmmss
ÅÅÅÅ-MM-DD tt:mm:ss
ÅÅÅÅ-MM-DD tt:mm – sekunder settes til 00
ÅÅÅÅ-MM-DD – klokkeslett settes til 00:00:00
tt:mm:ss – datoen settes til i dag
tt:mm – datoen settes til i dag, sekunder til 00

i går – klokkeslett settes til 00:00:00
i dag – klokkeslett settes til 00:00:00
i morgen – klokkeslett settes til 00:00:00
+5 min
-5 dager

Hvorfor «angivelig»?

Det andre og tredje formatet i listen fungerte ikke under undersøkelsene for denne artikkelen. Disse kommandoene ble testet på Ubuntu, Fedora og Manjaro. Dette er henholdsvis derivater av distribusjonene Debian, RedHat og Arch. Dette dekker alle de største Linux-distribusjonene.

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

Som du kan se, returnerte kommandoen ingen poster i det hele tatt.

Ved å bruke det første dato- og klokkeslettformatet fra listen, med de samme datoene og klokkeslettene som i forrige kommando, returneres poster:

last -R -s 20190526110000 -t 20190527130000

Søke etter relative tidsenheter

Du kan også spesifisere tidsperioder som måles i minutter eller dager, i forhold til gjeldende dato og klokkeslett. Her ber vi om poster fra to dager siden til en dag siden.

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

I går, i dag og nå

Du kan bruke `yesterday` og `today` som snarveier for gårsdagens dato og dagens dato.

last -R -s yesterday -t today

Merk at dette ikke vil inkludere noen poster fra i dag. Det er den forventede oppførselen. Kommandoen ber om poster fra startdatoen til sluttdatoen. Den inkluderer ikke poster fra sluttdatoen.

Alternativet `now` er en forkortelse for «i dag på gjeldende tidspunkt.» For å se innloggingshendelser som har funnet sted siden kl. 00:00 (daggry) frem til tidspunktet du kjører kommandoen, bruker du følgende kommando:

last -R -s today -t now

Dette vil vise alle innloggingshendelser frem til nå, inkludert de som fortsatt er pålogget.

Alternativet `-p`

Alternativet `-p` (present) lar deg finne ut hvem som var pålogget på et bestemt tidspunkt.

Det spiller ingen rolle når de logget inn eller ut, men hvis de var logget på maskinen på tidspunktet du angir, vil de inkluderes i oppføringen.

Hvis du angir et klokkeslett uten dato i `last`, antas det at du mener «i dag.»

last -R -p 09:30

Personer som fortsatt er pålogget (åpenbart) har ikke en utloggingstid; de er beskrevet som fortsatt pålogget. Hvis maskinen ikke har blitt startet på nytt etter tidspunktet du angir, vil den listes som fortsatt kjørende.

Hvis du bruker snarveien `now` med alternativet `-p` (present), kan du finne ut hvem som er pålogget i det øyeblikket du kjører kommandoen.

last -R -p now

Dette er en noe omstendelig måte å oppnå det samme som kan gjøres med `who`-kommandoen.

Kommandoen `lastb`

Kommandoen `lastb` fortjener også en omtale. Den leser data fra en logg kalt `btmp`. Det er litt mer enighet om betydningen av dette loggnavnet. «b»-en står for dårlig, mens «tmp»-delen fortsatt er gjenstand for debatt.

`lastb` viser mislykkede innloggingsforsøk. Den aksepterer de samme alternativene som `last`. Ettersom disse er mislykkede innloggingsforsøk, vil alle oppføringene ha en varighet på 00:00.

Du må benytte `sudo` med `lastb`.

sudo lastb -R

Det siste ordet

Det er nyttig å vite hvem som har logget seg på Linux-maskinen din, og når og hvorfra de gjorde det. Ved å kombinere dette med detaljer om mislykkede innloggingsforsøk, tar du de første stegene i undersøkelsen av mistenkelig oppførsel.