Chi si è connesso, quando e da dove? Le migliori pratiche di sicurezza suggeriscono di monitorare gli accessi al tuo sistema Linux. Vediamo come fare.
Il File wtmp: Un Registro di Accessi
Linux, come altri sistemi operativi di tipo Unix, come MacOS, eccelle nella registrazione degli eventi di sistema. Nascosto nelle profondità del sistema operativo, esiste un registro per quasi ogni azione. Il file che ci interessa si chiama wtmp. L’iniziale “w” potrebbe significare “quando” o “chi”, l’interpretazione varia. “tmp”, invece, si presume stia per “temporaneo” o “timestamp”.
Sappiamo con certezza che wtmp è un registro che tiene traccia di tutti gli accessi e le disconnessioni. L’analisi dei dati in questo registro è fondamentale per adottare un approccio orientato alla sicurezza nell’amministrazione del sistema. Sebbene per un computer domestico non sia così cruciale in termini di sicurezza, è comunque utile per rivedere l’utilizzo del computer.
Diversamente da molti file di registro in Linux, che sono in formato testo, wtmp è un file binario. Per visualizzare i dati in esso contenuti, necessitiamo di uno strumento specifico.
Questo strumento è il comando “last”.
Il Comando “last”: Svelare il Registro wtmp
Il comando “last” analizza i dati del registro wtmp e li visualizza nella finestra del terminale.
Digitando semplicemente “last” e premendo Invio, verranno visualizzati tutti i record contenuti nel file di registro.
last
Ogni riga rappresenta un record proveniente da wtmp.
Da sinistra a destra, ogni riga presenta le seguenti informazioni:
- Il nome utente che ha effettuato l’accesso.
- Il terminale a cui era collegato. “0” indica un accesso diretto al computer Linux.
- L’indirizzo IP della macchina da cui è stato effettuato l’accesso.
- L’ora e la data dell’accesso.
- La durata della sessione.
L’ultima riga mostra la data e l’ora della prima sessione registrata.
Ogni volta che il sistema viene avviato, viene inserito un record di accesso per l’utente fittizio “reboot”. In questo caso, il campo del terminale riporta la versione del kernel, e la durata della sessione indica il tempo di attività del sistema.
Limitare l’Output: Visualizzare un Numero Specifico di Righe
L’esecuzione del comando “last” senza argomenti produce un output molto esteso, che scorre rapidamente nel terminale. Solitamente, le prime righe che rimangono visibili non sono quelle di nostro interesse.
È possibile specificare il numero di righe da visualizzare, indicandolo come argomento dopo un trattino. Ad esempio, per visualizzare le ultime cinque righe, digitare “-5”, non “5”:
last -5
Questo mostrerà le cinque righe più recenti del registro, che corrispondono agli accessi più recenti.
Visualizzare i Nomi di Rete per Accessi Remoti
L’opzione “-d” (Domain Name System) indica a “last” di tentare di risolvere gli indirizzi IP degli utenti remoti nei corrispondenti nomi di rete o macchina.
last -d
Non sempre “last” riesce a convertire l’indirizzo IP in un nome di rete, ma lo farà quando possibile.
Nascondere Indirizzi IP e Nomi di Rete
Se non sei interessato all’indirizzo IP o al nome di rete, puoi utilizzare l’opzione “-R” (no host name) per eliminare tale campo dall’output.
Poiché questo produce un output più ordinato e facile da leggere, tale opzione è stata utilizzata in tutti gli esempi successivi. Tuttavia, se utilizzi “last” per identificare attività insolite o sospette, non eliminare questo campo.
Selezionare i Record per Data
L’opzione “-s” (since) permette di limitare l’output, mostrando solo gli accessi avvenuti a partire da una data specifica.
Ad esempio, per visualizzare solo gli accessi avvenuti dal 26 maggio 2019, puoi utilizzare:
last -R -s 2019-05-26
L’output mostrerà tutti i record con data di accesso pari o successiva all’ora 00:00 del giorno specificato, fino ai record più recenti nel file.
Ricerca Fino a Una Data di Fine
È possibile specificare una data di fine con l’opzione “-t” (until). Questo consente di visualizzare gli accessi avvenuti in un intervallo di date specifico.
Ad esempio, per visualizzare gli accessi tra il 26 e il 27 maggio 2019, puoi usare:
Questo comando richiede a “last” di recuperare e visualizzare i record a partire dalle ore 00:00 del 26 fino alle ore 00:00 del 27. In pratica, verranno mostrati solo gli accessi avvenuti il 26.
Formati di Data e Ora
È possibile utilizzare diversi formati per specificare date e orari con le opzioni “-s” e “-t”.
I formati di data e ora utilizzabili sono i seguenti:
- AAAAMMGGhhmmss
- AAAA-MM-GG hh:mm:ss
- AAAA-MM-GG hh:mm (i secondi sono impostati a 00)
- AAAA-MM-GG (l’ora è impostata a 00:00:00)
- hh:mm:ss (la data è impostata a oggi)
- hh:mm (la data è impostata a oggi, i secondi a 00)
- now (ora corrente)
- yesterday (ieri, l’ora è impostata a 00:00:00)
- today (oggi, l’ora è impostata a 00:00:00)
- tomorrow (domani, l’ora è impostata a 00:00:00)
- +5min (5 minuti nel futuro)
- -5days (5 giorni nel passato)
Perché “presumibilmente”?
Durante i test, il secondo e il terzo formato nell’elenco non hanno funzionato. I test sono stati effettuati su distribuzioni Ubuntu, Fedora e Manjaro, che sono derivate rispettivamente da Debian, RedHat e Arch, coprendo così tutte le principali famiglie di distribuzioni Linux.
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00
Come si può vedere, il comando non ha restituito alcun record.
Utilizzando invece il primo formato della lista con la stessa data e ora:
last -R -s 20190526110000 -t 20190527130000
Vengono restituiti i record desiderati.
Ricerca per Periodi Relativi
Si possono anche specificare periodi di tempo in minuti o giorni, relativi alla data e all’ora corrente. Ad esempio, il seguente comando visualizza gli accessi tra due e un giorno fa:
last -R -s -2days -t -1days
Utilizzo delle Abbreviazioni “yesterday”, “today” e “now”
Puoi utilizzare “yesterday” e “today” come abbreviazioni per la data di ieri e la data di oggi.
last -R -s yesterday -t today
È importante notare che questo comando non includerà alcun record per oggi, poiché il comando include i record dalla data di inizio alla data di fine, ma non include i record alla data di fine.
L’opzione “now” è un’abbreviazione per “oggi all’ora corrente”. Per visualizzare gli eventi di accesso avvenuti dalle 00:00 di oggi fino al momento in cui hai eseguito il comando, usa:
last -R -s today -t now
Questo mostrerà tutti gli eventi di accesso fino al momento attuale, inclusi quelli ancora attivi.
L’Opzione “present”
L’opzione “-p” (present) permette di identificare chi era connesso in un dato momento.
Non è importante quando si sono collegati o scollegati, ma se erano connessi al computer nell’ora specificata, verranno inclusi nell’elenco.
Se si specifica un’ora senza una data, si assume che tu intenda “oggi”.
last -R -p 09:30
Le persone che sono ancora loggate (ovviamente) non avranno un tempo di logout. Se il computer non è stato riavviato dall’ora specificata, verrà elencato come ancora attivo.
Utilizzando l’abbreviazione “now” con l’opzione “-p” (present), puoi scoprire chi è connesso nel momento in cui esegui il comando.
last -R -p now
Questo è un modo più articolato per ottenere lo stesso risultato del comando “who”.
Il Comando “lastb”: Tentativi di Accesso Falliti
Vale la pena menzionare il comando “lastb”. Questo comando legge i dati da un registro chiamato “btmp”. Il significato di questo registro è più chiaro: la “b” sta per “bad”, mentre la parte “tmp” è ancora oggetto di dibattito.
“lastb” mostra i tentativi di accesso non validi (falliti). Accetta le stesse opzioni del comando “last”. Poiché si tratta di tentativi di accesso non riusciti, tutti gli accessi avranno una durata pari a 00:00.
È necessario utilizzare il comando “sudo” con “lastb”.
sudo lastb -R
Conclusioni
Sapere chi ha effettuato l’accesso al tuo computer Linux, quando e da dove, è un’informazione utile. La combinazione di questi dati con i dettagli dei tentativi di accesso falliti fornisce i primi passi per indagare su comportamenti sospetti.