utmp(5) File Formats Manual utmp(5) NUME utmp, wtmp - inregistrari de autentificare REZUMAT #include DESCRIERE Fiierul utmp permite aflarea de informaii despre cine utilizeaza in prezent sistemul. Este posibil sa existe mai muli utilizatori care utilizeaza in prezent sistemul, deoarece nu toate programele utilizeaza jurnalizarea utmp. Avertisment: utmp nu trebuie sa poata fi scris de catre clasa de utilizatori ,,other" (alii), deoarece multe programe de sistem depind (in mod nebunesc) de integritatea sa. Riscai sa falsificai fiiere de jurnal de sistem i sa modificai fiiere de sistem daca lasai utmp cu permisiuni de scriere pentru orice alt utilizator decat proprietarul i grupul proprietar al fiierului. Fiierul este o secvena de structuri utmp, declarate dupa cum urmeaza in (reinei ca aceasta este doar una dintre cele cateva definiii existente; detaliile depind de versiunea de libc): /* Valori pentru campul ut_type, de mai jos */ #define EMPTY 0 /* Inregistrarea nu conine informaii valide (cunoscuta anterior ca UT_UNKNOWN pe Linux) */ #define RUN_LVL 1 /* Schimbarea nivelului de execuie a sistemului (a se vedea init(1)) */ #define BOOT_TIME 2 /* Timpul de pornire a sistemului (in ut_tv) */ #define NEW_TIME 3 /* Timpul dupa schimbarea ceasului sistemului (in ut_tv) */ #define OLD_TIME 4 /* Timpul inainte de schimbarea ceasului sistemului (in ut_tv) */ #define INIT_PROCESS 5 /* Proces generat de init(1) */ #define LOGIN_PROCESS 6 /* Proces de lider de sesiune pentru autentificarea utilizatorului */ #define USER_PROCESS 7 /* Proces normal */ #define DEAD_PROCESS 8 /* Proces terminat */ #define ACCOUNTING 9 /* Neimplementat */ #define UT_LINESIZE 32 #define UT_NAMESIZE 32 #define UT_HOSTSIZE 256 struct exit_status { /* Tip pentru ut_exit, de mai jos */ short e_termination; /* Starea de terminare a procesului */ short e_exit; /* Starea de ieire a procesului */ }; struct utmp { short ut_type; /* Tipul de inregistrare */ pid_t ut_pid; /* PID-ul procesului de autentificare */ char ut_line[UT_LINESIZE]; /* Numele dispozitivului tty - ,,/dev/" */ char ut_id[4]; /* Sufixul numelui terminalului, sau ID-ul inittab(5) */ char ut_user[UT_NAMESIZE]; /* Nume utilizator */ char ut_host[UT_HOSTSIZE]; /* Numele de gazda pentru autentificarea de la distana sau versiunea nucleului pentru mesajele de la nivelul de execuie */ struct exit_status ut_exit; /* Starea de ieire a unui proces marcat ca DEAD_PROCESS; nu este utilizat de Linux init(1) */ /* Campurile ut_session i ut_tv trebuie sa aiba aceeai dimensiune atunci cand sunt compilate pe 32 i 64 de bii. Acest lucru permite partajarea fiierelor de date i a memoriei partajate intre aplicaiile pe 32 i 64 de bii. */ #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32 int32_t ut_session; /* ID-ul sesiunii (getsid(2)), utilizat pentru deschiderea ferestrelor */ struct { int32_t tv_sec; /* Secunde */ int32_t tv_usec; /* Microsecunde */ } ut_tv; /* Ora la care s-a facut inregistrarea */ #else long ut_session; /* ID-ul sesiunii */ struct timeval ut_tv; /* Ora la care s-a facut inregistrarea */ #endif int32_t ut_addr_v6[4]; /* Adresa de internet a gazdei de la distana; adresa IPv4 folosete doar ut_addr_v6[0] */ char __unused[20]; /* Rezervat pentru utilizare viitoare */ }; /* Trucuri de compatibilitate retroactiva */ #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] Aceasta structura indica numele fiierului special asociat terminalului utilizatorului, numele de autentificare al utilizatorului i ora de autentificare sub forma time(2). Campurile de tip ir de caractere se termina cu un octet nul (,,\0") daca sunt mai scurte decat dimensiunea campului. Primele intrari care sunt create provin intotdeauna din procesarea de catre init(1) a lui inittab(5). Totui, inainte ca o intrare sa fie procesata, init(1) curaa utmp prin stabilirea lui ut_type la DEAD_PROCESS, tergand ut_user, ut_host i ut_time cu octei nule pentru fiecare inregistrare in care ut_type nu este DEAD_PROCESS sau RUN_LVL i in care nu exista un proces cu PID ut_pid. In cazul in care nu se gasete nici o inregistrare goala cu ut_id necesar, init(1) creeaza una noua. Definete ut_id din inittab, ut_pid i ut_time la valorile curente, iar ut_type la INIT_PROCESS. mingetty(8) (sau agetty(8)) localizeaza intrarea dupa PID, schimba ut_type in LOGIN_PROCESS, modifica ut_time, stabilete ut_line i ateapta stabilirea conexiunii. login(1), dupa ce un utilizator a fost autentificat, modifica ut_type in USER_PROCESS, modifica ut_time i stabilete ut_host i ut_addr. In funcie de mingetty(8) (sau agetty(8)) i login(1), inregistrarile pot fi localizate prin ut_line in loc de preferabilul ut_pid. Cand init(1) constata ca un proces a ieit, localizeaza intrarea utmp prin ut_pid, stabilete ut_type la DEAD_PROCESS i golete ut_user, ut_host i ut_time cu octei nuli. xterm(1) i alte emulatoare de terminale creeaza direct o inregistrare USER_PROCESS i genereaza ut_id utilizand irul care sufixeaza o parte din numele terminalului (caracterele care urmeaza dupa /dev/[pt]ty). Daca gasesc un DEAD_PROCESS pentru acest ID, il recicleaza, in caz contrar creeaza o noua inregistrare. Daca pot, o marcheaza ca DEAD_PROCESS la ieire i se recomanda sa completeze ut_line, ut_time, ut_user i ut_host cu zerouri, de asemenea. telnetd(8) stabilete o intrare LOGIN_PROCESS i lasa restul in seama lui login(1), ca de obicei. Dupa ce sesiunea telnet se incheie, telnetd(8) curaa utmp in modul descris. Fiierul wtmp inregistreaza toate intrarile i ieirile. Formatul sau este exact ca utmp, cu excepia faptului ca un nume de utilizator nul indica o deconectare de la terminalul asociat. In plus, numele terminalului ~ cu numele de utilizator shutdown sau reboot indica o inchidere sau o repornire a sistemului, iar perechea de nume de terminale |/} inregistreaza ora veche/noua a sistemului atunci cand date(1) o modifica. wtmp este intreinut de login(1), init(1) i de unele versiuni de getty(8) (de exemplu, mingetty(8) sau agetty(8)). Nici unul dintre aceste programe nu creeaza fiierul, astfel incat, daca este eliminat, pastrarea inregistrarilor este oprita. FIIERE /var/run/utmp /var/log/wtmp VERSIUNI POSIX.1 nu specifica o structura utmp, ci una numita utmpx (ca parte a extensiei XSI), cu specificaii pentru campurile ut_type, ut_pid, ut_line, ut_id, ut_id, ut_user i ut_tv. POSIX.1 nu specifica lungimile campurilor ut_line i ut_user. Linux definete structura utmpx ca fiind aceeai cu structura utmp. STANDARDE Linux. ISTORIC Intrarile Linux utmp nu sunt conforme nici cu v7/BSD, nici cu System V; ele sunt un amestec al celor doua. v7/BSD are mai puine campuri; cel mai important este ca nu are ut_type, care face ca programele native de tip v7/BSD sa afieze (de exemplu) intrari moarte sau de conectare. Mai mult, nu exista un fiier de configurare care sa aloce sloturi pentru sesiuni. BSD face acest lucru deoarece ii lipsesc campurile ut_id. In Linux (ca i in System V), campul ut_id al unei inregistrari nu se va schimba niciodata odata ce a fost definit, ceea ce rezerva acel slot fara a fi nevoie de un fiier de configurare. tergerea campului ut_id poate duce la condiii de competiie de date care sa conduca la intrari utmp corupte i la poteniale gauri de securitate. tergerea campurilor menionate mai sus prin umplerea lor cu octei nuli nu este ceruta de semantica System V, dar face posibila rularea multor programe care presupun semantica BSD i care nu modifica utmp. Linux utilizeaza conveniile BSD pentru coninutul liniilor, aa cum este documentat mai sus. System V nu are campurile ut_host sau ut_addr_v6. NOTE Spre deosebire de alte sisteme, unde jurnalizarea utmp poate fi dezactivata prin eliminarea fiierului, utmp trebuie sa existe intotdeauna pe Linux. Daca dorii sa dezactivai who(1), nu facei ca utmp sa poata fi citit de toata lumea. Formatul fiierului este dependent de maina, astfel incat se recomanda ca acesta sa fie procesat numai pe arhitectura mainii pe care a fost creat. Reinei ca pe platformele biarch, adica pe sistemele care pot rula atat aplicaii pe 32 de bii, cat i pe 64 de bii (x86-64, ppc64, s390x etc.), ut_tv are aceeai dimensiune in modul pe 32 de bii ca i in modul pe 64 de bii. Acelai lucru este valabil i pentru ut_session i ut_time, daca acestea sunt prezente. Acest lucru permite ca fiierele de date i memoria partajata sa fie partajate intre aplicaiile pe 32 i 64 de bii. Acest lucru se realizeaza prin schimbarea tipului lui ut_session in int32_t, iar cel al lui ut_tv intr-o structura cu doua campuri int32_t tv_sec i tv_usec. Deoarece ut_tv poate sa nu fie acelai lucru cu struct timeval, atunci in loc de apelul: gettimeofday((struct timeval *) &ut.ut_tv, NULL); se recomanda urmatoarea metoda de definire a acestui camp: 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; CONSULTAI I 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) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 utmp(5)