oracular (5) wtmp.5.gz

Provided by: manpages-it_4.23.1-1_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 dalla classe di utenti "other", poiché molti programmi di
       sistema dipendono (stupidamente) dalla sua integrità. Si rischia di avere file di log contraffatti e file
       di  sistema  modificati  se si lascia utmp scrivibile da utenti che non siano il proprietario o il gruppo
       proprietario del file.

       Il file è una sequenza di strutture utmp, dichiarate nel modo seguente in <utmp.h> (si noti che questa  è
       solo una delle numerose definizioni in giro; i dettagli dipendono dalla versione di libc):

           /* Valori per il campo ut_type field, sotto */

           #define EMPTY         0 /* Il record non contiene informazioni valide
                                      (inizialmente conosciuto come UT_UNKNOWN su Linux) */
           #define RUN_LVL       1 /* Cambio del run-level di sistema (see
                                      init(1)) */
           #define BOOT_TIME     2 /* Orario dell'avvio del sistema (in ut_tv) */
           #define NEW_TIME      3 /* Orario dopo del cambio dell'orologio di sistema
                                      (in ut_tv) */
           #define OLD_TIME      4 /* Orario prima del cambio dell'orologio di sistema
                                      (in ut_tv) */
           #define INIT_PROCESS  5 /* Processo generato da init(1) */
           #define LOGIN_PROCESS 6 /* Processo iniziale di sessione per accesso utente */
           #define USER_PROCESS  7 /* Processo normale */
           #define DEAD_PROCESS  8 /* Processo terminato */
           #define ACCOUNTING    9 /* Non implementato */

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

           struct exit_status {              /* Tipo per ut_exit, sotto */
               short e_termination;          /* Stato di terminazione del processo */
               short e_exit;                 /* Stato d'uscita del processo */
           };

           struct utmp {
               short   ut_type;              /* tipo di record */
               pid_t   ut_pid;               /* PID del processo di login */
               char    ut_line[UT_LINESIZE]; /* nome del dispositivo tty - "/dev/" */
               char    ut_id[4];             /* suffisso del nome del terminale,
                                                o ID inittab(5) */
               char    ut_user[UT_NAMESIZE]; /* nome utente */
               char    ut_host[UT_HOSTSIZE]; /* nome dell'host per il login remoto, o
                                                versione del kernel per i messaggi di
                                                run-level*/
               struct  exit_status ut_exit;  /* stato di uscita di un processo
                                                marcato come DEAD_PROCESS; non usato
                                                dal programma init(1) di Linux */
               /* 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 (getsid(2)),
                                                usato per il windowing */
               struct {
                   int32_t tv_sec;           /* secondi */
                   int32_t tv_usec;          /* microsecondi */
               } ut_tv;                      /* creata una voce Time */
           #else
                long   ut_session;           /* ID della sessione */
                struct timeval ut_tv;        /* creata una voce Time */
           #endif

               int32_t ut_addr_v6[4];        /* Indirizzo Internet del'host remoto;
                                                indirizzo IPv4 usa
                                                solo ut_addr_v6[0] */
               char __unused[20];            /* Riservato per usi futuri */
           };

           /* Definizioni per 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  al  terminale  utente,  il nome di login
       dell'utente, e l'ora di login nel formato di time(2). I campi stringa sono terminati  con  un  byte  null
       ('\0') se sono più corti della dimensione del campo.

       Le  prime  voci  del  file sono il risultato di init(1) quando elabora inittab(5). Prima che una voce sia
       eseguita, però, init(1) 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(1)  ne  crea una nuova. Poi assegna ut_id dal file inittab, assegna i valori
       attuali a ut_pid e ut_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), i record possono essere
       indirizzati da ut_line invece del metodo preferibile, ut_pid.

       Quando init(1) 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 la stringa che compone il suffisso  finale  del  nome  del  terminale  (i  caratteri  che  seguono
       /dev/[pt]ty). Se 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  |/}
       registra la vecchia/nuova ora di sistema quando date(1) la cambia. wtmp è mantenuto da login(1), init(1),
       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.

FILE

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

VERSIONI

       POSIX.1  non  specifica una struttura utmp ma una che si chiama utmpx (all'interno delle estensioni XSI),
       con indicazioni per i campi ut_type, ut_pid, ut_line, ut_id, ut_user e ut_tv. POSIX.1  non  specifica  la
       lunghezza dei campi ut_line e ut_user.

       Linux definisce la struttura utmpx uguale a quella di utmp.

CONFORME A

       Linux.

STORIA

       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 spazi 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 non ha campi ut_host o ut_addr_v6.

NOTE

       A differenza di vari altri sistemi, in cui 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.

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

       Notare  che su piattaforme biarch, cioé sistemi che possono far girare sia applicazioni 32-bit che 64-bit
       (x86-64, ppc64, s390x, etc.), ut_tv è della stessa dimensione in modalità 32-bit e in modalità 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. Ciò  si  ottiene  cambiando  il  tipo  di
       ut_session a int32_t, e il tipo di ut_tv ad una struttura con due campi int32_t, tv_sec e tv_usec. Poiché
       ut_tv potrebbe non essere lo stesso di struct timeval, 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;

VEDERE ANCHE

       ac(1), date(1), init(1), last(1),  login(1),  logname(1),  lslogins(1),  users(1),  utmpdump(1),  who(1),
       getutent(3), getutmp(3), login(3), logout(3), logwtmp(3), updwtmp(3)

TRADUZIONE

       La   traduzione   italiana   di   questa  pagina  di  manuale  è  stata  creata  da  Giovanni  Bortolozzo
       <borto@dei.unipd.it>, Alessandro  Rubini  <rubini@linux.it>,  Ottavio  G.  Rizzo  <rizzo@pluto.linux.it>,
       Giulio  Daprelà <giulio@pluto.it>, Elisabetta Galli <lab@kkk.it>, Marco Curreli <marcocurreli@tiscali.it>
       e Giuseppe Sacco <eppesuig@debian.org>

       Questa  traduzione  è  documentazione  libera;  leggere  la  GNU  General  Public  License   Versione   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  o  successiva  per  le  condizioni  di  copyright.   Non  ci
       assumiamo alcuna responsabilità.

       Per segnalare errori nella traduzione di  questa  pagina  di  manuale  inviare  un  messaggio  a  ⟨pluto-
       ildp@lists.pluto.it⟩.