Rechercher une page de manuel
utmp
Langue: pl
Version: 2004-10-31 (openSuse - 09/10/07)
Section: 5 (Format de fichier)
NAZWA
utmp, wtmp - zapisy o logowaniuSK£ADNIA
#include <utmp.h>OPIS
Plik utmp umo¿liwia znalezienie informacji o tym, kto w danej chwili korzysta z systemu. Z systemu mo¿e korzystaæ wiêcej u¿ytkowników, poniewa¿ nie wszystkie programy zapisuj± informacje do utmp.Ostrze¿enie: utmp musi byæ niezapisywalnym plikiem, poniewa¿ wiele programów systemowych (g³upio) polega na jego integralno¶ci. Istnieje ryzyko sfa³szowania logów systemowych i modyfikacji plików systemowych, je¶li utmp bêdzie zapisywalny dla u¿ytkowników.
Plik ten jest sekwencj± wpisów o postaci nastêpuj±cej struktury zdeklarowanej w pliku nag³ówkowym (nale¿y zwróciæ uwagê, ¿e jest to jedna z wielu definicji; szczegó³y zale¿± od wersji 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; /* kod przerwania procesu. */ short int e_exit; /* kod zakoñczenia procesu. */ }; struct utmp { short ut_type; /* rodzaj logowania */ pid_t ut_pid; /* pid procesu loguj±cego */ char ut_line[UT_LINESIZE]; /* nazwa urz±dzenia tty - "/dev/" */ char ut_id[4]; /* id init lub skrót nazwy tty */ char ut_user[UT_NAMESIZE]; /* nazwa u¿ytkownika */ char ut_host[UT_HOSTSIZE]; /* nazwa hosta dla zdalnego logowania */ struct exit_status ut_exit; /* kod zakoñczenia procesu oznaczonego jako DEAD_PROCESS */ long ut_session; /* ID sesji, s³u¿y do okienkowania */ struct timeval ut_tv; /* czas utworzenia wpisu */ int32_t ut_addr_v6[4]; /* adres IP zdalnego hosta */ char __unused[20]; /* zarezerwowane na przysz³o¶æ */ }; /* Dla zgodno¶ci w wcze¶niejszymi wersjami */ #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]
Pierwsze wpisy, jakie kiedykolwiek utworzono, pochodz± od init(8) przetwarzaj±cego inittab(5). Zanim jakikolwiek wpis zostanie utworzony, init(8) czy¶ci utmp przez wpisanie DEAD_PROCESS do ut_type, wype³niaj±c ut_user, ut_host i ut_time bajtami NUL we wszystkich rekordach, w których ut_type nie jest ustawione na DEAD_PROCESS lub RUN_LVL i dla których nie istnieje proces o PID równym ut_pid. Je¶li nie znajdzie siê ¿aden pusty rekord z wymaganym ut_id, init tworzy nowy. Wpisuje do niego ut_id z inittab, ut_pid i ut_time nadaje bie¿±ce warto¶ci, a ut_type nadaje warto¶æ INIT_PROCESS.
getty(8) lokalizuje wpis po numerze PID, zmienia ut_type na LOGIN_PROCESS, zmienia ut_time, ustawia ut_line i czeka na zestawienie po³±czenia. Po autentykacji u¿ytkownika, login(8) zmienia ut_type na USER_PROCESS, zmienia ut_time i nadaje warto¶ci ut_host i ut_addr. Zale¿nie od wersji getty(8) i login(8), rekordy mog± byæ wyszukiwane na podstawie ut_line zamiast preferowanego ut_pid.
Gdy init(8) stwierdzi, ¿e proces zakoñczy³ pracê, znajduje on jego wpis utmp wed³ug ut_pid, ustawia ut_type na DEAD_PROCESS i wype³nia ut_user, ut_host oraz ut_time bajtami NUL.
xterm(1) i inne emulatory terminali tworz± bezpo¶rednio rekord USER_PROCESS i generuj± ut_id, u¿ywaj±c ostatnich dwóch liter /dev/ttyp%c lub u¿ywaj±c p%d dla /dev/pts/%d. Je¶li znajd± dla tego id wpis DEAD_PROCESS, utylizuj± go, w innym wypadku tworz± nowy wpis. Je¶li mog±, zaznaczaj± go jako DEAD_PROCESS podczas koñczenia pracy i jest zalecane, by zerowa³y równie¿ ut_line, ut_time, ut_user oraz ut_host.
xdm(1) nie powinien tworzyæ rekordu w utmp, poniewa¿ nie ma przydzielonego terminala. Pozwalanie mu na utworzenie takowego spowoduje b³êdy takie jak 'finger: cannot stat /dev/machine.dom'. Jednak powinien on tworzyæ wpisy wtmp, tak jak to czyni ftpd(8).
telnetd(8) ustawia wpis LOGIN_PROCESS i zostawia po prostu resztê programowi login(8). Po zakoñczeniu sesji telnetu, telnetd(8) czy¶ci utmp w opisany sposób.
Plik wtmp ¶ledzi wszystkie zalogowania i wylogowania. Jego format jest taki jak utmp, poza tym, ¿e pusta nazwa u¿ytkownika wskazuje na jego wylogowanie z odpowiedniego terminala. Co wiêcej, nazwa terminala ~ w po³±czeniu z nazw± u¿ytkownika shutdown czy reboot wskazuje na zamkniêcie lub restart systemu, a para nazw terminali |/} loguje nowy/stary czas systemowy w przypadku jego zmiany za pomoc± date(1). wtmp jest obs³ugiwane przez login(1), init(1) oraz niektóre wersje getty(1). ¯aden z tych programów nie tworzy tego pliku, wiêc je¶li zostanie on usuniêty, zapisy do niego zostan± wy³±czone.
PLIKI
/var/run/utmp/var/log/wtmp
ZGODNE Z
Wpisy utmp Linuksa nie s± zgodne ani z v7/BSD ani z SYSV: S± one mieszanin± tych dwóch. v7/BSD ma mniej pól; najwa¿niejszym problemem jest brak ut_type, który powoduje ¿e natywne programy v7/BSD wy¶wietlaj± (na przyk³ad) wpisy dead lub login. Co wiêcej, nie ma pliku konfiguracyjnego, który przydziela rekordy sesjom. BSD tak robi, poniewa¿ nie ma on pól ut_id. W Linuksie (tak jak w SYSV), pole ut_id rekordu nigdy nie ulega zmianie, kiedy raz zostanie mu nadana warto¶æ, co rezerwuje ten rekord bez potrzeby pliku konfiguracyjnego. Czyszczenie ut_id mo¿e prowadziæ do sytuacji wy¶cigu, których skutkiem bêd± uszkodzone wpisy w utmp i potencjalne dziury w bezpieczeñstwie. Czyszczenie wymienionych wy¿ej pól przez wype³nianie ich bajtami NUL nie jest wymagane przy semantyce SYSV, lecz pozwala na uruchamianie wielu programów, które zak³adaj± semantykê BSD a nie modyfikuj± utmp. Linux u¿ywa konwencji BSD dla zawarto¶ci pola line, jak opisano wy¿ej.SYSV u¿ywa pola type tylko do ich zaznaczania i logowuje komunikaty informacyjne, takie jak np. "new time" w polu line. UT_UNKNOWN wydaje siê byæ wymy¶lone w Linuksie. SYSV nie ma pól ut_host czy ut_addr_v6.
W przeciwieñstwie do wielu innych systemów, gdzie utmp mo¿na wy³±czyæ przez usuniêcie tego pliku, w Linuksie utmp zawsze musi istnieæ. W celu wy³±czenia who(1) nale¿y jedynie uniemo¿liwiæ odczyt utmp dla ca³ego ¶wiata.
Trzeba zwróciæ uwagê, ¿e struktura utmp z libc5 uleg³a zmianie w libc6. Z tego powodu binaria korzystaj±ce ze starej struktury libc5 bêd± uszkadzaæ /var/run/utmp i/lub /var/log/wtmp. System Debian zawiera po³atan± wersjê libc5, która korzysta z nowego formatu utmp. Natomiast wci±¿ istnieje problem z wtmp, gdy¿ dostêp do tego pliku odbywa siê w libc5 bezpo¶rednio.
OGRANICZENIA
Format pliku jest zale¿ny od maszyny, wiêc jest zalecane, by plik by³ przetwarzany tylko na maszynie na której zosta³ utworzony.Proszê zauwa¿yæ, ¿e na platformach, które mog± uruchamiaæ zarówno 32-bitowe, jaki 64-bitowe aplikacje (x86-64, ppc64, s390x itd.), rozmiary pól w strukturze utmp musz± byæ takie same w trybie 32-bitowym, co w 64-bitowym, Osi±ga siê to przez zmianê typu ut_session na int32_t, ut_tv na strukturê z dwoma polami typu int32_t: tv_sec i tv_usec (Dlatego, aby j± wype³niæ, nale¿y najpierw pobraæ czas do rzeczywistej struktury timeval, a nastêpnie skopiowaæ oba pola do ut_tv.)
B£ÊDY
Ta strona podrêcznika zosta³a oparta o stronê z wersji libc5, rzeczy mog± obecnie dzia³aæ inaczej.ZOBACZ TAK¯E
ac(1), date(1), last(1), login(1), who(1), getutent(3), updwtmp(3), init(8)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre