Provided by: manpages-pl_4.18.1-1_all bug

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 /* Record does not contain valid info
                                      (formerly known as UT_UNKNOWN on Linux) */
           #define RUN_LVL       1 /* Change in system run-level (see
                                      init(1)) */
           #define BOOT_TIME     2 /* Time of system boot (in ut_tv) */
           #define NEW_TIME      3 /* Time after system clock change
                                      (in ut_tv) */
           #define OLD_TIME      4 /* Time before system clock change
                                      (in ut_tv) */
           #define INIT_PROCESS  5 /* Process spawned by init(1) */
           #define LOGIN_PROCESS 6 /* Session leader process for user login */
           #define USER_PROCESS  7 /* Normal process */
           #define DEAD_PROCESS  8 /* Terminated process */
           #define ACCOUNTING    9 /* Not implemented */

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

           struct exit_status {              /* Type for ut_exit, below */
               short e_termination;          /* Process termination status */
               short e_exit;                 /* Process exit status */
           };

           struct utmp {
               short   ut_type;              /* Type of record */
               pid_t   ut_pid;               /* PID of login process */
               char    ut_line[UT_LINESIZE]; /* Device name of tty - "/dev/" */
               char    ut_id[4];             /* Terminal name suffix,
                                                or inittab(5) ID */
               char    ut_user[UT_NAMESIZE]; /* Username */
               char    ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or
                                                kernel version for run-level
                                                messages */
               struct  exit_status ut_exit;  /* Exit status of a process
                                                marked as DEAD_PROCESS; not
                                                used by Linux init(1) */
               /* The ut_session and ut_tv fields must be the same size when
                  compiled 32- and 64-bit.  This allows data files and shared
                  memory to be shared between 32- and 64-bit applications. */
           #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32
               int32_t ut_session;           /* Session ID (getsid(2)),
                                                used for windowing */
               struct {
                   int32_t tv_sec;           /* Seconds */
                   int32_t tv_usec;          /* Microseconds */
               } ut_tv;                      /* Time entry was made */
           #else
                long   ut_session;           /* Session ID */
                struct timeval ut_tv;        /* Time entry was made */
           #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]

       This structure gives the name of the special file associated with the user's terminal, the
       user's login name, and the time of login in  the  form  of  time(2).   String  fields  are
       terminated by a null byte ('\0')  if they are shorter than the size of the field.

       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.

       When  init(1)   finds that a process has exited, it locates its utmp entry by ut_pid, sets
       ut_type to DEAD_PROCESS, and clears ut_user, ut_host, and ut_time with null bytes.

       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.

       The wtmp file records all logins and logouts.  Its format is exactly like utmp except that
       a null username indicates a logout on the associated terminal.  Furthermore, the  terminal
       name ~ with username shutdown or reboot indicates a system shutdown or reboot and the pair
       of terminal names |/} logs the old/new system time when  date(1)   changes  it.   wtmp  is
       maintained  by  login(1),  init(1),  and some versions of getty(8)  (e.g., mingetty(8)  or
       agetty(8)).  None of these programs creates the file, so if it is removed,  record-keeping
       is turned off.

PLIKI

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

STANDARDY

       POSIX.1  does not specify a utmp structure, but rather one named utmpx (as part of the XSI
       extension), with specifications for the fields ut_type, ut_pid, ut_line,  ut_id,  ut_user,
       and ut_tv.  POSIX.1 does not specify the lengths of the ut_line and ut_user fields.

       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),   logname(1),   lslogins(1),   users(1),
       utmpdump(1), who(1), getutent(3), getutmp(3), login(3), logout(3), logwtmp(3), updwtmp(3)

TŁUMACZENIE

       Autorami   polskiego   tłumaczenia   niniejszej   strony  podręcznika  są:  Przemek  Borys
       <pborys@dione.ids.pl>,   Robert    Luberda    <robert@debian.org>    i    Michał    Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.