Provided by:
manpages-fr_3.27fr1.4-1_all 
NOM
utmp, wtmp - Enregistrements de connexion
SYNOPSIS
#include <utmp.h>
DESCRIPTION
Le fichier utmp permet de voir qui est connecte sur le systeme. Tous
les programmes n'utilisant pas les enregistrement utmp, il se peut
qu'il y ait plus d'utilisateurs que ceux affiches.
Attention : utmp ne doit pas etre accessible en ecriture par la classe
d'utilisateurs << autres >>, car de nombreux programmes systemes
dependent (malheureusement) de son integrite. En laissant utmp
accessible en ecriture pour les utilisateurs n'etant ni le proprietaire
ni dans le groupe proprietaire, vous prenez le risque d'avoir de
mauvais fichiers de journalisation, et des modifications de fichiers
systeme.
Le fichier est une suite de structures utmp, declarees comme ceci dans
<utmp.h> (notez qu'il ne s'agit que d'une des definitions existantes ;
les details dependent de la version de la bibliotheque C) :
/* Valeurs pour le champ ut_type, ci-dessous */
#define EMPTY 0 /* L'enregistrement ne contient pas
d'information valable (connu auparavant
comme UT_UNKNOWN sous Linux) */
#define RUN_LVL 1 /* Modification du niveau d'execution systeme
(consultez init(8)) */
#define BOOT_TIME 2 /* Date de demarrage du systeme
(en ut_tv) */
#define NEW_TIME 3 /* Heure apres le changement d'heure systeme
(en ut_tv) */
#define OLD_TIME 4 /* Heure avant le changement d'heure systeme
(en ut_tv) */
#define INIT_PROCESS 5 /* Processus lance par init(8) */
#define LOGIN_PROCESS 6 /* Processus leader de session pour
la connexion de l'utilisateur */
#define USER_PROCESS 7 /* Processus normal */
#define DEAD_PROCESS 8 /* Processus termine */
#define ACCOUNTING 9 /* Pas implemente */
#define UT_LINESIZE 32
#define UT_NAMESIZE 32
#define UT_HOSTSIZE 256
struct exit_status { /* Type pour ut_exit ci-dessous */
short int e_termination; /* code de fin de processus */
short int e_exit; /* code de sortie de processus */
};
struct utmp {
short ut_type; /* Type d'enregistrement */
pid_t ut_pid; /* PID du processus */
char ut_line[UT_LINESIZE]; /* Nom du peripherique tty
- << /dev/ >> */
char ut_id[4]; /* Suffixe du nom de terminal,
ou identifiant inittab(5)
char ut_user[UT_NAMESIZE]; /* Nom d'utilisateur */
char ut_host[UT_HOSTSIZE]; /* Nom d'hote pour connexion distante,
ou version du noyau pour les
messages du niveau d'execution
(run-level) */
struct exit_status ut_exit; /* Code de fin d'un processus
deja marque DEAD_PROCESS ;
pas utilise par init(8) de Linux. */
/* Les champs ut_session et ut_tv fields doivent avoir la meme
taille lors de la compilation, 32 et 64 bits. Cela permet aux
fichiers de donnees et a la memoire partagee d'etre partages
entre les applications 32 et 64 bits. */
#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
int32_t ut_session; /* ID de session (getsid(2)),
utilise pour le fenetrage */
struct {
int32_t tv_sec; /* Secondes */
int32_t tv_usec; /* Microsecondes */
} ut_tv; /* Horodatage */
#else
long int ut_session; /* ID de session */
struct timeval ut_tv; /* Horodatage */
#endif
int32_t ut_addr_v6[4]; /* Adresse IP hote distant ;
les adresses IPv4 utilisent
seulement ut_addr_v6[0] */
char __unused[20]; /* Reserve pour utilisation future */
};
/* Bidouille pour compatibilite 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 special associe au terminal de
l'utilisateur, le nom d'utilisateur, l'heure de connexion sous la forme
time(2). Les chaines de caracteres se terminent par << \0 >> si elles
sont plus courtes que les longueurs definies dans la structure.
Le premier enregistrement cree est le traitement de inittab(5) par
init(8). Neanmoins, avant ca, init(8) positionne le champ ut_type a
DEAD_PROCESS, et efface ut_user, ut_host et ut_time (remplis avec des
octets nuls) 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 trouve avec le ut_id correct,
init(8) en cree un nouveau. Il positionne ut_id en s'aidant de
l'inittab, ut_pid et ut_time avec les valeurs actuelles et ut_type a
INIT_PROCESS.
mingetty(8) (ou agetty(8)) recupere l'entree correspondant a son PID,
donne a ut_type la valeur LOGIN_PROCESS, modifie ut_time, definit
ut_line et attend l'etablissement d'une connexion. Une fois qu'un
utilisateur a ete authentifie, login(1) donne a ut_type la valeur
USER_PROCESS, modifie ut_time et definit ut_host et ut_addr. Selon les
utilitaires mingetty(8) (ou agetty(8)) et login(1) utilises, les
enregistrements sont parfois identifies par ut_line plutot que ut_pid,
qui est preferable.
Quand init(8) s'apercoit qu'un processus est termine, il identifie son
enregistrement utmp grace 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), et d'autres emulateurs de terminaux, creent directement un
enregistrement USER_PROCESS, engendrant ut_id grace a la chaine qui
suffixe le nom du terminal (les caracteres qui suivent /dev/[pt]ty.)
S'ils trouvent un DEAD_PROCESS correspondant a cet ID, ils le recycle,
sinon ils en creent un nouveau. Si possible, ils marquent
l'enregistrement comme etant DEAD_PROCESS lorsqu'ils se terminent et il
faut tenir compte du fait qu'ils effacent egalement ut_line, ut_time,
ut_user et ut_host.
telnetd(8) construit un enregistrement LOGIN_PROCESS et laisse le reste
du travail a login(1). Une fois que la session telnet est terminee,
telnetd(8) efface l'utmp de la maniere decrite plus haut.
Le fichier wtmp enregistre les connexions et deconnexions. Son format
est exactement le meme que utmp excepte qu'un utilisateur nul indique
une deconnexion sur le terminal associe. De plus, un nom de terminal
<< ~ >> associe a un nom d'utilisateur << shutdown >> ou << reboot >>
indique un arret ou un redemarrage du systeme. Une paire
d'enregistrements avec les noms de terminaux << |/} >> indique une
modification de l'heure systeme avec date(1). Le fichier wtmp est
maintenu par login(1), init(8) et quelques uns des getty(8) (par
exemple mingetty(8) ou agetty(8)). Aucun de ces programmes ne cree le
fichier. Aussi, si on le supprime, les enregistrements de connexions
sont arretes.
FICHIERS
/var/run/utmp
/var/log/wtmp
CONFORMIT'E
POSIX.1 ne specifie pas de structure utmp, mais une appelee utmpx, avec
des specifications pour les champs ut_type, ut_pid, ut_line, ut_id,
ut_user et ut_tv. POSIX.1 ne specifie pas les tailles des champs
ut_line et ut_user.
Linux definit la structure utmpx comme etant la meme que la structure
utmp.
Comparaison avec des syst`emes historiques
Les enregistrements utmp de Linux ne se conforment ni a v7/BSD ni a
System V. Ils sont en realite un melange des deux.
v7/BSD comporte moins de champs ; par exemple pas de ut_type, ce qui
conduit les programmes natifs de v7/BSD a afficher des entrees (par
exemple) des entrees << mortes >> ou d'identification (<< login >>). De
plus, il n'y a pas de fichier de configuration pour allouer les slots
aux sessions. BSD le fait parce qu'il lui manque le champ ut_id.
Sous Linux (comme sous System V), le champ ut_id d'un enregistrement ne
sera jamais modifie apres son initialisation. L'effacement de ut_id
peut engendrer des conditions de concurrence conduisant a avoir des
entrees utmp corrompues et, potentiellement, des trous de securite.
Effacer les champs mentionnes ci-dessus en les remplissant avec des
zeros binaires n'est pas requis par la semantique de System V, mais
cela permet l'execution de nombreux programmes qui s'appuient sur la
semantique de BSD et qui ne modifient pas utmp. Linux utilise les
conventions BSD en ce qui concerne le contenu des lignes, tels que
c'est precise plus haut.
System V n'a pas de champ ut_host ni ut_addr_v6.
NOTES
Contrairement a d'autres systemes, sur lesquels l'effacement du fichier
arrete la journalisation, le fichier utmp doit toujours exister sous
Linux. Si vous desirez desactiver who(1), laissez le fichier utmp en
place, mais ne le laissez pas lisible par tout le monde.
Le format de ces fichiers depend de la machine, et il est recommande de
ne les utiliser que sur la machine ou ils ont ete crees.
Notez que sur les plates-formes biarch, c'est-a-dire les systemes qui
utilisent a la fois des applications 32 et 64 bits (x86_64, ppc64,
s390x, etc.), ut_tv est de la meme taille en mode 32 bits et en mode 64
bits. De meme en ce qui concerne ut_session et ut_time s'ils existent.
Ceci permet aux fichiers de donnees et a la memoire partagee d'etre
partages entre les applications 32 bits et 64 bits. Cela est fait en
modifiant le type de ut_session en int32_t, et celui de ut_tv en une
structure avec deux champs int32_t, tv_sec et tv_usec. Puisque la
structure ut_tv est differente de la structure timeval, au lieu de
l'appel :
gettimeofday((struct timeval *) &ut.ut_tv, NULL);
il est recommande d'utiliser la methode suivante pour definir ce champ
struct utmp ut;
struct timeval tv;
gettimeofday(&tv, NULL);
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
Notez que l'implementation de la structure utmp a change entre les
bibliotheques C libc5 et libc6. A cause de ceci, les fichiers
executables utilisant l'ancien format libc5 risquent d'endommager les
fichiers /var/run/utmp et/ou /var/log/wtmp.
BOGUES
Cette page de manuel est basee sur la libc5, et les choses fonctionnent
peut-etre differemment a present.
VOIR AUSSI
ac(1), date(1), last(1), login(1), who(1), getutent(3), getutmp(3),
login(3), logout(3), logwtmp(3), updwtmp(3), init(8)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Jean-Luc
Coulon et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.