noble (5) wtmp.5.gz

Provided by: manpages-es_4.21.0-2_all bug

NOMBRE

       utmp, wtmp - registro de sesiones

SINOPSIS

       #include <utmp.h>

DESCRIPCIÓN

       El  archivo  utmp  nos  permite  obtener  información  acerca  de  qué  usuarios  están usando el sistema
       actualmente. No todas las aplicaciones usan el registro de utmp por lo que puede haber  usuarios  que  no
       figuren.

       Atención:  utmp  no  debe ser modificable ya que muchos programas del sistema dependen (tontamente) de su
       integridad. Corre el riesgo de tener registros del sistema  ("logs"  en  inglés)  incorrectos  e  incluso
       modificaciones indeseadas de archivos del sistema si deja que cualquiera pueda escribir en utmp.

       El  archivo  es  una  secuencia  de estructuras de utmp, declaradas a continuación en el archivo <utmp.h>
       (esto es sólo una posible definición ya que los detalles dependen de la versión de libc):

           /* Valores para el campo ut_type */

           #define EMPTY         0 /* El registro no contiene información válida
                                      (definido anteriormente en Linux como UT_UNKNOWN) */
           #define RUN_LVL       1 /* Modifica el nivel de ejecución del sistema (vea
                                      init(1)) */
           #define BOOT_TIME     2 /* Hora de arranque del sistema (en ut_tv) */
           #define NEW_TIME      3 /* Hora después de modificar el reloj del sistema
                                      (en ut_tv) */
           #define OLD_TIME      4 /* Hora antes de modificar el reloj del sistema
                                      (en ut_tv) */
           #define INIT_PROCESS  5 /* Proceso iniciado por init(1) */
           #define LOGIN_PROCESS 6 /* Proceso principal para el inicio de sesión del usuario */
           #define USER_PROCESS  7 /* Proceso corriente*/
           #define DEAD_PROCESS  8 /* Proceso finalizado */
           #define ACCOUNTING    9 /* Actualmente sin uso */

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

           struct exit_status {              /* Type for ut_exit, below */
               short e_termination;          /* Process termination status */
               short e_exit;                 /* Process exit status */
           };

           struct utmp {
               short   ut_type;              /* Tipo de registro */
               pid_t   ut_pid;               /* PID del proceso de inicio de sesión */
               char    ut_line[UT_LINESIZE]; /* Nombre de dispositivo del terminal - "/dev/" */
               char    ut_id[4];             /* Extensión del nombre de terminal,
                                                o ID de inittab(5) */
               char    ut_user[UT_NAMESIZE]; /* Nombre de usuario */
               char    ut_host[UT_HOSTSIZE]; /* Nombre del host para sesión remota
                                                o versión del núcleo para los mensajes del
                                                nivel de ejecución */
               struct  exit_status ut_exit;  /* Estado de salida de un proceso
                                                marcado como DEAD_PROCESS; no
                                                se usa en el init(1) de Linux*/
               /* ut_session y ut_tv fields tiene que tener el mismo tamaño
                  al compilarse en 32- y en 64-bit.  Esto permite compartir datos
                  y memoria entre aplicaciones de 32- y de 64-bits. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
               int32_t ut_session;           /* ID de sesión (getsid(2)),
                                                para la ventana */
               struct {
                   int32_t tv_sec;           /* segundos */
                   int32_t tv_usec;          /* microsegundos */
               } ut_tv;                      /* Hora de anotación de la entrada */
           #else
                long   ut_session;           /* ID de sesión */
                struct timeval ut_tv;        /* Hora de la entrada */
           #endif

               int32_t ut_addr_v6[4];        /* Dirección de internet del
                                                host remoto; las direcciones IPv4 emplean
                                                just ut_addr_v6[0] */
               char __unused[20];            /* Reservado para un uso futuro */
           };

           /* Para compatibilidad con versiones anteriores. */
           #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 nombre del
       usuario  y  el  momento de inicio de sesión en el formato definido en time(2). Los campos del tipo cadena
       terminan con bytes nulos ( ('\0') si no completan la totalidad del campo.

       Las primeras entradas que se crean siempre proceden del procesamiento de inittab(5) por parte de init(1).
       Sin  embargo,  antes  de  que  se  procese  una entrada, init(1) 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(1) 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.

       mingetty(8)  (o agetty(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. Una vez que se
       produjo la autentifiación del usuario, login(1),  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 mingetty(8)  (o agetty(8)) y login(8),
       los registros se pueden buscar por ut_line en lugar de por ut_pid, como  sería preferible.

       Cuando init(1) detecta que un proceso ha terminado, busca su  entrada  utmp  mediante  ut_pid,  asigna  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 con
       los caracteres siguientes de la cadena /dev/[pt]ty. 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 bytes  nulos  los  campos  ut_line,  ut_time,  ut_user  y
       ut_host.

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

       El archivo wtmp registra todos los inicios y finales de sesión. Su formato es como el de utmp  salvo  que
       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 o reboot indica un cierre (shutdown) o reinicio del sistema y el par  de
       nombres  de  terminal  |/}  registra la fecha antigua/nueva del sistema cuando la cambia date(1). wtmp se
       gestiona a través de login(1), init(1) y algunas  versiones  de  getty(8)  (por  ejemplo:  mingetty(8)  o
       agetty(8))  Ninguno  de  estos  programas  crea  el  archivo,  por  lo  que  si  se borra se desactiva el
       mantenimiento de los registros.

ARCHIVOS

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

ESTÁNDARES

       POSIX.1 no define la estructura de utmp, en cambio la define para utmpx (como parte de la extensión  XSI)
       detallando  especificaciones  para  los  campos ut_type, ut_pid, ut_line, ut_id, ut_user y ut_tv. Tampoco
       define la longitud de los campos  ut_line y ut_user.

       Linux define que la estructura de  utmpx  debe ser idéntica a la de utmp.

   Comparación con sistemas antiguos
       Las entradas de utmp no son conformes nia v7/BSD ni a System V sino que son una mezcla de ambos.

       v7/BSD tiene un menor  número  de  campo;  principalmente  no  tiene  ut_type  lo  que  provoca  que  las
       aplicaciones  nativas  de  este sistema muestren (entre otras cosas) algunas sesiones muertas. Es más, no
       dispone de un archivos para configurar la reserva de entradas para sesiones  al  no  disponer  de  campos
       ut_id.

       En  Linux  (igual  que  en System V), 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 den lugar a entradas utmp corruptas y a potenciales
       problemas de seguridad. La semántica de System V 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 descrito anteriormente.

       System V no tiene los campos ut_host ni ut_addr_v6.

NOTAS

       A  diferencia  de otros sistemas, donde el registro de información en utmp se puede deshabilitar 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".

       El  formato  del  fichero  depende  de  la  arquitectura  de la máquina, por lo que se recomienda que sea
       procesado únicamente en la arquitectura en que fue creado.

       Tenga en cuenta que en plataformas biarch (aquellas que pueden ejecutar aplicaciones de 32 y de  64  bits
       tales  como  x86-64,ppc64,s390x,etc...),  ut_tv  tiene  el  mismo tamaño en el mode de 32-bits y en el de
       64-bits. Lo mismo ocurre con ut_session y ut_time si existen. Esto permite  que  se  comparta  memoria  y
       datos entre aplicaciones de distinto tipo.  Este se consigue al modificar el tipo de ut_session a int32_t
       y el de ut_tv a una estructura con dos campos int32_t: tv_sec y tv_usec. Como ut_tv puede  no  ser  igual
       que struct timeval en lugar de la llamada:

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

       se recomienda definir este campo con el siguiente método:

           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;

VÉASE TAMBIÉN

       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)

TRADUCCIÓN

       La traducción al español de esta página del manual fue creada  por  Juan  Piernas  <piernas@ditec.um.es>,
       Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

       Esta   traducción   es   documentación   libre;   lea   la   GNU   General   Public   License  Version  3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ o posterior con respecto a las condiciones de copyright.   No
       existe NINGUNA RESPONSABILIDAD.

       Si  encuentra  algún  error  en  la  traducción  de esta página del manual, envíe un correo electrónico a
       ⟨debian-l10n-spanish@lists.debian.org⟩.