wtmp

UTMP(5)                 PodrÄcznik programisty Linuksa                 UTMP(5)



NAZWA
       utmp, wtmp - zapisy o logowaniu

SKÅ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 pliku utmp.

       Ostrzeżenie: utmp nie może mieÄ ustawionego prawa do zapisywania dla
       wszystkich  użytkowników, 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
       modyfikowalny przez użytkowników innych niż wÅaÅciciel tego pliku i
       użytkownicy należÄcy do grupy, do której należy wÅaÅciciel pliku.

       Plik jest sekwencjÄ wpisów, z których każdy ma postaÄ nastÄpujÄcej
       struktury utmpzdeklarowanej w pliku nagÅówkowym <utmp.h> (należy
       zwróciÄ uwagÄ, że jest to jedna z wielu definicji; szczegóÅy zależÄ
       od wersji libc):

           /* WartoÅci pola ut_field poniżej */

           #define EMPTY         0 /* Rekord nie zawiera poprawnej informacji
                                      (poprzednio znany jako UT_UNKNOWN pod Linuksem) */
           #define RUN_LVL       1 /* Zmiana systemowych poziomów uruchomieniowych
                                      patrz init(8)) */
           #define BOOT_TIME     2 /* Czas uruchomienia systemu (w ut_tv) */
           #define NEW_TIME      3 /* Czas po zmianie zegara systemowego
                                      (w ut_tv) */
           #define OLD_TIME      4 /* Czas przed zmianÄ zegara systemowego
                                      (w ut_tv) */
           #define INIT_PROCESS  5 /* Proces uruchomiony przez init(8) */
           #define LOGIN_PROCESS 6 /* Lider sesji procesów logowania użytkownika */
           #define USER_PROCESS  7 /* ZwykÅy proces */
           #define DEAD_PROCESS  8 /* Proces zakoÅczony */
           #define ACCOUNTING    9 /* Niezaimplementowane */

           #define UT_LINESIZE      32
           #define UT_NAMESIZE      32
           #define UT_HOSTSIZE     256

           struct exit_status {              /* Typ dla ut_exit, patrz poniżej */
               short int e_termination;      /* Kod przerwania procesu */
               short int e_exit;             /* Kod wyjÅcia procesu */
           };

           struct utmp {
               short   ut_type;              /* Typ recordu */
               pid_t   ut_pid;               /* ID procesu logowania */
               char    ut_line[UT_LINESIZE]; /* Nazwa urzÄdzenie terminala - "/dev/" */
               char    ut_id[4];             /* Przyrostek nazwy terminala,
                                                lub ID linii inittab(5) */
               char    ut_user[UT_NAMESIZE]; /* Nazwa użytkownika */
               char    ut_host[UT_HOSTSIZE]; /* Nazwa komputera dla zdalnego logowania lub
                                                wersja jÄdra dla komunikatów o zmianach
                                                systemowych poziomów uruchomieniowych */
               struct  exit_status ut_exit;  /* Kod zakoÅczenia procesu oznaczonego
                                                jako DEAD_PROCESS; nieużywane
                                                przez init(1) pod Linuksem */
               /* Pola ut_session i ut_tv  muszÄ mieÄ ten sam rozmiar w Årodowiskach
                  32- i 64-bitowych. Pozwala to na wspóÅdzielenie plików i pamiÄci dzielone
                  pomiÄdzy aplikacjami 32- i 64-bitowymi */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
               int32_t ut_session;           /* ID sesji (getsid(2)),
                                                używane przez GUI */
               struct {
                   int32_t tv_sec;           /* Sekundy */
                   int32_t tv_usec;          /* Mikrosekundy */
               } ut_tv;                      /* Czas utworzenia wpisu */
           #else
                long   ut_session;           /* ID sesji  */
                struct timeval ut_tv;        /* Czas utworzenia wpisu */
           #endif

               int32_t ut_addr_v6[4];        /* Adres internetowy zdalnego
                                                komputera; adres IPv4 używa
                                                tylko ut_addr_v6[0] */
               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]

       Struktura ta podaje nazwÄ pliku specjalnego skojarzonego z terminalem
       użytkownika, nazwÄ użytkownika i czas zalogowania w postaci time(2).
       Pola tekstowe sÄ zakoÅczone przez bajt NULL ("\0"), jeżeli sÄ krótsze
       niż rozmiar pola.

       Pierwsze wpisy, jakie kiedykolwiek utworzono, pochodzÄ od init(1)
       przetwarzajÄcego inittab(5). Zanim jakikolwiek wpis zostanie utworzony,
       init(1) czyÅci utmp przez wpisanie DEAD_PROCESS do ut_type, wypeÅniajÄc
       ut_user, ut_host i ut_time bajtami NULL 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(1) 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.

       mingetty(8) (lub agetty(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(1) zmienia
       ut_type na USER_PROCESS, zmienia ut_time i nadaje wartoÅci ut_host i
       ut_addr. Zależnie od wersji mingetty(8) (lub agetty(8)) i login(8),
       rekordy mogÄ byÄ wyszukiwane na podstawie ut_line zamiast preferowanego
       ut_pid.

       Gdy init(1) stwierdzi, że proces zakoÅczyÅ pracÄ, to znajduje jego
       wpis utmp wedÅug ut_pid, ustawia ut_type na DEAD_PROCESS i wypeÅnia
       ut_user, ut_host oraz ut_time bajtami NULL.

       xterm(1) i inne emulatory terminali tworzÄ bezpoÅrednio rekord
       USER_PROCESS i generujÄ ut_id, używajÄc koÅcowej czÄÅci nazwy
       terminala (czyli znaków wystÄpujÄcych po /dev/[pt]ty). JeÅli znajdÄ
       dla tego ID terminala 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.

       telnetd(8) ustawia wpis LOGIN_PROCESS i zostawia resztÄ programowi
       login(1). 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 |/} zapisuje
       stary i nowy 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) (np. mingetty(8) lub agetty(8)). Żaden z tych programów nie
       tworzy tego pliku, wiÄc jeÅli zostanie usuniÄty, zapisy do niego
       zostanÄ wyÅÄczone.

