wtmp

UTMP(5)                   Manuel du programmeur 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 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> ».



Linux                          11 février 2013                        UTMP(5)