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> ».