Loading

NOM

       utmp, wtmp - Enregistrements de connexion.

SYNOPSIS

       #include <utmp.h>

       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
                                      (voir 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 « \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 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),  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.23  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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement      gérées      par      Jean-Luc      Coulon      (f5ibh)
       <jean-luc.coulon@wanadoo.fr> et l’équipe francophone de  traduction  de
       Debian.

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