UTMP(5)          Manuel de l'administrateur Linux         UTMP(5)


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  enreg­
       istrement utmp, il se peut qu'il y ait plus d'utilisateurs
       que ceux affichés.

       Attention : utmp ne doit pas être accessible  en  écriture
       car   de  nombreux  programmes  systèmes  dépendent  (mal­
       heureusement) de son intégrité.  En laissant utmp accessi­
       ble  en  écriture  pour  les  utilisateurs, vous prenez le
       risque d'avoir de mauvais fichiers de  journalisation,  et
       d'obtenir des modifications de fichiers système.

       Le  fichier  est une suite d'enregistrement avec la struc­
       ture suivante (remarquez que les détails  d'implémentation
       dépendendent  d'une  version  à l'autre de la bibliothèque
       C):

              #define UT_UNKNOWN            0
              #define RUN_LVL               1
              #define BOOT_TIME             2
              #define NEW_TIME              3
              #define OLD_TIME              4
              #define INIT_PROCESS          5
              #define LOGIN_PROCESS         6
              #define USER_PROCESS          7
              #define DEAD_PROCESS          8
              #define ACCOUNTING            9

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

              struct exit_status {
                short int e_termination;    /* Code de fin du processus   */
                short int e_exit;           /* Valeur de fin du processus */
              };

              struct utmp {
                short ut_type;              /* type de login              */
                pid_t ut_pid;               /* pid du processus           */
                char ut_line[UT_LINESIZE];  /* peripherique tty - "/dev/" */
                char ut_id[4];              /* ID tty initial             */
                char ut_user[UT_NAMESIZE];  /* nom utilisateur            */
                char ut_host[UT_HOSTSIZE];  /* nom hote si login distant  */
                struct exit_status ut_exit; /* Code de fin d'un processus */
                                            /* déjà marqué DEAD_PROCESS.  */
                long ut_session;            /* ID de session              */



Linux                      18 Mai 1998                          1





UTMP(5)          Manuel de l'administrateur Linux         UTMP(5)


                struct timeval ut_tv;       /* Horodatage                 */
                int32_t ut_addr_v6[4];      /* Adresse IP hote distant    */
                char pad[20];               /* Remplissage, réservé...    */
              };

              /* 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  car­
       actè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 init­
       tab(5)  par  init(8).   Néanmoins, avant ca, init(8) posi­
       tionne le champ ut_type à DEAD_PROCESS, et efface ut_user,
       ut_host  et  ut_time (remplis avec des octets nul) 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  cor­
       rect,  init  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.

       getty(8) récupère l'entrée corespondant à son PID, modifie
       ut_type à la valeur LOGIN_PROCESS, modifie ut_time,  posi­
       tionne ut_line et attend une connexion.

       Une fois qu'un utilisateur est authentifié, login(8) modi­
       fie ut_type à USER_PROCESS, modifie ut_time et  positionne
       ut_host  et  ut_addr.  En fonction du getty(8) et login(8)
       utilisés, les enregistrements sont parfois identifiés  par
       ut_line plutôt que ut_pid qui est toutefois 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  a  DEAD_PROCESS  et  efface  ut_user,
       ut_host et ut_time avec des octets nuls.

       xterm(1) (comme les autres émulateurs de  terminaux)  crée
       directement  un  enregistrement  USER_PROCESS,  engendrant
       ut_id grâce aux deux dernières lettres de  /dev/ttyp%c  ou
       en   utilisant  p%d  pour  /dev/pts/%d.   S'il  trouve  un
       DEAD_PROCESS pour cet ID, il le recycle, sinon il en  crée
       un  nouveau.  Si possible, il marque l'enregistrement avec
       DEAD_PROCESS à la sortie. Il est recommande  qu'il  efface
       également ut_line, ut_time, ut_user et ut_host.




Linux                      18 Mai 1998                          2





UTMP(5)          Manuel de l'administrateur Linux         UTMP(5)


       xdm(8) ne doit pas créer d'enregistrement car il n'y a pas
       de terminal associé. Le forcer à en créer peut  déclencher
       des problèmes, tels que l'impossibilité de faire fonction­
       ner finger. Par  contre  xdm  peut  très  bien  créer  des
       entrées wtmp tout comme ftpd(8).

       telnetd(8)  construit  un  enregistrement LOGIN_PROCESS et
       laisse le reste du travail à login(8).  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 excepte qu'un
       utilisateur nul indique une déconnexion  sur  le  terminal
       associé.  De plus un nom de terminal "~", associe à 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 modifica­
       tion de l'heure système.

       Le  fichier  wtmp  est  maintenu  par login(1), init(1) et
       quelques un des getty(1).  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/run/wtmp

CONFORMITÉ
       Les enregistrements utmp de Linux ne se  conforment  ni  à
       v7/BSD  ni  à  SYSV.   Ils  sont en réalite un mélange des
       deux.  v7/BSD dispose de moins de champs, par exemple  pas
       de  ut_type,  ce  qui conduit les programmes pour v7/BSD à
       afficher des entrées invalides de login.

       Sous Linux (comme sous SYS V), le champ ut_id d'un  enreg­
       istrement ne sera jamais modifié après son initialisation.
       L'effacement de ut_id peut  engendrer  des  conditions  de
       concurrence  menant  à l'endommagement des enregistrements
       utmp.

       SYSV n'utilise le champ ut_type que pour  noter  et  horo­
       dater  des  messages  informatifs  comme  par exemple "new
       time".  UT_UNKNOWN semble être  une  inovation  de  Linux.
       SYSV n'a pas de champs ut_host ni ut_addr_v6.

       Contrairement  à d'autres systèmes, sur lesquels l'efface­
       ment du fichier arrête la journalisation, le fichier  utmp
       doit  toujours  exister sous Linux. Si vous désirez désac­
       tiver who(1) alors laissez le fichier utmp en place,  mais
       ne le laissez pas lisible par tout le monde.

       Notez  que  l'implémentation de la structure utmp a changé



Linux                      18 Mai 1998                          3





UTMP(5)          Manuel de l'administrateur Linux         UTMP(5)


       entre les bibliothèques C libc5 et libc6. A cause de ceci,
       les  fichiers  éxécutables utilisant l'ancien format libc5
       risquent d'endommager  les  fichiers  /var/run/utmp  et/ou
       /var/log/wtmp.   Les  distributions  Debian  utilisent une
       version modifiée de libc5  proposant  le  nouveau  format.
       Néanmoins,  le  problème  persiste  car  wtmp  est  accédé
       directement dans la libc5.

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

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

VOIR AUSSI
       ac(1),  date(1),  last(1),  login(1), who(1), getutent(3),
       updwtmp(3), init(8)


TRADUCTION
       Christophe Blaess, 1997.

































Linux                      18 Mai 1998                          4