Comando Linux/Unix: utmp

El archivo utmp le permite a uno descubrir información sobre quién está usando el sistema actualmente. Puede haber más usuarios utilizando el sistema actualmente, porque no todos los programas utilizan el registro de utmp.

El archivo utmp le permite a uno descubrir información sobre quién está usando el sistema actualmente. Puede haber más usuarios utilizando el sistema actualmente, porque no todos los programas utilizan el registro de utmp.

utmp no debe poder escribirse, porque muchos programas del sistema (tontamente) dependen de su integridad. Corre el riesgo de falsificar los archivos de registro del sistema y las modificaciones de los archivos del sistema si deja utmp grabable para cualquier usuario.

El archivo es una secuencia de entradas con la siguiente estructura declarada en el archivo de inclusión (tenga en cuenta que esta es solo una de varias 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 CONTABLE 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 inicio de sesión */
pid_t ut_pid;/* pid del proceso de inicio de sesión */
char ut_line [UT_LINESIZE];/* nombre del dispositivo de tty - "/ dev /" */
char ut_id [4];/* id de inicio o abreviatura. ttyname */
char ut_user [UT_NAMESIZE];/* nombre de usuario */
char ut_host [UT_HOSTSIZE];/* nombre de host para inicio de sesión remoto */
struct exit_status ut_exit;/* El estado de salida de un proceso
marcado como DEAD_PROCESS. */
larga ut_session;/* ID de sesión, utilizado para ventanas */
struct timeval ut_tv;/* hora en que se realizó la entrada. */
int32_t ut_addr_v6 [4];/* Dirección IP del host remoto. */
almohadilla de carbón [20]; /* Reservado para utilización futura. */
};
/* Hacks de 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 proporciona el nombre del archivo especial asociado con la terminal del usuario, el nombre de inicio de sesión del usuario y la hora de inicio de sesión en forma de hora (2). Los campos de cadena terminan con ‘\ 0’ si son más cortos que el tamaño del campo.

Las primeras entradas creadas son el resultado del procesamiento de init (8) inittab (5). Sin embargo, antes de que se procese una entrada, init (8) limpia utmp configurando ut_type en DEAD_PROCESS , borrando ut_user , ut_host y ut_time con bytes nulos para cada registro que ut_type no es DEAD_PROCESS o RUN_LVL y donde no existe ningún proceso con PID ut_pid . Si no se puede encontrar un registro vacío con el ut_id necesario, init crea uno nuevo. Establece ut_id desde la pestaña initta, ut_pid y ut_time a los valores actuales, y ut_type a INIT_PROCESS .

getty (8) localiza la entrada por el pid, cambia ut_type a LOGIN_PROCESS , cambia ut_time , establece ut_line , y espera a que se establezca la conexión. inicio de sesión (8), después de que un usuario se haya autenticado, cambia ut_type a USER_PROCESS , cambia ut_time y establece ut_host y ut_addr . Dependiendo de getty (8) y login (8), los registros pueden ubicarse por ut_line en lugar del ut_pid .

Cuando init (8) encuentra que un proceso ha salido, localiza su entrada completa por ut_pid , establece ut_type en DEAD_PROCESS y borra 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 el ut_id utilizando las dos últimas letras de /dev/ttyp % c o usando p % d para /dev/pts/ % d . Si encuentran un DEAD_PROCESS para esta identificación, lo reciclan, de lo contrario crean una nueva entrada. Si pueden, lo marcarán como DEAD_PROCESS al salir y se aconseja que anulen ut_line , ut_time , ut_user y ut_host también.

xdm (8) no debe crear un registro utmp, porque no hay un terminal asignado. Dejar que cree uno generará errores, como ‘finger: cannot stat /dev/machine.dom’.Sin embargo, debería crear entradas wtmp, al igual que ftpd (8).

telnetd (8) configura una entrada LOGIN_PROCESS y deja el resto en login (8) como de costumbre. Una vez que finaliza la sesión de telnet, telnetd (8) limpia utmp de la manera descrita.

El archivo wtmp registra todos los inicios de sesión y cierres de sesión. Su formato es exactamente como utmp excepto que un nombre de usuario nulo indica un cierre de sesión en el terminal asociado. Además, el nombre del terminal «~» con el nombre de usuario «shutdown» o «reiniciar» indica un apagado o reinicio del sistema y el par de terminales nombres «|» / «}» registra la hora del sistema antiguo/nuevo cuando fecha (1) lo cambia. wtmp se mantiene mediante login (1), init (1) y algunas versiones de getty (1) . Ninguno de estos programas crea el archivo, por lo que si se elimina, el mantenimiento de registros se desactiva.

Rate article
labsfabs.com
Add a comment