Comando last in Linux: cronologia di accessi, riavvii e spegnimenti

last mostra la cronologia degli accessi e delle disconnessioni, partendo dalle voci più recenti. Nell’implementazione util-linux descritta qui, legge normalmente /var/log/wtmp e riporta utente, terminale, host remoto, orari e durata della sessione.

Puoi filtrare utenti e intervalli di tempo oppure esaminare i riavvii. La cronologia disponibile dipende però dai record conservati: dati mai registrati o già eliminati non si ricostruiscono con last. Un risultato inatteso è un indizio da verificare, non una prova sufficiente di un incidente di sicurezza.

Che cos’è last?

last legge i record wtmp a ritroso. Di norma mostra utente, terminale, host o indirizzo IP di origine, inizio e fine della sessione e durata; le informazioni effettive dipendono da ciò che il servizio di accesso ha registrato.

wtmp è un file binario con record definiti dal sistema: usa un lettore compatibile, non un editor di testo. Il formato dipende dalla piattaforma; per copie provenienti da altri sistemi verifica anche la compatibilità dell’architettura, come spiega il manuale Linux di utmp e wtmp. Posizione, registrazione e conservazione variano con distribuzione e configurazione.

Prima di applicare gli esempi, controlla last --version, last --help e man last sul sistema interessato. Alcuni ambienti usano wtmpdb, che può fornire anche un comando chiamato last: usa un database SQLite, normalmente /var/lib/wtmpdb/wtmp.db, e non supporta necessariamente tutte le opzioni di util-linux. Un database wtmpdb e un vecchio file binario wtmp non sono intercambiabili: consulta la documentazione del progetto wtmpdb.

Sintassi e lettura dell’output

Il nome utente e il terminale sono filtri facoltativi. Se li ometti vengono considerati tutti i record che l’implementazione mostra normalmente; gli eventi di sistema aggiuntivi richiedono -x. Le parentesi quadre del modello non vanno digitate.

last [opzioni] [utente|terminale...]

Per vedere le registrazioni recenti esegui il comando sul sistema da analizzare. Il nome utente, l’indirizzo e la versione del kernel nell’output seguente sono esempi illustrativi, non risultati raccolti da un server reale; per il calcolo della durata sono assunti secondi pari a zero.

last
mina     pts/1        192.0.2.24       Fri Sep 18 21:10 - 22:42  (01:32)
alex     tty1                          Fri Sep 18 19:04 - 19:35  (00:31)
reboot   system boot  6.12.0           Fri Sep 18 18:58   still running

Le colonne identificano utente, terminale, host remoto o versione del kernel per l’avvio, quindi accesso e fine della sessione. Un accesso dalla console locale può non avere un host remoto. Date e messaggi dell’esempio sono in inglese; forma e lingua dell’output possono cambiare.

wtmp begins, in fondo all’output, indica l’inizio della cronologia ricavata dal file letto. Non dimostra quando sia stato installato il sistema né quando sia avvenuto il primo accesso effettivo.

Opzioni principali di last

Opzione Funzione Esempi di utilizzo
-n N, --limit N Mostra al massimo N voci last -n 20
-s istante, --since istante Record dal momento specificato last -s 2026-09-01
-t istante, --until istante Record fino al momento specificato, incluso last -t 2026-09-19
-p istante, --present istante Sessioni presenti all’istante richiesto last -p '2026-09-18 21:00'
-F, --fulltimes Date e orari completi di accesso e disconnessione Include l’anno e gli orari completi.
--time-format iso Orari ISO 8601 con fuso Aiuta a confrontare sistemi diversi.
-i, --ip Indirizzo IP in forma numerica Usa l’indirizzo registrato, se disponibile.
-a, --hostlast Campo host nell’ultima colonna Facilita la lettura con orari estesi.
-R, --nohostname Nasconde il campo host Non modifica i record del file.
-x, --system Aggiunge spegnimenti e cambi di runlevel Esamina gli eventi di sistema registrati.
-f file, --file file Legge un altro file binario wtmp last -f /var/log/wtmp.1

