Provided by: manpages-es_1.55-10_all bug

NOMBRE

       utmp, wtmp - registro de sesiones

SINOPSIS

       #include <utmp.h>

DESCRIPCIÓN

       El  fichero  utmp  nos  permite obtener información de quiénes están usando el sistema actualmente. Puede
       haber más usuarios usando el sistema en el momento actual ya que no todos los programas  usan  utmp  como
       registro de sesiones.

       Atención:  utmp  no  debe ser modificable ya que muchos programas del sistema dependen (tontamente) de su
       integridad. Corre  el  riesgo  de  tener  ficheros  de  registro  (logfiles)  del  sistema  falsos  y  de
       modificaciones en ficheros del sistema si deja que cualquiera pueda escribir en utmp.

       El  fichero  es  una  secuencia  de entradas con la siguiente estructura declarada en el fichero cabecera
       (dese cuenta que ésta es sólo una de las posibles definiciones; los detalles dependen de  la  versión  de
       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;      /* estado de terminación del
                                               proceso.  */
                short int e_exit;             /* estado de salida del
                                               proceso.  */
              };

              struct utmp {
                short ut_type;                /* tipo de login */
                pid_t ut_pid;                 /* pid del proceso de login */
                char ut_line[UT_LINESIZE];    /* nombre de dispositivo de tty */
                char ut_id[2];                /* id de inicio o nombre abreviado
                                               de tty */
                char ut_user[UT_NAMESIZE];    /* nombre de usuario */
                char ut_host[UT_HOSTSIZE];    /* nombre de la máquina para login
                                               remoto */
                struct exit_status ut_exit;   /* estado de salida de un proceso
                                               marcado como DEAD_PROCESS. */
                long ut_session;              /* ID de sesión, usado para el
                                               manejo de ventanas */
                struct timeval ut_tv;         /* instante en el que se hizo la
                                               entrada. */
                int32_t ut_addr_v6[4];        /* dirección IP de la máquina
                                               remota. */
                char pad[20];                 /* Reservado para uso futuro.  */
              };

              /* Para compatibilidad hacia atrás.  */
              #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]

       Esta  estructura nos da el nombre del fichero especial asociado con el terminal del usuario, el login del
       usuario y el momento de inicio de sesión en el formato de time(2).  Los campos del tipo  cadena  terminan
       en '\0' si son más cortos que el tamaño del campo.

       Las primeras entradas que se crean siempre proceden del procesamiento de inittab(5) por parte de init(8).
       Sin  embargo,  antes  de  que  se  procese  una entrada, init(8) limpia utmp asignando a ut_type el valor
       DEAD_PROCESS, limpiando los campos ut_user, ut_host y ut_time con caracteres  nulos  para  cada  registro
       cuyo  campo ut_type no sea DEAD_PROCESS ni RUN_LVL y donde no exista ningún proceso con PID ut_pid. Si no
       se puede encontrar ningún registro vacío con el ut_id que se necesita, init crea uno  nuevo.   Asigna  un
       valor  a  ut_id  a  partir  del inittab, a ut_pid y a ut_time a partir de los valores actuales y asigna a
       ut_type el valor INIT_PROCESS.

       getty(8) busca la entrada por el pid, cambia el valor de ut_type a LOGIN_PROCESS, cambia ut_time,  asigna
       un  valor  a  ut_line  y  espera  a  que  se  establezca  la  conexión.  login(8), después de que se haya
       autenticado un usuario, cambia el valor de ut_type a USER_PROCESS, cambia ut_time y  asigna  un  valor  a
       ut_host  y  a ut_addr.  Dependiendo de getty(8) y login(8), los registros se pueden buscar por ut_line en
       lugar de por ut_pid, como es preferible.

       Cuando init(8) encuentra que un proceso ha terminado, busca su entrada utmp por ut_pid, asinga a  ut_type
       el valor DEAD_PROCESS y limpia ut_user, ut_host y ut_time con bytes nulos.

       xterm(1)  y  otros  emuladores  de  terminal  crean directamente un registro USER_PROCESS y generan ut_id
       utilizando las últimas dos letras de /dev/ttyp%c o utilizando p%d  para  /dev/pts/%d.  Si  encuentran  un
       DEAD_PROCESS  para  este  id,  lo  reutilizan, en caso contrario, crean una nueva entrada. Si pueden, las
       marcarán como DEAD_PROCESS al terminar y se aconseja que también rellenen con nulos los  campos  ut_line,
       ut_time, ut_user y ut_host.

       xdm(8)  no  debe  crear  un registro utmp, ya que no hay un terminal asignado. Si se le perimte crear uno
       provocará errores como wtmp, tal como lo hace ftpd(8).

       telnetd(8) establece una entrada LOGIN_PROCESS y deja el resto a login(8), como es habitual.  Después  de
       que termine la sesión de telnet, telnetd(8) limpia utmp de la forma descrita.

       El  ficherowtmp registra todos los inicios y finales de sesión. Su formato es como el de utmp salvo ue un
       nombre nulo de usuario indica el fin de sesión en la terminal asociada. Además, el nombre de terminal "~"
       con nombre de usuario "shutdown" r "reboot" indica un cierre (shutdown) o rearranque del sistema y el par
       de nombres de terminal "|"/"}" registra la fecha antigua/nueva del  sistema  cuando  la  cambia  date(1).
       wtmp  es  mantenido  por login(1), e init(1) y algunas versiones de getty(1).  Ninguno de estos programas
       crea el fichero, por lo que si se borra se desactiva el mantenimiento de los registros.

