Questions sur historique derniers logins (commandes "last")

La commande last liste les dates et détails des logins (physiques et distants) sur une machine Unix.

J’observe pourtant des résultats très différents en fonction des machines testées:

  • Sur une machine debian 9 (installée cet été) et une machine debian 8 (installée ces derniers jours pour tester), la commande last remonte tous les derniers logins sans problèmes apparents

  • Sur une autre machine debian 9 plus récente (installée en janvier), le fichier wtmp (source de la commande last) s’est divisé automatiquement en deux au passage du mois de février: il y a désormais un fichier wtmp (commence le 1er février, affiché par défaut par last) et un fichier wtmp.1 (janvier, appelé par la commande last -f /var/log/wtmp.1).

  • La commande last sur debian 8 renvoie également des informations sur les terminaux ouverts (pts), même ouverts avec accès physique sur une session graphique, alors que sur debian 9 on n’a pas ce niveau de détail (juste tty7, qui est par ailleurs :0 sur debian 8), ou alors seulement en cas d’accès distant:

debian 8:

debian 9:

  • Enfin, sur une machine Ubuntu, j’observe le même comportement (division du fichier wtmp), mais cette fois les logins s’arrêtent au 1er janvier, alors que la machine est installée depuis octobre-novembre.

D’où mes questions:

  • Comment expliquer ces différences de comportement? Pourquoi sur certaines machines le fichier wtmp semble se subdiviser chaque mois et sur d’autres non?

  • Y a-t-il eu des changements entre debian 8 et debian 9 qui expliqueraient pourquoi last sur debian 9 ne renvoie plus d’informations sur les terminaux ouverts ?

  • Je sais qu’on est sur un forum debian, mais y a-t-il une explication sur le fait que ma machine Ubuntu n’a pas d’historique de logins avant le 1er janvier alors qu’elle existe depuis cet automne?

  • Enfin, y a-t-il d’autres commandes ou d’autres fichiers logs, ou astuces à connaître pour obtenir des informations sur l’historique des logins?

je pense que c’est en rapport avec systemd et logind.

Ca, ce sont des réglages distincts du logrotate, un service de rotation des logs qui archive les fichiers de logs et supprime les plus anciens pour éviter qu’ils ne grossisse indéfiniment.
Le service les renomme avec un numéro tous les X temps et ne garde que les Y plus récentes archives.

Tu peux analyser les fichiers archivés, avec par exemple last -f /var/log/wtmp.1

La config par défaut de logrotate varie un peu suivant les versions de paquet, donc les réglages sont ceux qui étaient pour le paquet au moment ou tu l’as installé, ce qui explique que même sur une même release, tu peux avoir des réglages légèrement différents si tu ne les as pas installées au même moment (les paquets ont pu évoluer entre temps même pour la même release)

Non, c’est juste que tu te connectes par clavier/souris sur ta machine debian 9, donc tu n’y as que des consoles virtuelles ttyX (les sessions accessibles avec ctrl+alt), tandis que sur ta debian 8, je pense que tu ne te connectes que en ssh (ou peut être dans des consoles graphiques ou des trucs comme ça), et ce sont dans ce cas des pseudoterminaux (pts/X) par lesquels les sessions sont identifiées.
Tu peux voir la différence tout bêtement: sur ta machine debian 9, tu te connectes en ssh sur le localhost, et tu verras apparaitre un pts/X en plus de ta session sur tty7
A lire: http://blog.securite.free.fr/index.php/difference-les-terminaux-sous-linux-ttypts

Re logrotate, il est probable que sur ubuntu, la rotation de wtmp soit règlé sur une année (bonjour la confidentialité de garder des logs un an !).

Oui.
La commande last ne t’indique que les sessions réussies.
Il faut utiliser la commande lastb pour voir les tentatives de connection echouées.
Attention, sur un serveur en ligne, tu vas être étonné par la quantité de tentatives d’intrusion ssh: ben c’est normal, sur mon serveur à la maison ou mon ip est pourtant juste celle d’un un client parmi les autres chez free, j’ai eu hier 49 bannissements d’ip par fail2ban, 10 scans de ports détectés, quelques dizaines de tentatives d’execution de scripts php sur mon serveur http, et une 50aine de tentative d’envoi de mail ratées sur mon service smtp.
L’Internet, c’est la guerre, en fait. :smiley:

Avec debian 9

