UTMP(5) Manuel de l'administrateur Linux UTMP(5)
NOM
utmp, wtmp - Enregistrements de connexion.
SYNOPSIS
#include <utmp.h>
DESCRIPTION
Le fichier utmp permet de voir qui est connecté sur le
système. Tous les programmes n'utilisant pas les enreg
istrement utmp, il se peut qu'il y ait plus d'utilisateurs
que ceux affichés.
Attention : utmp ne doit pas être accessible en écriture
car de nombreux programmes systèmes dépendent (mal
heureusement) de son intégrité. En laissant utmp accessi
ble en écriture pour les utilisateurs, vous prenez le
risque d'avoir de mauvais fichiers de journalisation, et
d'obtenir des modifications de fichiers système.
Le fichier est une suite d'enregistrement avec la struc
ture suivante (remarquez que les détails d'implémentation
dépendendent d'une version à l'autre de la bibliothèque
C):
#define UT_UNKNOWN 0
#define RUN_LVL 1
#define BOOT_TIME 2
#define NEW_TIME 3
#define OLD_TIME 4
#define INIT_PROCESS 5
#define LOGIN_PROCESS 6
#define USER_PROCESS 7
#define DEAD_PROCESS 8
#define ACCOUNTING 9
#define UT_LINESIZE 12
#define UT_NAMESIZE 32
#define UT_HOSTSIZE 256
struct exit_status {
short int e_termination; /* Code de fin du processus */
short int e_exit; /* Valeur de fin du processus */
};
struct utmp {
short ut_type; /* type de login */
pid_t ut_pid; /* pid du processus */
char ut_line[UT_LINESIZE]; /* peripherique tty - "/dev/" */
char ut_id[4]; /* ID tty initial */
char ut_user[UT_NAMESIZE]; /* nom utilisateur */
char ut_host[UT_HOSTSIZE]; /* nom hote si login distant */
struct exit_status ut_exit; /* Code de fin d'un processus */
/* déjà marqué DEAD_PROCESS. */
long ut_session; /* ID de session */
Linux 18 Mai 1998 1
UTMP(5) Manuel de l'administrateur Linux UTMP(5)
struct timeval ut_tv; /* Horodatage */
int32_t ut_addr_v6[4]; /* Adresse IP hote distant */
char pad[20]; /* Remplissage, réservé... */
};
/* Bidouille pour compatibilité ascendante */
#define ut_name ut_user
#ifndef _NO_UT_TIME
#define ut_time ut_tv.tv_sec
#endif
#define ut_xtime ut_tv.tv_sec
#define ut_addr ut_addr_v6[0]
Cette structure donne le nom du fichier spécial associé au
terminal de l'utilisateur, le nom d'utilisateur, l'heure
de connexion sous la forme time(2). Les chaînes de car
actères se terminent par '\0' si elles sont plus courtes
que les longueurs définies dans la structure.
Le premier enregistrement créé est le traitement de init
tab(5) par init(8). Néanmoins, avant ca, init(8) posi
tionne le champ ut_type à DEAD_PROCESS, et efface ut_user,
ut_host et ut_time (remplis avec des octets nul) de tous
les enregistrement dont l'ut_type n'est ni DEAD_PROCESS ni
RUN_LVL, et si aucun processus de PID ut_pid n'existe. Si
aucun enregistrement vide n'est trouvé avec le ut_id cor
rect, init en crée un nouveau. Il positionne ut_id en
s'aidant de l'inittab, ut_pid et ut_time avec les valeurs
actuelles et ut_type à INIT_PROCESS.
getty(8) récupère l'entrée corespondant à son PID, modifie
ut_type à la valeur LOGIN_PROCESS, modifie ut_time, posi
tionne ut_line et attend une connexion.
Une fois qu'un utilisateur est authentifié, login(8) modi
fie ut_type à USER_PROCESS, modifie ut_time et positionne
ut_host et ut_addr. En fonction du getty(8) et login(8)
utilisés, les enregistrements sont parfois identifiés par
ut_line plutôt que ut_pid qui est toutefois préférable.
Quand init(8) s'aperçoit qu'un processus est terminé, il
identifie son enregistrement utmp grâce au champ ut_pid,
positionne ut_type a DEAD_PROCESS et efface ut_user,
ut_host et ut_time avec des octets nuls.
xterm(1) (comme les autres émulateurs de terminaux) crée
directement un enregistrement USER_PROCESS, engendrant
ut_id grâce aux deux dernières lettres de /dev/ttyp%c ou
en utilisant p%d pour /dev/pts/%d. S'il trouve un
DEAD_PROCESS pour cet ID, il le recycle, sinon il en crée
un nouveau. Si possible, il marque l'enregistrement avec
DEAD_PROCESS à la sortie. Il est recommande qu'il efface
également ut_line, ut_time, ut_user et ut_host.
Linux 18 Mai 1998 2
UTMP(5) Manuel de l'administrateur Linux UTMP(5)
xdm(8) ne doit pas créer d'enregistrement car il n'y a pas
de terminal associé. Le forcer à en créer peut déclencher
des problèmes, tels que l'impossibilité de faire fonction
ner finger. Par contre xdm peut très bien créer des
entrées wtmp tout comme ftpd(8).
telnetd(8) construit un enregistrement LOGIN_PROCESS et
laisse le reste du travail à login(8). Une fois que la
session telnet est terminée, telnetd(8) efface l'utmp de
la manière décrite plus haut.
Le fichier wtmp enregistre les connexions et déconnexions.
Son format est exactement le même que utmp excepte qu'un
utilisateur nul indique une déconnexion sur le terminal
associé. De plus un nom de terminal "~", associe à un nom
d'utilisateur "shutdown" ou "reboot" indique un arrêt ou
un redémarrage du système. Une paire d'enregistrements
avec les noms de terminaux "|" / "}" indique une modifica
tion de l'heure système.
Le fichier wtmp est maintenu par login(1), init(1) et
quelques un des getty(1). Aucun de ces programmes ne crée
le fichier, aussi si on le supprime, les enregistrements
de connexions sont arrêtés.
FICHIERS
/var/run/utmp
/var/run/wtmp
CONFORMITÉ
Les enregistrements utmp de Linux ne se conforment ni à
v7/BSD ni à SYSV. Ils sont en réalite un mélange des
deux. v7/BSD dispose de moins de champs, par exemple pas
de ut_type, ce qui conduit les programmes pour v7/BSD à
afficher des entrées invalides de login.
Sous Linux (comme sous SYS V), le champ ut_id d'un enreg
istrement ne sera jamais modifié après son initialisation.
L'effacement de ut_id peut engendrer des conditions de
concurrence menant à l'endommagement des enregistrements
utmp.
SYSV n'utilise le champ ut_type que pour noter et horo
dater des messages informatifs comme par exemple "new
time". UT_UNKNOWN semble être une inovation de Linux.
SYSV n'a pas de champs ut_host ni ut_addr_v6.
Contrairement à d'autres systèmes, sur lesquels l'efface
ment du fichier arrête la journalisation, le fichier utmp
doit toujours exister sous Linux. Si vous désirez désac
tiver who(1) alors laissez le fichier utmp en place, mais
ne le laissez pas lisible par tout le monde.
Notez que l'implémentation de la structure utmp a changé
Linux 18 Mai 1998 3
UTMP(5) Manuel de l'administrateur Linux UTMP(5)
entre les bibliothèques C libc5 et libc6. A cause de ceci,
les fichiers éxécutables utilisant l'ancien format libc5
risquent d'endommager les fichiers /var/run/utmp et/ou
/var/log/wtmp. Les distributions Debian utilisent une
version modifiée de libc5 proposant le nouveau format.
Néanmoins, le problème persiste car wtmp est accédé
directement dans la libc5.
RESTRICTIONS
Le format de ces fichiers dépend de la machine, et il est
recommandé de ne les utiliser que sur la machine où ils
ont été créés.
BUGS
Cette page de manuel est basée sur la libc5, et les choses
fonctionnent peut-être différement à présent.
VOIR AUSSI
ac(1), date(1), last(1), login(1), who(1), getutent(3),
updwtmp(3), init(8)
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Mai 1998 4