Provided by: manpages-pl_4.13-4_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]

       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.

       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

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),  logname(1),  lslogins(1),  users(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 5.10 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 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   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.

Linux                                          21 grudnia 2020 r.                                        UTMP(5)