PLIKI
       /var/run/utmp
       /var/log/wtmp

ZGODNE Z
       POSIX.1 nie definiuje struktury utmp, ale ma utmpx z definicjami pól
       ut_type, ut_pid, ut_line, ut_id, ut_user, and ut_tv. POSIX.1 nie
       okreÅla dÅugoÅci pól ut_line i ut_user.

       Pod Linuksem struktura utmpx jest zdefiniowana tak samo jak struktura
       utmp.

   Porównanie z historycznymi systemami
       Wpisy utmp Linuksa nie sÄ zgodne ani z v7/BSD ani z Systemem V, ale sÄ
       mieszaninÄ tych dwóch.

       v7/BSD zawiera 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_PROCESS lub LOGIN_PROCESS. Co wiÄcej, nie ma pliku
       konfiguracyjnego, który przydziela rekordy sesjom. BSD tak robi z
       powodu braku pola 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 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 NULL nie jest wymagane przy
       semantyce Systemu V, 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.

       System V nie ma pól ut_host ani ut_addr_v6.

UWAGI
       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.

       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.),
       rozmiar pola ut_tv musi byÄ taki sam w trybie 32-bitowym, co w
       64-bitowym. Podobnie jest z polami ut_session i ut_time, jeÅli sÄ
       obecne. Pozwala to na dzielenie plików danych i pamiÄci
       wspóÅdzielonej pomiÄdzy aplikacjami 32- i 64-bitowymi. OsiÄgniÄto to
       zmieniajÄc typ ut_session na int32_t, a typ ut_tv na strukturÄ
       zawierajÄcÄ dwa pola o typie int32_t: tv_sec and tv_usec. Ponieważ
       ut_tv może nie byÄ takie samo jak struct timeval, to zamiast
       wywoÅywania:

           gettimeofday((struct timeval *) &ut.ut_tv, NULL);

       zaleca siÄ używanie poniższej metody do ustawiania wartoÅci 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;

ZOBACZ TAKŻE
       ac(1), date(1), init(1), last(1), login(1), lslogins(1), utmpdump(1),
       who(1), getutent(3), getutmp(3), login(3), logout(3), logwtmp(3),
       updwtmp(3)

O STRONIE
       Angielska wersja tej strony pochodzi z wydania 4.05 projektu Linux
       man-pages. Opis projektu, informacje dotyczÄce zgÅaszania bÅÄdów, oraz
       najnowszÄ wersjÄ oryginaÅu można znaleÅºÄ pod adresem
       https://www.kernel.org/doc/man-pages/.

TÅUMACZENIE
       Autorami polskiego tÅumaczenia niniejszej strony podrÄcznika man sÄ:
       Przemek Borys (PTM) <pborys@dione.ids.pl>, Robert Luberda
       <robert@debian.org> i MichaÅ KuÅach <michal.kulach@gmail.com>.

       Polskie tÅumaczenie jest czÄÅciÄ projektu manpages-pl; uwagi, pomoc,
       zgÅaszanie bÅÄdów na stronie http://sourceforge.net/projects/manpages-
       pl/. Jest zgodne z wersjÄ  4.05 oryginaÅu.



Linux                             2016-03-15                           UTMP(5)