Provided by: manpages-fr_3.65d1p1-1_all bug

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(8) 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(8).  Néanmoins,
       avant  ça,  init(8) 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(8) 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(8) 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(8) 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

CONFORMITÉ

       POSIX.1 ne spécifie pas de structure utmp, mais une appelée utmpx, 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.

   Comparaison avec des systèmes historiques
       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;

       Notez  que  l'implémentation de la structure utmp a changé entre les bibliothèques C libc5
       et libc6. À cause de ceci,  les  fichiers  exécutables  utilisant  l'ancien  format  libc5
       risquent d'endommager les fichiers /var/run/utmp et/ou /var/log/wtmp.

BOGUES

       Cette  page  de  manuel  est  basée  sur  la  libc5,  et les choses fonctionnent peut-être
       différemment à présent.

VOIR AUSSI

       ac(1), date(1), last(1), login(1), utmpdump(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.65 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du  projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Jean-Luc  Coulon  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».