fp2@debpacha:~$ l /var/log/wtmp*
 8 -rw-rw-r-- 1 root utmp  5760 févr.  3 11:17 /var/log/wtmp
36 -rw-rw-r-- 1 root utmp 33408 janv. 28 13:08 /var/log/wtmp.1
fp2@debpacha:~$ 

La création du fichier wtmp1 est due à la rotation des journaux ( commande logrotate)
Cette rotation permet de lutter contre un développement anarchique des journaux qui entraînerait à terme un remplissage du système de fichiers monté sur /varou même / si /var n’est pas séparé.
Extraite de /etc/logrotate.conf

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

Plus d’information sur la rotation des journaux avec

debmany logrotate

Que chez Ubuntu/Canonical on fait n’importe quoi ce n’est pas un scoop. Par exemple comment expliquer qu’ils ne proposent pas le paquet debian-goodies qui fournit entre autre les commandes debmany dpigs , … ? Il ne faut surtout pas traumatiser les pauvres ubuntistes avec la ligne de commandes :smile:

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

Un grand merci pour vos réponses rapides et détaillées!

Si je récapitule:

  • La rotation et sa fréquence sont gérés par logrotate. Merci de cette info, je vais m’intéresser à ça de plus près. Au passage, savez.vous comment désactiver la suppression automatique de l’historique de logins? Je ne suis pas contre le principe de rotation, mais je ne veux pas que l’historique soit supprimé (cf. Ubuntu).

  • Concernant les différences entre debian 8 et debian 9 (pts), effectivement si je me connecte en ssh, je vois bien des pts s’afficher dans debian 9, mais lorsque je suis connecté en session graphique, les terminaux ouverts ne s’affichent pas contrairement à debian 8. Dans les exemples donnés ci-dessous, les deux machines sont accédées grâce à une session graphique de la même façon (environnement graphique: XFCE dans les deux cas), pas de sessions SSH actives)

Après quelques recherches, il semble que la configuration pour chaque application qui laisse des logs se fasse ici:

/etc/logrotate.d

Par contre il n’y a rien dans ce répertoire concernant la commande last. ni les fichiers wtmp ou btmp (fichiers sources de last et lastb).

Il semblerait (à confirmer) que la configuration de wtmp et btmp soit en fait gérée par le fichier /etc/logrotate.conf (même chose sur debian 9/ubuntu):

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Par contre, je ne vois pas d’option de suppression/conservation des l’historique des logins?

Non.
Ca, c’est le fichier de conf de logrotate.
Ce n’est pas un autre programme, il ne fait rien par lui même.
Quand au fait que ce soit là qu’il faille règler le probléme, @littlejohn75 venait justement de te l’expliquer.

Ben on fait que de parler de ça depuis le début.
Si tu ne veux pas de rotation de wtmp ni de btmp, devines ce qu’il faut commenter dans logrotate.conf…

Oui désolé, j’ai relu un peu vite et du coup j’avais raté cette information dans la réponse de littlejohn75.

Pour te répondre, je suppose qu’en commentant

rotate 1

et probablement également

monthly

dans le fichier /etc/logrotate.conf, je supprimerai la rotation des logs…

Seulement, j’aime bien comprendre à fond ce que je fais (quand j’y arrive…). Et ici, je ne parviens pas à comprendre pourquoi on a autant de comportements différents avec la même configuration dans le fichier /etc/logrotate.conf (cf. mon post précédent):

  • une debian 8 qui ne crée pas de nouveaux fichiers wtmp à chaque mois
  • une debian 9 qui ne crée pas de nouveaux fichiers wtmp à chaque mois (idem que debian 8)
  • une debian 9 qui crée un nouveau fichier par mois mais qui ne supprime pas les anciens fichiers de logins (on a donc wmtp.1, wmtp.2… dans /var/log)
  • une ubuntu 16 qui crée un nouveau fichier par mois mais supprime sans prévenir ceux de l’année passée!! (super pour savoir ce qui s’est passé sur ma machine avant janvier!)

Mattotop, tu suggérais des réglages différents liés au moment de l’installation des paquets, ce qui me semble avoir du sens dans ma situation. Mais du coup où sont ces réglages? Y a-t-il un autre fichier que /etc/logrotate.conf qui intervient dans la gestion des fichiers wtmp?