Le opzioni della tabella si riferiscono a util-linux. Verifica sempre il manuale della versione installata: il manuale di last fornito dal progetto util-linux definisce filtri e formati, mentre implementazioni diverse possono avere altre regole.

Filtrare utenti e terminali

Cercare un utente

Passa il nome dell’account per mostrare soltanto le voci corrispondenti; sostituisci mina e alex con gli utenti da cercare sul tuo sistema.

last mina

Più nomi selezionano le voci che corrispondono ad almeno uno di essi. -w, oppure --fullnames, evita il troncamento di presentazione dei nomi utente e host. Non può recuperare stringhe già troncate quando sono state scritte nei campi a lunghezza fissa del record.

last -w mina alex

Cercare un terminale

Un nome di terminale seleziona le sessioni registrate su quel terminale. pts/0 è uno pseudo-terminale, spesso usato da SSH ma anche da terminali locali; tty1 può indicare una console virtuale locale. Il solo nome del terminale non identifica il metodo di autenticazione.

last pts/0

Secondo il manuale, tty0 può essere abbreviato come 0, ma nei documenti e negli script, utilizzare il nome completo del terminale rende l'intenzione chiara.

Limitare le voci mostrate

Per controllare rapidamente solo i record recenti, specifica il numero massimo di voci con -n.

last -n 10

È accettata anche la forma -10, ma -n 10 distingue più chiaramente il limite dalle altre opzioni.

Filtrare per periodo e istante

Specificare inizio e fine

-s e -t restringono i record all’intervallo indicato. Le date di esempio vanno sostituite con quelle da indagare, espresse nel fuso orario del processo:

last -s '2026-09-01 00:00' -t '2026-09-19 00:00'

Una data senza ora vale le 00:00:00. In util-linux il limite -t è incluso: l’esempio può quindi comprendere anche un record esattamente alle 00:00 del 19 settembre. Per limitare una ricerca al solo 18 settembre, specifica -s '2026-09-18 00:00:00' -t '2026-09-18 23:59:59'. Non interpretare automaticamente il limite come un intervallo aperto a destra.

I filtri temporali operano sui record e possono escludere anche eventi necessari ad abbinare una sessione al suo termine. Per interpretare durate e stati insoliti confronta un intervallo più ampio o l’output senza questi filtri. Per cercare chi risultava presente a un istante, usa invece -p. Il codice di last in util-linux mostra come vengono applicati questi filtri ai record.

Usare tempi relativi

util-linux accetta espressioni come today, yesterday, now e -7days. yesterday indica la mezzanotte di ieri, mentre -7days è relativo al momento di esecuzione.

last -s yesterday
last -s -7days

Se è necessario confrontare ripetutamente i risultati automatici, per una maggiore riproducibilità è meglio usare date esplicite e fusi orari piuttosto che espressioni relative, che variano a seconda del momento dell'esecuzione.

Cercare le sessioni presenti a un istante

-p cerca le sessioni che, in base ai record disponibili, risultavano aperte all’istante richiesto. Può essere utile per esaminare le sessioni durante un disservizio:

last -p '2026-09-18 21:30'

Il risultato dipende dagli abbinamenti fra accessi e disconnessioni conservati in wtmp. Non ricostruisce eventi mancanti o corrotti e non prova da solo chi stesse effettivamente usando una sessione.

Mostrare chiaramente date e orari

Date e orari completi

Il formato breve può omettere l’anno e mostrare gli orari in forma abbreviata. -F mostra date e orari completi di accesso e disconnessione:

last -F -n 10

Formato ISO con fuso orario

--time-format iso produce orari ISO 8601 con indicazione del fuso, utili per confrontare sistemi diversi. Il formato non corregge orologi errati o una sincronizzazione mancante:

last --time-format iso -n 10

Quando si confronta la sequenza degli eventi tra più sistemi, si dovrebbe anche verificare se l'orologio di sistema e le impostazioni del fuso orario di ciascun server siano corrette.

Controllare avvii e spegnimenti

Cronologia degli avvii

