Provided by: manpages-it_2.80-5_all bug

NOME

       utmp, wtmp - registri dei login

SINTASSI

       #include <utmp.h>

DESCRIZIONE

       Il  file  utmp  permette  di  scoprire  informazioni su chi sta usando attualmente il sistema. Ci possono
       essere più utenti che stanno usando il sistema di quelli riportati, poiché non tutti  i  programmi  usano
       registrazioni utmp.

       Attenzione:  utmp  non deve essere scrivibile, poiché molti programmi di sistema dipendono (stupidamente)
       dalla sua integrità. Si rischia di avere file di log contraffatti e file del sistema modificati lasciando
       utmp scrivibile da qualsiasi utente.

       Il file è una sequenza di voci con la seguente struttura dichiarata nel file  di  include  (si  noti  che
       questa è solo una delle numerose definizioni in giro; i dettagli dipendono dalla versione di libc):

           #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;    /* stato di chiusura del processo */
             short int e_exit;           /* stato di uscita del processo */
           };

           struct utmp {
             short ut_type;              /* tipo di login */
             pid_t ut_pid;               /* PID del processo di login */
             char ut_line[UT_LINESIZE];  /* nome del dispositivo tty - "/dev/" */
             char ut_id[4];              /* identificativo di init o nome tty abbrev. */
             char ut_user[UT_NAMESIZE];  /* nome utente */
             char ut_host[UT_HOSTSIZE];  /* nome dell'host per il login remoto */
             struct exit_status ut_exit; /* Lo stato di uscita di un processo
                                            marcato come DEAD_PROCESS */

             /* I campi ut_session e ut_tv devono essere della stessa dimensione sia
                compilati per 32 che per 64 bit. Ciò permette a file dati e memoria condivisa di essere condivisi tra
                applicazioni 32-bit e applicazioni 64-bit. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
             int32_t ut_session;         /* ID della sessione, usato per il windowing */
             struct {
               int32_t tv_sec;           /* Secondi */
               int32_t tv_usec;          /* Microsecondi */
             } ut_tv;                    /* Creata una voce Time */
           #else
              long int ut_session;        /* ID della sessione, usato per il windowing */
              struct timeval ut_tv;       /* Creata una voce Time */
           #endif

             int32_t ut_addr_v6[4];       /* Indirizzo IP dell'host remoto */
             char __unused[20];           /* Riservato per usi futuri */
           };

           /* Trucchi per la compatibilità all'indietro. */
           #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]

       Questa  struttura  dà  il  nome  del  file  speciale  associato con il terminale utente, il nome di login
       dell'utente, e l'ora di login nel formato di time(2). I campi stringa sono terminati con '\0' se sono più
       corti della dimensione del campo.

       Le prime voci del file sono il risultato di init(8) quando processa inittab(5). Prima che  una  voce  sia
       eseguita,  però,  init(8)  pulisce  il  file utmp assegnando il valore di DEAD_PROCESS a ut_type, pulendo
       ut_user, ut_host e ut_time con byte nulli per ogni registrazione il cui ut_type non  sia  DEAD_PROCESS  o
       RUN_LVL, e quelle per cui non esistono processi con PID ut_pid. Se non si trovano registrazioni vuote con
       la ut_id necessaria, init ne crea una nuova. Poi assegna ut_id dal file inittab, assegna i valori attuali
       a ut_pid e fIut_time e assegna INIT_PROCESS a ut_type.

       mingetty(8) (o agetty(8)) localizza le voci tramite il PID, cambia ut_type perché contenga LOGIN_PROCESS,
       aggiorna  ut_time,  assegna  ut_line  e  aspetta che venga stabilita una connessione. login(1), dopo aver
       autenticato un utente, cambia ut_type perché valga USER_PROCESS, aggiorna ut_time  e  imposta  ut_host  e
       ut_addr.  In  base  al  comportamento  di  mingetty(8) (o agetty(8)) e login(1), le registrazioni possono
       essere indirizzate da ut_line invece del metodo preferibile, ut_pid.

       Quando init(8) scopre che un processo è terminato, ricerca la sua voce utmp tramite  ut_pid,  assegna  il
       valore DEAD_PROCESS a ut_type e pulisce ut_user, ut_host e ut_time, assegnandogli dei byte nulli.

       xterm(1)  e  altri  emulatori  terminale  creano  direttamente un record USER_PROCESS e generano il ut_id
       usando le ultime due lettere di /dev/ttyp%c o usando p%d per /dev/pts/%d. Se essi trovano un DEAD_PROCESS
       per questo ID, lo  riciclano,  altrimenti  creano  una  nuova  voce.  Se  possono,  lo  marcheranno  come
       DEAD_PROCESS all'uscita e si consiglia che azzerino anche ut_line, ut_time, ut_user, e ut_host.

       telnetd(8)  imposta  una  voce  LOGIN_PROCESS  e  lascia  il resto a login(1) come al solito. Dopo che la
       sessione telnet termina telnetd(8) pulisce utmp nel modo descritto.

       Il file wtmp registra tutti i login e logout. Il suo formato è esattamente come utmp tranne che  un  nome
       utente  nullo  indica  un  logout  sul  terminale  associato. Inoltre il nome terminale ~ con nome utente
       shutdown o reboot indica uno spegnimento o riavvio del sistema e la coppia di nomi di terminale |/} fa il
       log della vecchia/nuova ora di sistema quando date(1) la cambia. wtmp è mantenuto da login(1), init(8), e
       da alcune versioni di getty(8) (cioè mingetty(8) o agetty(8)). Il file non è creato da nessuno di  questi
       programmi, quindi se esso viene rimosso la registrazione è disattivata.

       Notare  che su piattaforme biarch, come sistemi che possono far girare sia applicazioni 32-bit che 64-bit
       (x86-64, ppc64, s390x, etc.), ut_tv è della stessa dimensione in modo 32-bit e in modo 64-bit. Lo  stesso
       vale  per  ut_session  e ut_time se sono presenti. Ciò permette a file dati e memoria condivisa di essere
       condivisi tra applicazioni 32-bit e applicazioni 64-bit. Poiché ut_tv potrebbe non essere  lo  stesso  di
       struct timeval, allora, invece della chiamata:

           gettimeofday((struct timeval *) &ut.ut_tv, NULL);

       si raccomanda il seguente metodo per impostare il campo:

           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;

