Provided by: manpages-fr_4.21.0-2_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 /* Record does not contain valid info
                                      (formerly known as UT_UNKNOWN on Linux) */
           #define RUN_LVL       1 /* Change in system run-level (see
                                      init(1)) */
           #define BOOT_TIME     2 /* Time of system boot (in ut_tv) */
           #define NEW_TIME      3 /* Time after system clock change
                                      (in ut_tv) */
           #define OLD_TIME      4 /* Time before system clock change
                                      (in ut_tv) */
           #define INIT_PROCESS  5 /* Process spawned by init(1) */
           #define LOGIN_PROCESS 6 /* Session leader process for user login */
           #define USER_PROCESS  7 /* Normal process */
           #define DEAD_PROCESS  8 /* Terminated process */
           #define ACCOUNTING    9 /* Not implemented */

           #define UT_LINESIZE      32
           #define UT_NAMESIZE      32
           #define UT_HOSTSIZE     256

           struct exit_status {              /* Type for ut_exit, below */
               short e_termination;          /* Process termination status */
               short e_exit;                 /* Process exit status */
           };

           struct utmp {
               short   ut_type;              /* Type of record */
               pid_t   ut_pid;               /* PID of login process */
               char    ut_line[UT_LINESIZE]; /* Device name of tty - "/dev/" */
               char    ut_id[4];             /* Terminal name suffix,
                                                or inittab(5) ID */
               char    ut_user[UT_NAMESIZE]; /* Username */
               char    ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
                                                kernel version for run-level
                                                messages */
               struct  exit_status ut_exit;  /* Exit status of a process
                                                marked as DEAD_PROCESS; not
                                                used by Linux init(1) */
               /* The ut_session and ut_tv fields must be the same size when
                  compiled 32- and 64-bit. This allows data files and shared
                  memory to be shared between 32- and 64-bit applications. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
               int32_t ut_session;           /* Session ID (getsid(2)),
                                                used for windowing */
               struct {
                   int32_t tv_sec;           /* Seconds */
                   int32_t tv_usec;          /* Microseconds */
               } ut_tv;                      /* Time entry was made */
           #else
                long   ut_session;           /* Session ID */
                struct timeval ut_tv;        /* Time entry was made */
           #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]

       This  structure  gives the name of the special file associated with the user's terminal, the user's login
       name, and the time of login in the form of time(2). String fields are terminated by a  null  byte  ('\0')
       if they are shorter than the size of the field.

       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.

       When  init(1)   finds  that  a  process  has exited, it locates its utmp entry by ut_pid, sets ut_type to
       DEAD_PROCESS, and clears ut_user, ut_host, and ut_time with null bytes.

       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.

       The wtmp file records all logins and logouts. Its format is exactly like utmp except that a null username
       indicates a logout on the associated terminal. Furthermore, the terminal name ~ with username shutdown or
       reboot  indicates  a system shutdown or reboot and the pair of terminal names |/} logs the old/new system
       time when date(1)  changes it. wtmp is maintained by login(1), init(1), and  some  versions  of  getty(8)
       (e.g.,  mingetty(8)   or  agetty(8)).  None  of  these  programs  creates  the file, so if it is removed,
       record-keeping is turned off.

FICHIERS

       /var/run/utmp
       /var/log/wtmp

STANDARDS

       POSIX.1 does not specify a utmp structure, but rather one named utmpx (as part  of  the  XSI  extension),
       with  specifications for the fields ut_type, ut_pid, ut_line, ut_id, ut_user, and ut_tv. POSIX.1 does not
       specify the lengths of the ut_line and ut_user fields.

       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;

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>    et   Grégoire   Scano
       <gregoire.scano@malloc.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.

Pages du manuel de Linux 6.03                    5 février 2023                                          utmp(5)