Qui, quand et à partir d’où ? Les protocoles de sécurité recommandent de savoir qui a accédé à votre système Linux. Nous allons explorer ensemble comment y parvenir.
Le fichier wtmp : un registre des connexions
Linux, tout comme d’autres systèmes d’exploitation de type Unix tels que MacOS, excelle dans la consignation des événements. Au cœur du système, un journal est tenu pour pratiquement toutes les actions possibles. Le fichier qui nous intéresse ici est nommé wtmp. L’origine du « w » reste incertaine, certains suggérant « who » (qui) ou « when » (quand). « tmp », quant à lui, pourrait signifier « temporaire » ou « horodatage » (timestamp).
Ce que l’on sait avec certitude, c’est que wtmp est un journal qui enregistre minutieusement chaque connexion et déconnexion. L’analyse de ces informations est cruciale pour adopter une démarche proactive en matière de sécurité en tant qu’administrateur système. Bien que moins critique pour un usage familial typique, il reste intéressant de pouvoir examiner l’historique d’utilisation de votre ordinateur.
Contrairement à de nombreux fichiers journaux textuels sous Linux, wtmp est un fichier binaire. Pour consulter ses données, un outil spécialement conçu est nécessaire.
Cet outil se nomme la commande `last`.
La commande `last` : un outil d’analyse du journal wtmp
La commande `last` a pour fonction de lire les données du journal wtmp et de les afficher directement dans votre terminal.
En lançant simplement `last` et en appuyant sur Entrée, vous visualiserez tous les enregistrements du journal.
last
Chaque entrée du journal wtmp sera présentée dans la fenêtre du terminal.
De gauche à droite, chaque ligne vous fournira :
Le nom d’utilisateur de la personne qui s’est connectée.
Le terminal utilisé lors de la connexion. Une entrée de terminal « :0 » indique une connexion directement sur l’ordinateur Linux lui-même.
L’adresse IP de la machine à partir de laquelle la connexion a été établie.
L’heure et la date de connexion.
La durée de la session.
La dernière ligne affichée indique la date et l’heure de la plus ancienne session enregistrée dans le journal.
Une entrée de connexion pour l’utilisateur fictif « reboot » est ajoutée au journal à chaque redémarrage de l’ordinateur. Le champ du terminal est remplacé par la version du noyau. La durée de session pour ces entrées représente le temps de fonctionnement de l’ordinateur.
Limiter le nombre de lignes affichées
L’utilisation de la commande `last` seule engendre un déversement de l’ensemble du journal, les informations défilant rapidement dans le terminal. Seules les données les plus anciennes restent visibles, ce qui n’est pas toujours souhaitable.
Vous pouvez spécifier à `last` le nombre de lignes à afficher en ajoutant le nombre souhaité directement dans la commande. Attention, le nombre doit être précédé d’un tiret. Par exemple, pour afficher les cinq dernières lignes, la commande correcte est `-5` et non `5`:
last -5
Cela affichera les cinq premières lignes du journal, correspondant aux données les plus récentes.
Affichage des noms d’hôtes pour les connexions distantes
L’option `-d` (Domain Name System) permet à la commande `last` de tenter de résoudre les adresses IP des connexions distantes en noms de machines ou de réseaux.
last -d
La résolution des adresses IP en noms de réseau n’est pas toujours possible, mais la commande effectuera la conversion lorsque cela s’avérera réalisable.
Masquer les adresses IP et noms de réseaux
Si les adresses IP ou noms de réseaux ne vous sont pas utiles, l’option `-R` (pas de nom d’hôte) permet de masquer cette information.
Cette option produit un affichage plus propre, évitant des retours à la ligne inesthétiques. Cette option est utilisée dans les exemples suivants pour des raisons de clarté. Cependant, lors d’une analyse de sécurité, il est préférable de conserver ce champ pour identifier d’éventuelles activités suspectes.
Filtrer les enregistrements par date
L’option `-s` (depuis) permet de restreindre la sortie aux événements de connexion qui se sont produits à partir d’une date spécifique.
Par exemple, pour afficher uniquement les événements de connexion à partir du 26 mai 2019, vous utiliserez la commande suivante:
last -R -s 2019-05-26
Cette commande affichera les entrées du journal à partir de 00h00 le jour spécifié, jusqu’aux entrées les plus récentes.
Spécifier une date de fin pour la recherche
L’option `-t` (jusqu’à) permet de définir une date de fin, vous permettant ainsi de sélectionner les événements de connexion qui se sont déroulés entre deux dates précises.
Cette commande récupère et affiche les événements de connexion de 00h00 le 26 jusqu’à 00h00 le 27. Cela réduit la sortie aux sessions de connexion qui ont eu lieu le 26 uniquement.
Formats de dates et d’heures
Il est possible d’utiliser des heures en plus des dates avec les options `-s` et `-t`.
Les différents formats d’heures utilisables avec ces options sont les suivants:
AAAAMMJJhhmmss
AAAA-MM-JJ hh:mm:ss
AAAA-MM-JJ hh:mm – les secondes sont fixées à 00
AAAA-MM-JJ – l’heure est fixée à 00:00:00
hh:mm:ss – la date est celle d’aujourd’hui
hh:mm – la date est celle d’aujourd’hui, les secondes sont fixées à 00
now
yesterday – l’heure est fixée à 00:00:00
today – l’heure est fixée à 00:00:00
tomorrow – l’heure est fixée à 00:00:00
+5min
-5days
Pourquoi « prétendument »?
Les deuxième et troisième formats de la liste n’ont pas fonctionné lors de la rédaction de cet article. Ces commandes ont été testées sur Ubuntu, Fedora et Manjaro, qui sont respectivement basées sur Debian, RedHat et Arch. Cela couvre les principales distributions Linux.
last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00
Comme vous pouvez le constater, cette commande n’a produit aucun résultat.
L’utilisation du premier format de date et heure de la liste avec les mêmes données que la commande précédente produit un résultat :
last -R -s 20190526110000 -t 20190527130000
Recherche basée sur des périodes relatives
Vous pouvez spécifier des périodes de temps en minutes ou en jours, par rapport à la date et à l’heure actuelle. Par exemple, pour afficher les enregistrements datant d’il y a deux jours jusqu’à il y a un jour:
last -R -s -2days -t -1days
`Hier`, `Aujourd’hui` et `Maintenant`
Les mots-clés `yesterday` (hier) et `today` (aujourd’hui) peuvent être utilisés comme raccourcis pour les dates correspondantes.
last -R -s yesterday -t today
Notez que la sortie n’inclura aucun enregistrement de la date actuelle. C’est le comportement attendu, car la commande demande les enregistrements de la date de début jusqu’à la date de fin, sans inclure cette dernière.
L’option `now` est un raccourci pour « aujourd’hui à l’heure actuelle ». Pour consulter les événements de connexion depuis 00h00 (aube) jusqu’à l’instant où vous émettez la commande, utilisez la commande suivante :
last -R -s today -t now
Cela affichera tous les événements de connexion ayant eu lieu depuis le début de la journée, y compris ceux des utilisateurs toujours connectés.
L’option `-p` (présent)
L’option `-p` (présent) permet de déterminer qui était connecté à un moment précis.
Cette option se focalise sur les utilisateurs connectés à l’heure que vous spécifiez, sans tenir compte de leur heure de connexion ou de déconnexion.
Si vous spécifiez une heure sans date, la commande interprétera votre requête comme signifiant « aujourd’hui ».
last -R -p 09:30
Les utilisateurs toujours connectés n’ont pas d’heure de déconnexion. Ils sont donc affichés comme « still logged in ». Si l’ordinateur n’a pas été redémarré depuis l’heure spécifiée, il sera affiché comme « still running ».
En utilisant le mot-clé `now` avec l’option `-p` (présent), vous pouvez identifier les utilisateurs connectés au moment précis où vous exécutez la commande.
last -R -p now
Cependant, cette approche est un peu détournée comparé à l’utilisation directe de la commande `who`.
La commande `lastb`
La commande `lastb` mérite également d’être mentionnée. Elle permet de lire les données d’un journal nommé `btmp`. L’origine du « b » fait davantage consensus. Il signifie « mauvais » (« bad »), bien que l’interprétation de « tmp » reste sujet à débat.
La commande `lastb` affiche les tentatives de connexion infructueuses. Elle accepte les mêmes options que `last`. Puisqu’il s’agit de tentatives échouées, leur durée sera toujours de 00:00.
L’utilisation de `lastb` requiert les privilèges administrateur et doit être précédée de `sudo`.
sudo lastb -R
Le mot de la fin
La possibilité de savoir qui s’est connecté à votre ordinateur Linux, quand et à partir d’où est une information précieuse. Combiner ces données avec les détails des tentatives de connexion infructueuses constitue une base solide pour enquêter sur un comportement suspect.