Autre question qui n’est pas réglée, pourquoi dans debian 9 (en tout cas sous XFCE), les terminaux ouverts en accès local graphique (pas SSH!) ne sont plus loggués, alors qu’ils l’étaient encore sous debian 8? Il y a bien dû y avoir un changement quelque part entre les deux versions? Je n’ai rien trouvế sur le net, mais c’est vrai que je n’ai pas cherché des heures…

Je ne sais pas trop quel comportement aura logrotate en commentant les deux trucs que tu propose, mais plus simplement tu peux commenter carrément la totalité des 2 blocs, tu n’auras plus que deux fichiers qui grossiront indéfiniment.
Sinon, tu mets une directive “yearly”, et un réglage rotate X et tu auras X années d’archivage, aussi.

Alors si ce n’est pas une différence sur logrotate (puisque c’est la même config, ça devrait avoir le même comportement), je vois une autre possibilité:
logrotate est lancé par cron.
Si ta machine n’est pas allumée au moment ou elle a une tâche cron a faire, la tâche ne s’execute jamais.
Je suppose que si certaines de tes machines ne sont pas des serveurs, elles ont pu être éteintes au moment du logrotate, ce qui peut expliquer les différences d’archivage.
A vérifier: pour une machine que tu éteinds parfois, il faut installer anacron, une surcouche de cron qui s’assure de lancer les tâches qui ne se sont pas executées pendant l’extinction.

Si tu te met dans la même configuration en ouvrant une session xfce sur chacune des machines puis une console graphique, exactement de la même manière, tu es certain que last ne te donne pas le même résultat ?
Ca m’étonne.

Merci de ton retour!

Effectivement, et ça confirme ce que j’ai lu sur le net (bien que les infos soient parfois un peu contradictoires), la ligne “monthly”/“weekly”/“yearly”, etc. donne la fréquence de rotation.

La ligne “rotate” indiquerait quant à elle le nombre de fichiers à garder avant de les supprimer.

Avec la configuration standard sur tous les systèmes:

/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

cela signifierait donc “crée un nouveau log chaque mois, garde seulement un fichier d’archive (wtmp.1), et remplace-le par le nouveau chaque mois”.

Ce comportement semble effectivement correspondre à ce que j’observe sur certaines de mes machines

Par contre, j’ai toujours une debian 9 et une debian 8 qui continuent de logguer dans le même fichier wtmp depuis l’année passée (août pour la debian 9).

Effectivement, ce ne sont pas des serveurs et elles sont éteintes régulièrement, c’est donc possible qu’elles étaient éteintes lors du cronjob de rotation.

J’ai suivi ta suggestion et installé anacron sur la debian 9, puis redemarré la machine. Pour l’instant aucun résultat, la commande last renvoie toujours des informations de login depuis août, et le fichier wtmp n’a pas encore été “rotaté” (il n’y a qu’un seul fichier wtmp dans /var/log).

Par rapport aux infos pst dans last:

Oui, une machine debian 8 et une machine debian 9, session xfce ouverte sur chacune, un terminal ouvert sur chacune, résultat différent (cf. mes captures d’écran dans mon premier post).

C’est tout à votre honneur.
Pour les différences que vous constatez entre Debiann 8, Debian 9 et ubuntuu, je vous renvoie à ma suggestion initiale de lire toutes les informations affichées par

debmany logrotate

dans chacune des configurations. En particulier ce qu’il il y a dans

/usr/share/doc/logrotate/README.Debian

je donne le chemin de cette information importante car Ubuntu ne propose même pas le paquet qui fournit la commande debmany


F. Petitjean
Ingénieur civil du Génie Maritime.

« Ubuntu is an ancient african word, meaning “I can’t configure Debian” »
http://www.urbandictionary.com/define.php?term=ubuntu

Ubuntu
An operating system that claims that it’s easy to use, but in reality requires a PHD in Computer Science.

Nan, mais refais la manip compléte >maintenant<, en rebootant par exemple, et compares.
Je pense que lors de ta capture du 3, tu devais avoir une partie des connections de ta debian 9 qui dataient de plusieurs jours, avant le 31 janvier, et le wtmp devait avoir été “logroté”, ce qui faisait que tu ne les voyais plus avec last.
Si tu le fais maintenant, en ouvrant toutes tes sessions pour qu’elles soient toutes inscrites dans le wtmp actif, je suis certain que tu auras sensiblement le même résultat entre la 8 et la 9.