reboot è un nome convenzionale associato ai record di avvio, non un account di persona. Il comando legge gli avvii presenti nel file consultato:

last reboot

Se mancano avvii più vecchi, controlla anche gli archivi ruotati: l’assenza nel file corrente non dimostra che non siano avvenuti.

Spegnimenti e cambi di runlevel

-x aggiunge gli spegnimenti e i cambi di runlevel, cioè i livelli operativi tradizionali dei sistemi SysV. La presenza di questi eventi dipende dal sistema e dalla registrazione configurata:

last -x -n 30

Per selezionare gli spegnimenti con util-linux usa last -x shutdown: il solo filtro shutdown non abilita gli eventi di sistema. Un’interruzione di alimentazione o un altro arresto improvviso può impedire la scrittura del record; la sua assenza non basta a determinare la causa.

Interpretare le etichette di stato

Etichetta Interpretazione Verifica utile
still logged in Nessuna normale disconnessione associata Verifica la sessione attuale con who, w o loginctl.
still running Nessun termine dell’avvio ricostruito dai record letti Confronta uptime, file consultato ed eventi successivi.
crash Sessione o avvio ricostruito come terminato senza chiusura regolare Confronta kernel, journal, hardware e hypervisor.
gone - no logout Sessione non più riscontrata, senza normale record di disconnessione Controlla lacune, riavvii e problemi di registrazione.
wtmp begins Inizio della cronologia ricavata dal file consultato Cerca eventuali archivi precedenti ruotati.

Queste etichette descrivono la ricostruzione fatta dai record disponibili. crash non identifica una causa hardware specifica: confronta log del kernel, journal di systemd ed eventi dell’hypervisor. Anche still running richiede verifica se il file è una copia storica o mancano eventi successivi.

Leggere gli archivi e gestire la rotazione

Consultare un altro file wtmp

-f legge un file binario wtmp alternativo. /var/log/wtmp.1 è soltanto un nome di archivio comune: controlla i file realmente presenti e i relativi permessi, senza creare o svuotare il log attivo per far funzionare l’esempio.

last -f /var/log/wtmp.1

Puoi ripetere -f per leggere più file. Vengono elaborati i file specificati: non presumere che l’output costituisca un’unica cronologia perfettamente fusa e ordinata fra archivi. Considera rotazione, eventuali sovrapposizioni e compatibilità del formato.

Usare copie di archivi compressi

Non presumere che last decomprima automaticamente un archivio gzip. Conserva l’originale, copialo in una directory di lavoro con accesso limitato e decomprimi soltanto la copia; poi usa -f sul file ottenuto. Per un’indagine registra hash, provenienza e procedura di conservazione degli originali.

Consultare i tentativi di accesso falliti

lastb e il file btmp

lastb legge normalmente /var/log/btmp, che raccoglie tentativi di accesso falliti registrati dai servizi. Può richiedere privilegi amministrativi: usa sudo soltanto se sei autorizzato a consultare questi dati.

sudo lastb -n 20

Cerca eventuali ripetizioni di account e indirizzi, confrontandole con gli altri log. Un singolo tentativo fallito non prova una compromissione e un file btmp vuoto non garantisce che non vi siano stati tentativi: conta anche quali servizi registrano e per quanto tempo.

Confrontare accessi riusciti e falliti

Confronta accessi riusciti e falliti nello stesso intervallo, quindi verifica i log di autenticazione SSH e i controlli di rete. Il nome utente tentato e l’indirizzo di origine non identificano da soli la persona coinvolta.

last --time-format iso -s '2026-09-18 00:00'
sudo lastb --time-format iso -s '2026-09-18 00:00'

La posizione e il metodo di accesso ai log di autenticazione variano a seconda della distribuzione e della configurazione del logging. Nei sistemi che utilizzano il journal di systemd, controllare anche il journal delle unità di servizio correlate.

Come usare i dati in un controllo di sicurezza

Definire intervallo e fuso orario

Definisci inizio e fine dell’intervallo e annota il fuso del server. Preferisci date esplicite e, se disponibile, --time-format iso; verifica anche la sincronizzazione degli orologi prima di ordinare eventi di sistemi diversi.