FICHEROS

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

CONFORME A

       Las entradas utmp de Linux no se corresponden ni con las de v7/BSD ni con las de SYSV; son una mezcla  de
       ambos  tipos.  v7/BSD  tiene menos campos; lo más importante es la falta de ut_type, lo que provocará que
       los programas nativos de v7/BSD muestren (por ejemplo) entradas truncadas o de sesión. Además, no  existe
       ningún  fichero  de  configuración  que asigne entradas a las sesiones. BSD lo hace de esta manera por la
       ausencia de los campos ut_id. En Linux (como en SYSV), el campo ut_id de un registro nunca  cambiará  una
       vez  que  se  le  haya  asignado  un  valor,  lo  que  reserva esa entrada sin necesidad de un fichero de
       configuración. Limpiar el campo ut_id puede producir condiciones de carrera que conduzcan a entradas utmp
       corruptas y a agujeros de seguridad potenciales. La semántica de SYSV no  necesita  la  limpieza  de  los
       campos  mencionados  anteriormente  rellenándolos  con  bytes  nulos,  pero  esto permite ejecutar muchos
       programas que suponen una semántica BSD y que no modifican utmp. Linux usa las convenciones de  BSD  para
       los contenidos de las líneas, tal y como se ha documentado más arriba.

       SYSV  sólo  usa  el campo de tipo para marcarlas y para grabar en el campo de línea mensajes informativos
       tales como, por ejemplo,  "new time". UT_UNKNOWN parece ser un invento de Linux. SYSV no tiene los campos
       ut_host ni ut_addr.

       A diferencia de otros sistemas, donde el registro de información en utmp se puede desabilitar borrando el
       fichero, en Linux este fichero siempre debe existir. Si quiere deshabilitar who(1) elimine el permiso  de
       lectura de utmp de los permisos correspondientes a "otros".

       Note  que  la  estructura utmp de libc5 ha cambiado en libc6. Como consecuencia de esto, los binarios que
       usen la antigua estructura de libc5 corromperán /var/run/utmp y/o  /var/log/wtmp.   Los  sistemas  Debian
       incluyen una libc5 parcheada que usa el nuevo formato de utmp. El problema todavía existe con wtmp ya que
       se utiliza directamente en libc5.

FALLOS

       Esta página de manual se basa en la de libc5; ahora las cosas pueden funcionar de forma diferente.

RESTRICCIONES

       El  formato  del  fichero  es  dependiente  de  la  máquina,  por  lo que se recomienda que sea procesado
       únicamente en la arquitectura de máquina donde se creó.

VÉASE TAMBIÉN

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

Linux                                          2 de Julio de 1997                                        UTMP(5)