Sinon, je repense à ta question:

Tu as who, aussi (lire le man, il y a plein d’options).

Merci, je vais lire tout ça.

Alors je viens de rebooter les deux machines.

J’ai créé sur chacune des machines un utilisateur “test” au même moment pour pouvoir comparer.

Sur les deux machines je suis loggué avec l’utilisateur test dans une session graphique XFCE.

Sur les deux machines, j’ai ouvert deux terminaux (par défaut xfce4-terminal je crois), je tape la commande last dans un des deux terminaux ouverts.

Résultats toujours différents:

debian 8:
(ne pas se fier à l’heure, les locales sont faux)

1

on voit que la commande last donne bien des informations sur les deux terminaux ouverts (pts).

debian 9:

2

on voit que la commande last ne donne pas d’informations sur les deux terminaux ouverts dans la session graphique.

Au passage, l’historique de last vient d’être réinitialisé sur la debian 9, j’en déduis donc que l’installation d’anacron comme tu le suggérais a “forcé” la rotation! Et il y a désormais un fichier wtmp.1 dans /var/log!

test@debian:~$ ls /var/log/wtmp*
/var/log/wtmp  /var/log/wtmp.1

Pour en revenir à cette histoire de pts, j’en déduis donc faute de mieux qu’entre debian 8 et debian 9 il y a dû y avoir une modification des infos affichées par défaut par last.

Sur debian 9, le numéro de version est:

test@debian:~$ last --version
last from util-linux 2.29.2

Mais la même commande me renvoie un message d’erreur sur debian 8:

3

Bon ben au temps pour moi.
Aprés, je sens plutôt une différence sur la manière dont xfce ouvre ses terminaux, plutôt qu’une évolution de la commande last.

Tu peux contourner:
sur jessie:

root@emeraude:/home/emeraude# apt-cache policy util-linux
util-linux:
  Installé : 2.25.2-6
  Candidat : 2.25.2-6
 Table de version :
 *** 2.25.2-6 0
        500 http://httpredir.debian.org/debian/ jessie/main amd64 Packages
        100 /var/lib/dpkg/status

sur stretch:

mj@mercure:~$ apt-cache policy util-linux
util-linux:
  Installé : 2.29.2-1
  Candidat : 2.29.2-1
 Table de version :
 *** 2.29.2-1 500
        500 http://ftp.fr.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status

J’ai essayé de regarder les release notes de util-linux (qui contient last), mais j’ai rien trouvé.

J’ai cherché un peu sur le net, je n’ai rien trouvé non plus.

Peut-être lié à xfce4-terminal, mais sur debian 9 j’ai aussi gnome-terminal et j’ai le même résultat.

J’ai aussi constaté que ces mêmes différences existent avec la commande whoentre debian 8 et debian 9:

debian 8:

test@debian:~/Desktop$ who
test     :0           2018-02-04 11:18 (:0)
test     pts/0        2018-02-04 11:19 (:0.0)
test     pts/1        2018-02-04 11:19 (:0.0)

debian 9:

test@debian:~$ who
test     tty7         2018-02-04 11:21 (:0)

Même chose avec w:

debian 8:

test@debian:~$ w
 11:22:47 up 4 min,  3 users,  load average: 0.02, 0.11, 0.06
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
test     :0       :0               11:18   ?xdm?   3.10s  0.00s /bin/sh /etc/xd
test     pts/0    :0.0             11:19   34.00s  0.02s  0.02s bash
test     pts/1    :0.0             11:19    3.00s  0.03s  0.01s w

debian 9:

test@debian:~$ w
 11:22:10 up 1 min,  1 user,  load average: 0.12, 0.04, 0.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
test     tty7     :0               11:21   47.00s  0.83s  0.01s /bin/sh /etc/xd

Oui, j’avais pas vu, mais mes consoles gnome n’apparaissent pas effectivement.
Alors il y a une autre possibilité, c’est un changement dans la manière de gèrer ce types de terminaux virtuels graphiques, quelquepart en profondeur dans l’os, peut être au niveau du noyau:
les pts/X posent un probléme, car il faut décider du nombre maxi qu’on accepte, il me semble que c’est parce que chacun bouffe des ressources, même s’ils sont utilisés.
Bref, il est possible que pour contourner cette limitation en bouffant moins de pts/X, il y ai eu un autre truc qui s’intercale entre ces consoles graphiques et les pts/X.
Bref, je sais vraiment pas…

