Rechercher une page de manuel

Chercher une autre page de manuel:

wtmp

Autres langues

Langue: fr

Version: 31 octobre 2004 (ubuntu - 01/11/07)

Section: 5 (Format de fichier)

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 car de nombreux programmes systèmes dépendent (malheureusement) de son intégrité. En laissant utmp accessible en écriture pour les utilisateurs, vous prenez le risque d'avoir de mauvais fichiers de journalisation, et des modifications de fichiers système.

Le fichier est une suite d'enregistrements avec la structure suivante (remarquez que les détails d'implémentation dépendent 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 de processus    */
   short int e_exit;           /* code de sortie de processus */
 };
 
 struct utmp {
   short ut_type;              /* type de d'identification */
   pid_t ut_pid;               /* PID du processus d'identification */
   char ut_line[UT_LINESIZE];  /* nom de périphérique du tty - « /dev/ » */
   char ut_id[4];              /* init id or abbrev. ttyname */
   char ut_user[UT_NAMESIZE];  /* nom d'utilisateur */
   char ut_host[UT_HOSTSIZE];  /* nom d'hôte pour les connexions distantes */
   struct exit_status ut_exit; /* code d'état de sortie d'un processus
                                  marqué comme étant un DEAD_PROCESS (« processus mort ») */
   
   /* Les champs ut_session et ut_tv doivent être de la même taille
      lorsqu'ils sont compilés en 32 et en 64 bit. Ceci permet aux fichiers
      de données et à la mémoire partagée d'être partagés entre des applications
      32 et 64 bit */
 #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
   int32_t ut_session;         /* Identifiant de session, utilisé pour le fenêtrage */
   struct {
     int32_t tv_sec;           /* Secondes */
     int32_t tv_usec;          /* Microsecondes */
   } ut_tv;                    /* Heure à laquelle l'entrée a été effectuée */
 #else
    long int ut_session;        /* Identifiant de session, utilisé pour le fenêtrage */
    struct timeval ut_tv;       /* Heure à laquelle l'entrée a été effectuée */
 #endif
 
   int32_t ut_addr_v6[4];       /* adresse IP de l'hôte distant */
   char __unused[20];           /* Réservé pour une utilisation ultérieure */
 };
 
 /* 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 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 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(8) donne à ut_type la valeur USER_PROCESS, modifie ut_time et définit ut_host et ut_addr. Selon les utilitaires getty(8) et login(8) 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 aux deux dernières lettres de /dev/ttyp%c ou en utilisant p%d pour /dev/pts/%d. 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(8). 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 user name indicates a logout on the associated terminal. Furthermore, the terminal name ~ with user name 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). Neither of these programs creates the file, so if it is removed, record-keeping is turned off.

Notez que sur les plates-formes biarch, par ex. les systèmes qui utilisent à la fois des applications 32 et 64 bit (x86_64, ppc64, s390x, etc.), ut_tv est de la même taille en mode 32 bit et en mode 64 bit. 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 bit et 64 bit. Comme ut_tv peut être différent de struct timeval, à la place 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;
 
 

FICHIERS

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

CONFORMITÉ

Les enregistrements utmp de Linux ne sont conformes ni à v7/BSD, ni à Système V. Ce sont 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 Système 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 Système 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.

Système V n'utilise le champ de type que pour le marquer et pour enregistrer de messages d'information tels que « new time ». UT_UNKNOWN semble avoir été inventé par Linux. Système V ne comporte pas les champs ut_host ni ut_addr_v6.

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.

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.

Veuillez remarquez que sur les plates-formes qui peuvent utiliser des applications 32 bit et 64 bit (x86_64, ppc64, s390x, etc.), la taille des champs d'une struct utmp doit être la même dans le mode 32 bit que dans le mode 64 bit. On obtient ceci en modifiant le type de ut_session pour int32_t, et celui de ut_tv en une struct avec deux champs int32_t tv_sec et tv_usec. (Ensuite, afin de les remplir, prenez d'abord l'heure pour la mettre dans une vraie struct timeval, copiez ensuite les deux champs dans ut_tv).

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), updwtmp(3), init(8)

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

De nos jours, on peut survivre a tout, excepte a la mort
et tout surmonter, excepte une bonne réputation.
-+- Oscar Wilde -+-