Man page - wtmp(5)

Packages contains this manual

Available languages:

en fr es it pl ja ru ro de

Manual

utmp

NOM
SYNOPSIS
DESCRIPTION
FICHIERS
VERSIONS
STANDARDS
HISTORIQUE
NOTES
VOIR AUSSI
TRADUCTION

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 enregistrement utmp, il se peut qu’il y ait plus d’utilisateurs que ceux affichĂ©s.

Attention : utmp ne doit pas ĂȘtre accessible en Ă©criture par la classe d’utilisateurs « autres », car de nombreux programmes systĂšmes dĂ©pendent (malheureusement) de son intĂ©gritĂ©. En laissant utmp accessible en Ă©criture pour les utilisateurs n’étant ni le propriĂ©taire ni dans le groupe propriĂ©taire, vous prenez le risque d’avoir de mauvais fichiers de journalisation et des modifications de fichiers systĂšme.

Le fichier est une suite de structures utmp , dĂ©clarĂ©es comme ceci dans <utmp.h> (notez qu’il ne s’agit que d’une des dĂ©finitions existantes ; les dĂ©tails dĂ©pendent de la version de la bibliothĂšque 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’exĂ©cution systĂšme
(consultez init (8)) */
#define BOOT_TIME 2 /* Date de démarrage du systÚme
(en ut_tv ) */
#define NEW_TIME 3 /* Heure aprùs le changement d’heure systùme
(en ut_tv ) */
#define OLD_TIME 4 /* Heure avant le changement d’heure systùme
(en ut_tv ) */
#define INIT_PROCESS 5 /* Processus lancé 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 terminé */
#define ACCOUNTING 9 /* Pas implémenté */
#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 périphérique 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’hîte pour connexion distante,
ou version du noyau pour les
messages du niveau d’exĂ©cution
(run-level) */
struct exit_status ut_exit; /* Code de fin d’un processus
déjà marqué DEAD_PROCESS ;
pas utilisé par init(1) de Linux. */
/* Les champs ut_session et ut_tv fields doivent avoir la mĂȘme
taille lors de la compilation, 32 et 64 bits. Cela permet aux
fichiers de donnĂ©es et Ă  la mĂ©moire partagĂ©e d’ĂȘtre partagĂ©s
entre les applications 32 et 64 bits. */
#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
int32_t ut_session; /* ID de session ( getsid (2)),
utilisĂ© pour le fenĂȘtrage */
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 hÎte distant ;
les adresses IPv4 utilisent
seulement ut_addr_v6[0] */
char __unused[20]; /* Réservé pour utilisation future */
};
/* 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 caractĂšres se terminent par un octet nul « \0 » si elles sont plus courtes que les longueurs dĂ©finies dans la structure.

Le premier enregistrement créé est le traitement de inittab (5) par init (1). NĂ©anmoins, avant ça, init (1) positionne le champ ut_type Ă  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 trouvĂ© avec le ut_id correct, init (1) 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 .

mingetty (8) (ou agetty (8)) rĂ©cupĂšre l’entrĂ©e correspondant Ă  son PID, donne Ă  ut_type la valeur LOGIN_PROCESS , modifie ut_time , dĂ©finit ut_line et attend l’établissement d’une connexion. Une fois qu’un utilisateur a Ă©tĂ© authentifiĂ©, login (1) donne Ă  ut_type la valeur USER_PROCESS , modifie ut_time et dĂ©finit ut_host et ut_addr . Selon les utilitaires mingetty (8) (ou agetty (8)) et login (1) utilisĂ©s, les enregistrements sont parfois identifiĂ©s par ut_line plutĂŽt que ut_pid , qui est prĂ©fĂ©rable.

Quand init (1) s’aperçoit qu’un processus est terminĂ©, il identifie son enregistrement utmp grĂące au champ ut_pid , positionne ut_type Ă  DEAD_PROCESS et efface ut_user , ut_host et ut_time avec des octets nuls.

xterm (1), et d’autres Ă©mulateurs de terminaux, crĂ©ent directement un enregistrement USER_PROCESS , engendrant ut_id grĂące Ă  la chaĂźne qui suffixe le nom du terminal (les caractĂšres qui suivent /dev/ [pt] ty ). S’ils trouvent un DEAD_PROCESS correspondant Ă  cet ID, ils le recycle, sinon ils en crĂ©ent un nouveau. Si possible, ils marquent l’enregistrement comme Ă©tant DEAD_PROCESS lorsqu’ils se terminent et il faut tenir compte du fait qu’ils effacent Ă©galement ut_line , ut_time , ut_user et ut_host .

telnetd (8) construit un enregistrement LOGIN_PROCESS et laisse le reste du travail Ă  login (1). 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 exceptĂ© qu’un utilisateur nul indique une dĂ©connexion sur le terminal associĂ©. De plus, un nom de terminal « ~ » associĂ© Ă  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 modification de l’heure systĂšme avec date (1). Le fichier wtmp est maintenu par login (1), init (1) et quelques uns des getty (8) (par exemple mingetty (8) ou agetty (8)). 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/log/wtmp

VERSIONS

POSIX.1 ne spĂ©cifie pas de structure utmp , mais une appelĂ©e utmpx (comme Ă©lĂ©ment de l’extension XSI), avec des spĂ©cifications pour les champs ut_type , ut_pid , ut_line , ut_id , ut_user et ut_tv . POSIX.1 ne spĂ©cifie pas les tailles des champs ut_line et ut_user .

Linux dĂ©finit la structure utmpx comme Ă©tant la mĂȘme que la structure utmp .

STANDARDS

Linux.

HISTORIQUE

Les enregistrements utmp de Linux ne se conforment ni à v7/BSD ni à System V. Ils sont en réalité un mélange des deux.

v7/BSD comporte moins de champs ; par exemple pas de ut_type , ce qui conduit les programmes natifs de v7/BSD Ă  afficher des entrĂ©es (par exemple) des entrĂ©es « 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 modifiĂ© aprĂšs son initialisation. L’effacement de ut_id peut engendrer des conditions de concurrence conduisant Ă  avoir des entrĂ©es utmp corrompues et, potentiellement, des trous de sĂ©curitĂ©. Effacer les champs mentionnĂ©s ci-dessus en les remplissant avec des zĂ©ros binaires n’est pas requis par la sĂ©mantique de System V, mais cela permet l’exĂ©cution de nombreux programmes qui s’appuient sur la sĂ©mantique 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 prĂ©cisĂ© plus haut.

System V n’a pas de champ ut_host ni ut_addr_v6 .

NOTES

Contrairement Ă  d’autres systĂšmes, sur lesquels l’effacement du fichier arrĂȘte la journalisation, le fichier utmp doit toujours exister sous Linux. Si vous dĂ©sirez dĂ©sactiver who (1), laissez le fichier utmp en place, mais ne le laissez pas lisible par tout le monde.

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.

Notez que sur les plates-formes biarch , c’est-Ă -dire les systĂšmes qui utilisent Ă  la fois des applications 32 et 64 bits (x86_64, ppc64, s390x, etc.), ut_tv est de la mĂȘme taille en mode 32 bits et en mode 64 bits. De mĂȘme en ce qui concerne ut_session et ut_time s’ils existent. Ceci permet aux fichiers de donnĂ©es et Ă  la mĂ©moire partagĂ©e d’ĂȘtre partagĂ©s 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 diffĂ©rente de la structure timeval , au lieu de l’appel :

gettimeofday((struct timeval *) &ut.ut_tv, NULL);

il est recommandĂ© d’utiliser la mĂ©thode suivante pour dĂ©finir 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;

VOIR AUSSI

ac (1), date (1), init (1), last (1), login (1), logname (1), lslogins (1), users (1), utmpdump (1), who (1), getutent (3), getutmp (3), login (3), logout (3), logwtmp (3), updwtmp (3)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Jean-Baptiste Holcroft <jean-baptiste@holcroft.fr>, Grégoire Scano <gregoire.scano@malloc.fr> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .