Provided by: manpages-it_0.3.4-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, in quanto molti programmi
       di sistema dipendono (stupidamente) dalla sua integrità. Si rischia che
       vengano contraffatti i file di log del sistema e  che  il  sistema  sia
       modificato se si lascia utmp scrivibile a 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;     /* process termination status.  */
                short int e_exit;    /* process exit status.  */
              };

              struct utmp {
                short ut_type;        /* type of login */
                pid_t ut_pid;         /* pid of login process */
                char ut_line[UT_LINESIZE];    /* device name of tty - "/dev/" */
                char ut_id[4];        /* init id or abbrev. ttyname */
                char ut_user[UT_NAMESIZE];    /* user name */
                char ut_host[UT_HOSTSIZE];    /* hostname for remote login */
                struct exit_status ut_exit;  /* The exit status of a process
                        marked as DEAD_PROCESS. */
                long ut_session;     /* session ID, used for windowing*/
                struct timeval ut_tv;        /* time entry was made.  */
                int32_t ut_addr_v6[4];       /* IP address of remote host.  */
                char pad[20];        /* Reserved for future use.  */
              };

              /* Per compatibilità con le versioni precedenti */
              #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  da  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  esegue
       inittab(5).   Prima che una voce sia eseguita, però, init(8) pulisce il
       file utmp assegnando il valore 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 vuoti con la ut_id
       necessaria, init ne crea una nuova. Poi assegna ut_id dal file inittab,
       assegna  i  valori correnti a ut_pid e ut_time e assegna INIT_PROCESS a
       ut_type.

       Il processo getty(8) ricerca 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.  Il  processo  login(8)
       modifica il file dopo aver autenticato un utente: cambia ut_type perché
       valga USER_PROCESS, aggiorna ut_time  e  assegna  valori  a  ut_host  e
       ut_addr.    In  base  al  comportamento  di  getty(8)  e  login(8),  le
       registrazioni possono essere indirizzate da ut_line invece  del  metodo
       preferibile, ut_pid.

       Quando init(8) scopre che un processo ha 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  di  terminale  creano  direttamente  una
       registrazione USER_PROCESS e generano il campo ut_id usando  le  ultime
       due   lettere   di  /dev/ttyp%c,  oppure  usando  p%d  per  periferiche
       /dev/pts/%d.   Se   trovano   una   registrazione   DEAD_PROCESS    per
       l’identificativo  scelto  la  riciclano,  altrimenti  creano  una nuova
       registrazione.  Se possono , questi  programmi  marcano  la  voce  come
       DEAD_PROCESS  quando  terminano,  è  consigliabile  anche  che azzerino
       ut_line, ut_time, ut_user e ut_host.

       xdm(8) non dovrebbe creare  registrazioni  utmp,  perché  non  ci  sono
       terminali   assegnati   al   programma.   Permettergli  di  creare  una
       registrazione risulterebbe in alcuno problemi, come: ‘‘finger: can  not
       stat  /dev/machine.dom’’.   Il  programma,  però,  dovrebbe creare voci
       wtmp, proprio come fa ftpd(8).

       Il programma telnetd(8) predispone una voce LOGIN_PROCESS e  lascia  il
       resto  del  lavoro  a  login(8)  come  al  solito.   Dopo la fine della
       sessione telnet, telnetd(8) pulisce utmp nel modo descritto.

       Il file wtmp registra tutti i login  e  i  logout.  Il  suo  formato  è
       esattamente  come  quello  di  utmp  con l’eccezione che un nome utente
       nullo indica il logout nel terminale associato. Inoltre,  il  nome  del
       terminale "~" con nome utente "shutdown" o "reboot" indica uno shutdown
       o reboot  e  la  coppia  di  nomi  di  terminale  "|"/"}"  registra  la
       vecchia/nuova ora del sistema quando il comando date(1) la cambia. wtmp
       è mantenuto da login(1), init(1) e alcuni tipi di getty(1). Nessuno  di
       questi  programmi crea il file, perciò se viene la registrazione rimane
       disabilitata.

FILE

       /var/adm/utmp
       /var/adm/wtmp

CONFORME A

       Le voci utmp di Linux non sono conformi né a v7/BSD né a SYSV: sono  un
       misto  delle  due.  v7/BSD  ha meno campi, ed è importante il fatto che
       manchi del campo ut_type, cosa che  fa si che i programmi  nativi  tipo
       v7/BSD  mostrino  le  voci  relative a sessioni terminate.  Inoltre non
       esiste un file di configurazione che allochi le voci per  le  sessioni.
       BSD  si  comporta  in  questo modo perché gli manca il campo ut_id.  In
       Linux (come in SYSV), il campo ut_id di una registrazione non  cambierà
       mai  una  volta creato, il che riserva la voce senza bisogno di un file
       di configurazione.  La cancellazione di ut_id può  risultare  in  corse
       critiche che portino a voci di utmp corrotte e, potenzialmente, a buchi
       di sicurezza.  La cancellazione dei campi  menzionati  riempiendoli  di
       byte  nulli  non  è  richiesta dalla semantica SYSV, ma permette di far
       girare molti programmi che suppongono semantiche di tipo BSD e che  non
       modificano  utmp.  Linux  usa le convenzioni BSD per il contenuto delle
       righe del file come documentato sopra.

       SYSV usa solo il  campo  ‘‘type’’  per  marcare  le  righe  e  registra
       messaggi  informativi  come  "new  time" nel campo ‘‘line’’. UT_UNKNOWN
       sembra essere una invenzione di Linux.  SYSV non ha i campi  ut_host  e
       ut_addr.

       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 il comando who(1) basta togliere il
       permesso di lettura 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.

RESTRIZIONI

       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.

BACHI

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

VEDERE ANCHE

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