FILE

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

CONFORME A

       Le  voci  Linux  utmp non sono conformi nè a v7/BSD nè a SYSV; esse sono un mix delle due. v7/BSD ha meno
       campi; più importante, esso non ha ut_type, e ciò fa sì che programmi  nativi  v7/BSD  visualizzino  (per
       esempio)  voci  morte  o  di  login.  Inoltre,  non c'è alcun file di configurazione che alloca slot alle
       sessioni. BSD fa questo perché non ha campi ut_id. In Linux (come in System V),  il  campo  ut_id  di  un
       record  non cambierà mai una volta che è stato impostato, e ciò riserva questo spazio senza bisogno di un
       file di configurazione. Cancellare ut_id può dar luogo a delle race condition che  portano  a  voci  utmp
       corrotte  e  a  potenziali  buchi di sicurezza. Cancellare i campi menzionati sopra riempiendoli con byte
       nulli non è richiesto dalla semantica System V, ma permette di eseguire molti programmi che  assumono  la
       semantica  BSD  e  che  non  modificano utmp. Linux usa le convenzioni BSD per i contenuti di linea, come
       documentato in precedenza.

       System V usa solo il campo type per marcare le righe e registra messaggi informativi come,  per  esempio,
       "new  time"  nel  campo  line.  UT_UNKNOWN  sembra  essere una invenzione di Linux. System V non ha campi
       ut_host o ut_addr_v6.

       A differenza di vari altri sistemi, dove la registrazione in utmp può essere disabilitata cancellando  il
       file,  utmp  deve sempre esistere in Linux. Se si vuole disabilitare who(1) basta togliere il permesso di
       lettura globale al file utmp.

       Si noti che lo struct di utmp è cambiato tra libc5 e libc6. Di  conseguenza,  un  programma  che  usi  il
       vecchio struct di libc5 altera /var/run/utmp e/o /var/log/wtmp.

NOTE

       Il  formato  del  file  dipende  dalla  macchina, perciò si raccomanda di modificarlo solo macchine della
       stessa architettura di quella su cui il file è stato creato.

       Si noti che su piattaforme che possono eseguire applicazioni sia a 32-bit che a  64-bit  (x86-64,  ppc64,
       s390x,  etc.), le dimensioni dei campi di una struttura utmp devono essere le stesse in modalità 32-bit e
       in modalità 64-bit. Ciò è raggiunto cambiando il tipo di ut_session in int32_t, e quello di ut_tv in  una
       struttura  con  due  campi  int32_t  tv_sec e tv_usec. (Quindi, per riempirlo, mettere l'ora in una reale
       struct timeval, quindi copiare i due campi in ut_tv.)

BACHI

       Questa pagina di manuale si basa su quella di libc5, ora le cose potrebbero funzionare diversamente.

VEDERE ANCHE

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

COLOPHON

       Questa pagina fa parte del rilascio 2.80 del progetto man-pages di Linux. Si può trovare una  descrizione
       del progetto, e informazioni su come riportare bachi, presso http://www.kernel.org/doc/man-pages/. Per la
       traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/

Linux                                           25 novembre 2007                                         UTMP(5)