Skip to main content

Come usare il comando Unix Utmp in Linux

How to Monitor User Login and System Restart Activities (Giugno 2026)

How to Monitor User Login and System Restart Activities (Giugno 2026)
Anonim

Ilutmp file consente di scoprire informazioni su chi sta attualmente utilizzando il sistema. Ci possono essere più utenti che attualmente usano il sistema, perché non tutti i programmi usano la registrazione di utmp.

Avvertimento: utmp non deve essere scrivibile, perché molti programmi di sistema (stupidamente) dipendono dalla sua integrità. Rischia di falsificare i file di log del sistema e le modifiche dei file di sistema, se te ne vaiutmpscrivibile a qualsiasi utente.

Il file è una sequenza di voci con la seguente struttura dichiarata nel file di inclusione (si noti che questa è solo una delle diverse definizioni disponibili, 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; / * stato di terminazione del processo. * / short int e_exit; / * stato di uscita del processo. * /}; struct utmp {short ut_type; / * tipo di accesso * / pid_t ut_pid; / * pid del processo di accesso * / char ut_line UT_LINESIZE; / * nome del dispositivo di tty - "/ dev /" * / char ut_id 4; / * ID init o abbrev. ttyname * / char ut_user UT_NAMESIZE; / * nome utente * / char ut_host UT_HOSTSIZE; / * nomehost per accesso remoto * / struct exit_status ut_exit; / * Lo stato di uscita di un processo contrassegnato come DEAD_PROCESS. * / long ut_session; / * ID di sessione, utilizzato per il windowing * / struct timeval ut_tv; / * l'immissione del tempo è stata effettuata. * / int32_t ut_addr_v6 4; / * Indirizzo IP dell'host remoto. * / char pad 20; /* Riservato per uso futuro. * /}; / * Hack di 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 fornisce il nome del file speciale associato al terminale dell'utente, il nome di accesso dell'utente e l'ora di accesso sotto forma ditempo(2). I campi di stringa sono terminati da'' se sono più corti delle dimensioni del campo.

Le prime voci mai create derivano da dentro (8) elaborazione inittab (5). Prima che una voce venga elaborata, tuttavia, dentro (8) ripulisce utmp impostandout_type aDEAD_PROCESS, compensazioneut_user, ut_host, eut_time con byte null per ogni record cheut_type non èDEAD_PROCESS oRUN_LVL e dove nessun processo con PIDut_pid esiste. Se nessun record vuoto con il necessariout_id può essere trovato, init ne crea uno nuovo. Impostaut_id dall'inittab,ut_pid eut_time ai valori attuali eut_type aINIT_PROCESS.

getty (8) individua la voce dal pid, cambiaut_type aLOGIN_PROCESS, i cambiamentiut_time, impostaut_linee attende che venga stabilita la connessione. accesso (8), dopo che un utente è stato autenticato, cambiaut_type aUSER_PROCESS, i cambiamentiut_timee setut_host eut_addr. A seconda di getty (8) e accesso (8), i record possono essere localizzati daut_line invece del preferibileut_pid.

quando dentro (8) trova che un processo è terminato, individua la sua voce utmp daut_pid, impostaut_type aDEAD_PROCESSe cancellaut_user, ut_host eut_time con byte null.

xterm (1) e altri emulatori di terminali creano direttamente aUSER_PROCESS registrare e generare ilut_id utilizzando le ultime due lettere di/ Dev / ttyp % c o usandop % d per/ dev / pts / % d . Se trovano unDEAD_PROCESS per questo id, lo riciclano, altrimenti creano una nuova voce. Se possono, lo segneranno comeDEAD_PROCESS all'uscita e si avvisa che sono nulli ut_line,ut_time, ut_user, eut_host anche.

xdm (8) non dovrebbe creare un record utmp, perché non esiste un terminale assegnato. Se ne crea uno ne risulteranno errori, come "finger: can not stat /dev/machine.dom". Dovrebbe creare voci di wtmp, però, proprio come ftpd (8) fa.

telnetd (8) imposta aLOGIN_PROCESS entrata e lascia il resto a accesso (8) come al solito. Al termine della sessione telnet, telnetd (8) pulisce utmp nel modo descritto.

Ilwtmp il file registra tutti gli accessi e le disconnessioni. Il suo formato è esattamente comeutmp salvo che un nome utente nullo indica un logout sul terminale associato. Inoltre, il nome del terminale'~'con nome utente"spegnimento" o"Reboot" indica un arresto del sistema o il riavvio e la coppia di nomi dei terminali'|'/'}' registra la vecchia / nuova ora del sistema quando Data (1) lo cambia.wtmp è gestito da accesso (1), dentro (1), e alcune versioni di getty (1). Nessuno di questi programmi crea il file, quindi se viene rimosso, la tenuta della registrazione è disattivata.