Tiens, sinon encore une commande que j’avais oubliée: lastlog

Effectivement, ce doit être une implémentation dans ce sens.

Bon tout cela étant assez compliqué, je résume ce que j’ai compris (corrigez-moi si je me trompe):

  • Sur debian/ubuntu, la gestion de la durée/rotation/sauvegarde/compression, etc. des fichiers de log est réalisée automatiquement par un programme appelé logrotate

  • Si un programme produisant des logs (exemple apache2) a une configuration spécifique, on la trouve dans le répertoire /etc/logrotate.d

  • Si un programme produisant des logs n’a pas de configuration spécifique, alors les réglages par défaut dans le fichier /etc/logrotate.conf s’appliquent.

  • En ce qui concerne la commande last, les fichiers de logs produits dans /var/log sont wtmp et btmp

  • La configuration par défaut de cette commande se trouve dans le fichier /etc/logrotate.conf qui y consacre les lignes suivantes:

    #no packages own wtmp, or btmp – we’ll rotate them here
    /var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
    }

    /var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
    }

  • On constate donc que par défaut, il y a une rotation mensuelle de l’historique des logs, c’est-à-dire qu’au 1er du mois, un nouveau fichier wtmp est créé, et l’ancien fichier wtmp devient wtmp.1. Extrait de man logrotate:

     monthly
            Log files are rotated the first time logrotate is run in a month
            (this is normally on the first day of the month).
    
  • Les fichiers antérieurs à wtmp.1 sont effacés, ou plutôt remplacés par le nouveau fichier wtmp.1, cela signifie donc que par défaut, seul l’historique du mois précédent est sauvegardé! Extrait de man logrotate:

     rotate count
            Log files are rotated count times before being removed or mailed
            to the address specified in a mail directive. If count is 0, old
            versions are removed rather than rotated.
    
  • Le programme logrotate étant géré par cron, il se peut que sur un système n’étant pas souvent en marche, la rotation n’ait pas eu lieu car cron n’a pas eu le temps de faire son travail pendant les heures où la machine était en marche

  • On constate qu’entre debian 8 et debian 9 les commandes w, who et last ne renvoient plus d’informations sur les terminaux ouverts en session graphique (pts). On ne sait pas exactement pourquoi.

Au passage, je trouve cela assez malheureux que par défaut l’historique conservé des logins soit limité à un mois sur debian/ubuntu. Je ne comprends pas le principe: ces fichiers ne prennent presque aucune place, et le peu de gain de place réalisé ne compense pas la perte de ces informations précieuses! Que faire si je soupçonne un accès illicite sur une machine il y a deux ou trois mois? Pourquoi pour économiser 100 malheureux ko on décide à ma place que par défaut je ne peux pas avoir cette information?

Pour savoir ce qui se cache derrière la commande, je bascule sur une console ( Ctrl-Alt-F2 ) et je lance

w > /tmp/w.txt
fp2@debpacha:~$ cat /tmp/w.txt 
 14:11:34 up 19:05,  2 users,  load average: 0,00, 0,04, 0,02
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
fp2      tty7     :0               sam.19   19:05m  4:06   0.00s /bin/sh /etc/xdg/xfce4/xinitrc -- /etc/X11/xinit/xserverrc
fp2      tty2     -                14:09    6.00s  0.09s  0.00s w
fp2@debpacha:~$ 

Ce qui montre comment sont gérées les consoles de connexion. Cette gestion des consoles remonte à plus de 35 ans, ces histoires de pseudo-terminal pts/x c’est du BSD, tout comme la commande last.
Il y a eu une évolution entre Debian 8 et Debian 9. La version actuelle a sa logique : une seule connexion graphique tty7 sur la console 7.
Plus d’info dans /lib/systemd/system/systemd-logind.service

[Unit]
Description=Login Service
Documentation=man:systemd-logind.service(8) man:logind.conf(5)
Documentation=http://www.freedesktop.org/wiki/Software/systemd/logind
Documentation=http://www.freedesktop.org/wiki/Software/systemd/multiseat
Wants=user.slice

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

Là où la femme fait défaut, la chèvre est appelée “chérie”.
Les proverbes philosophiques du Professeur Choron

Si ma tante en avait, on l’appelerait pour qu’elle nous les montre.
– Professeur Choron