Confrontare utenti, host e terminali

Cerca utenti inattesi, indirizzi remoti diversi dal solito e orari di accesso e lunghezze delle sessioni anomali. Poiché il proprietario o la posizione di un indirizzo IP può cambiare ed è influenzato da proxy, VPN e NAT, non identificare l'utente basandoti su un singolo indirizzo.

Controllare riavvii e lacune

Controlla last reboot, last -x e wtmp begins per determinare l'intervallo dei record e i confini di avvio. Confronta con gli orari di rotazione dei log per vedere se ci sono lacune inspiegabili.

Verificare le ipotesi con altre fonti

Confronta i risultati di last con log di autenticazione SSH, journal, audit dei comandi e registri di firewall, VPN e accesso cloud. In caso di sospetto incidente conserva gli originali secondo le procedure dell’organizzazione; non alterare o cancellare i record per “correggere” la cronologia.

Limiti della cronologia di last

  • Dipendenza dai file locali: Se wtmp è assente o il servizio non registra, i risultati potrebbero essere vuoti.
  • Limitazione del periodo di conservazione: Gli eventi spostati in archivi o eliminati non sono più disponibili nel solo file corrente.
  • Possibilità di manomissione: Un attaccante con privilegi sufficienti può modificare o eliminare i record locali.
  • Dipendenza dal tempo: Modificare l'orologio di sistema o impostare un fuso orario errato può confondere l'ordine degli eventi e gli orari delle sessioni.
  • Differenze ambientali: I container, gli ambienti con installazione minima e alcuni metodi di accesso remoto potrebbero non lasciare le voci previste in wtmp.

Pertanto, last è utile per valutare rapidamente la situazione e iniziare l'indagine, ma non sostituisce i registri di audit completi o i registri di sicurezza centralizzati.

Confronto con strumenti correlati

Comando Scopo principale Situazioni adatte
last Accessi e disconnessioni passati Esamina i record wtmp conservati.
lastb Tentativi di accesso falliti Consulta i tentativi registrati in btmp.
who Utenti attualmente registrati come connessi Controlla gli utenti e i terminali correnti.
w Sessioni e attività correnti Mostra sessioni, inattività e processi.
lastlog o lslogins Ultimo accesso per account Individua gli ultimi accessi disponibili; backend e supporto dipendono dal sistema.

Domande frequenti

Perché last non restituisce risultati?

Il file può mancare, essere vuoto, non essere leggibile oppure non essere il backend usato dal sistema. Verifica implementazione di last, permessi, politica di registrazione e archivi conservati. Un risultato vuoto non significa che non sia mai avvenuto un accesso.

“still logged in” prova che la sessione è ancora attiva?

Indica che la ricostruzione non ha associato una normale disconnessione a quell’accesso. Controlla lo stato attuale con who, w o loginctl, se disponibili e configurati. Record mancanti, copie storiche o sessioni terminate in modo anomalo richiedono un confronto con altre fonti.

Come posso controllare i vecchi record di login?

Se conservi un archivio binario compatibile, puoi leggerlo con last -f nomefile. Per un archivio compresso usa una copia decompressa e protetta, mantenendo intatto l’originale. Per database wtmpdb usa invece gli strumenti del relativo backend.

Il solo output di last prova una compromissione?

No. Accessi imprevisti sono indizi importanti, ma i record locali wtmp possono essere incompleti o manomessi. È necessario analizzarli insieme ai log di autenticazione, ai record di rete, ai log di controllo dei comandi e alle modifiche di sistema.

Riepilogo

Usa last per la cronologia disponibile, un nome utente per filtrare gli account, last reboot per gli avvii e lastb per i tentativi falliti registrati. util-linux offre -s, -t e -p per i filtri temporali e --time-format iso per orari più chiari.

Interpreta sempre il risultato insieme a formato del backend, fuso orario e conservazione dei log. Le altre fonti di autenticazione e di sistema servono a verificare le ipotesi; per orientarti fra gli strumenti correlati consulta la guida ai comandi Linux essenziali.