Provided by:
manpages-pl_20060617-3_all 
NAZWA
utmp, wtmp - zapisy o logowaniu
SK/LADNIA
#include <utmp.h>
OPIS
Plik utmp umoliwia znalezienie informacji o tym, kto w danej chwili
korzysta z systemu. Z systemu moe korzysta wicej uytkownikow, poniewa
nie wszystkie programy zapisuj informacje do utmp.
Ostrzeenie: utmp musi by niezapisywalnym plikiem, poniewa wiele
programow systemowych (glupio) polega na jego integralnoci. Istnieje
ryzyko sfalszowania logow systemowych i modyfikacji plikow systemowych,
jeli utmp bdzie zapisywalny dla uytkownikow.
Plik ten jest sekwencj wpisow o postaci nastpujcej struktury
zdeklarowanej w pliku naglowkowym (naley zwroci uwag, e jest to jedna z
wielu definicji; szczegoly 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 zakoczenia procesu. */
};
struct utmp {
short ut_type; /* rodzaj logowania */
pid_t ut_pid; /* PID procesu logujcego */
char ut_line[UT_LINESIZE]; /* nazwa urzdzenia tty - "/dev/" */
char ut_id[4]; /* id init lub skrot nazwy tty */
char ut_user[UT_NAMESIZE]; /* nazwa uytkownika */
char ut_host[UT_HOSTSIZE]; /* nazwa hosta dla zdalnego logowania */
struct exit_status ut_exit; /* kod zakoczenia procesu
oznaczonego jako DEAD_PROCESS */
/* Pola ut_session i ut_tv musz mie ten sam rozmiar, gdy s
kompilowane 32- i 64-bitowo.Pozwala to dzielenie plikow danych
pamici wspoldzielonej pomidzy aplikacjami 32- i 64-bitowymi*/
#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
int32_t ut_session; /* ID sesji, sluy do okienkowania */
struct {
int32_t tv_sec; /* Sekundy */
int32_t tv_usec; /* Mikrosekundy */
} ut_tv; /* Czas utworzenia wpisu */
#else
long int ut_session; /* ID sesji, sluy do okienkowania */
struct timeval ut_tv; /* Czas utworzenia wpisu */
#endif
int32_t ut_addr_v6[4]; /* Adres IP zdalnego komputera */
char __unused[20]; /* Zarezerwowane na przyszlo */
};
/* Dla zgodnoci w wczeniejszymi 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]
Struktura ta podaje nazw pliku specjalnego skojarzonego z terminalem
uytkownika, nazw uytkownika i czas zalogowania w postaci time(2). Pola
tekstowe s zakoczone przez '\0', jeeli s krotsze ni rozmiar pola.
Pierwsze wpisy, jakie kiedykolwiek utworzono, pochodz od init(8)
przetwarzajcego inittab(5). Zanim jakikolwiek wpis zostanie utworzony,
init(8) czyci utmp przez wpisanie DEAD_PROCESS do ut_type, wypelniajc
ut_user, ut_host i ut_time bajtami null we wszystkich rekordach, w
ktorych ut_type nie jest ustawione na DEAD_PROCESS lub RUN_LVL i dla
ktorych nie istnieje proces o PID rownym ut_pid. Jeli 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 biece wartoci, 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
polczenia. Po autentykacji uytkownika, login(8) zmienia ut_type na
USER_PROCESS, zmienia ut_time i nadaje wartoci ut_host i ut_addr.
Zalenie 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 zakoczyl prac, to znajduje jego wpis
utmp wedlug ut_pid, ustawia ut_type na DEAD_PROCESS i wypelnia ut_user,
ut_host oraz ut_time bajtami null.
xterm(1) i inne emulatory terminali tworz bezporednio rekord
USER_PROCESS i generuj ut_id, uywajc ostatnich dwoch liter /dev/ttyp%c
lub uywajc p%d dla /dev/pts/%d. Jeli znajd dla tego id wpis
DEAD_PROCESS, utylizuj go, w innym wypadku tworz nowy wpis. Jeli mog,
zaznaczaj go jako DEAD_PROCESS podczas koczenia pracy i jest zalecane,
by zerowaly rownie 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 bldy 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 zakoczeniu sesji telnetu, telnetd(8) czyci utmp
w opisany sposob.
Plik wtmp ledzi wszystkie zalogowania i wylogowania. Jego format jest
taki jak utmp, poza tym, e pusta nazwa uytkownika wskazuje na jego
wylogowanie z odpowiedniego terminala. Co wicej, nazwa terminala ~ w
polczeniu z nazw uytkownika shutdown czy reboot wskazuje na zamknicie
lub restart systemu, a para nazw terminali |/} loguje nowy/stary czas
systemowy w przypadku jego zmiany za pomoc date(1). wtmp jest
obslugiwane przez login(1), init(1) oraz niektore wersje getty(1). aden
z tych programow nie tworzy tego pliku, wic jeli zostanie on usunity,
zapisy do niego zostan wylczone.
Prosz zauway, e na platformach, ktore mog uruchamia zarowno 32-bitowe,
jaki 64-bitowe aplikacje (x86-64, ppc64, s390x itd.), rozmiary pola
ut_tvmusi by taki same w trybie 32-bitowym, co w 64-bitowym. Podobnie
jest z polami ut_session i ut_time, jeli s obecne. Pozwala to na
dzielenie plikow danych i pamici wspoldzielonej pomidzy aplikacjami 32-
i 64-bitowymi. Poniewa ut_tv moe nie by takie samo jak struct timeval,
to zamiast wywolywania:
gettimeofday((struct timeval *) &ut.ut_tv, NULL);
zaleca si uywanie poniszej metody do ustawiania wartoci w tym polu:
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;
PLIKI
/var/run/utmp
/var/log/wtmp
ZGODNE Z
Wpisy utmp Linuksa nie s zgodne ani z v7/BSD ani z Systemem V, ale s
mieszanin tych dwoch. v7/BSD ma mniej pol; najwaniejszym problemem jest
brak ut_type, ktory powoduje e natywne programy v7/BSD wywietlaj (na
przyklad) wpisy dead lub login. Co wicej, nie ma pliku
konfiguracyjnego, ktory przydziela rekordy sesjom. BSD tak robi,
poniewa nie ma on pol ut_id. W Linuksie (tak jak w Systemie V), 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 moe prowadzi do sytuacji wycigu, ktorych skutkiem bd
uszkodzone wpisy w utmp i potencjalne dziury w bezpieczestwie.
Czyszczenie wymienionych wyej pol przez wypelnianie ich bajtami null
nie jest wymagane przy semantyce Systemu V, lecz pozwala na
uruchamianie wielu programow, ktore zakladaj semantyk BSD a nie
modyfikuj utmp. Linux uywa konwencji BSD dla zawartoci pola line, jak
opisano wyej.
System V uywa pola type tylko do ich zaznaczania i loguje komunikaty
informacyjne, takie jak np. "new time" w polu line. UT_UNKNOWN wydaje
si by wymylone w Linuksie. System V nie ma pol ut_host czy ut_addr_v6.
W przeciwiestwie do wielu innych systemow, gdzie utmp mona wylczy przez
usunicie tego pliku, w Linuksie utmp zawsze musi istnie. W celu
wylczenia who(1) naley jedynie uniemoliwi odczyt utmp dla calego wiata.
Trzeba zwroci uwag, e struktura utmp z libc5 ulegla zmianie w libc6. Z
tego powodu binaria korzystajce ze starej struktury libc5 bd uszkadza
/var/run/utmp i/lub /var/log/wtmp. System Debian zawiera polatan wersj
libc5, ktora korzysta z nowego formatu utmp. Natomiast wci istnieje
problem z wtmp, gdy dostp do tego pliku odbywa si w libc5 bezporednio.
OGRANICZENIA
Format pliku jest zaleny od maszyny, wic jest zalecane, by plik byl
przetwarzany tylko na maszynie na ktorej zostal utworzony.
Prosz zauway, e na platformach, ktore mog uruchamia zarowno 32-bitowe,
jaki 64-bitowe aplikacje (x86-64, ppc64, s390x itd.), rozmiary pol w
strukturze utmp musz by takie same w trybie 32-bitowym, co w
64-bitowym, Osiga 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 wypelni, naley najpierw pobra czas do rzeczywistej struktury timeval,
a nastpnie skopiowa oba pola do ut_tv.)
B/LDY
Ta strona podrcznika zostala oparta na stronie z wersji libc5, rzeczy
mog obecnie dziala inaczej.
ZOBACZ TAKE
ac(1), date(1), last(1), login(1), who(1), getutent(3), updwtmp(3),
init(8)
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.
Formaty plikow 2004-10-31 UTMP(5)