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

NAZWA

       credentials - identyfikatory procesu

OPIS

   Identyfikator procesu (PID)
       Każdy  proces  posiada  unikatowy  identyfikator  będący  liczbą  nieujemną, który jest mu przypisywany w
       trakcie tworzenia procesu za pomocą fork(2). Proces może pozyskać swój PID wywołaniem getpid(2). PID jest
       reprezentowany za pomocą typu pid_t (zdefiniowanego w <sys/types.h>).

       PID-y są używane w wielu wywołaniach systemowych, do identyfikacji procesu, którego dotyczy wywołanie np.
       kill(2), ptrace(2), setpriority(2), setpgid(2), setsid(2), sigqueue(3) i waitpid(2).

       PID procesu jest zachowywany przez execve(2).

   Identyfikator procesu macierzystego (PPID)
       Identyfikator procesu macierzystego (ang. parent process ID — PPID) identyfikuje proces,  który  utworzył
       dany  proces  za  pomocą  fork(2).  Proces  może  uzyskać  swój  PPID  wywołaniem  getppid(2).  PPID jest
       reprezentowany za pomocą typu pid_t.

       PPID procesu jest zachowywany przez execve(2).

   Identyfikator grupy procesu oraz identyfikator sesji
       Każdy proces posiada identyfikator sesji oraz identyfikator grupy procesu, oba reprezentowane  za  pomocą
       typu pid_t. Proces może uzyskać swój identyfikator sesji wywołaniem getsid(2), a swój identyfikator grupy
       procesu wywołaniem getpgrp(2).

       Proces  potomny  utworzony  przez fork(2) dziedziczy identyfikator sesji oraz identyfikator grupy procesu
       swojego  procesu  macierzystego.  Identyfikator  sesji  procesu  oraz  identyfikator  grupy  procesu   są
       zachowywane przez execve(2).

       Sesje  i  grupy  procesów są abstrakcjami pomyślanymi jako wsparcie kontroli pracy powłoki. Grupa procesu
       (czasem nazywana „zadaniem” — ang. „job”) jest zbiorem procesów dzielących ten  sam  identyfikator  grupy
       procesu;  powłoka tworzy nową grupę procesu procesowi/procesom użytym do wykonania pojedynczego polecenia
       lub potoku (np. dwa procesy tworzone do wykonania polecenia „ls | wc” są umieszczane w tej  samem  grupie
       procesu). Członkostwo w grupie procesu można ustawić wywołaniem setpgid(2). Proces, którego PID jest taki
       sam jak jego identyfikator grupy procesu jest liderem grupy procesu dla danej grupy.

       Sesja jest zbiorem procesów dzielących ten sam identyfikator sesji. Wszyscy członkowie grupy procesu mają
       również  ten sam identyfikator sesji (tj. wszyscy członkowie grupy procesu zawsze przynależą do tej samem
       sesji, zatem sesje i grupy procesu stanowią ścisłą, dwustopniową hierarchię procesów). Nową sesję  tworzy
       wywołanie  przez  proces setsid(2), co powoduje utworzenie sesji z identyfikatorem sesji takim samym, jak
       PID procesu wywołującego setsid(2). Twórca sesji jest nazywany liderem sesji.

       Wszystkie procesy w sesji dzielą terminal kontrolujący. Termin kontrolujący jest ustanawiany,  gdy  lider
       sesji  otworzy  pierwotnie  terminal (chyba że podano znacznik O_NOCTTY przy wywołaniu open(2)). Terminal
       może być terminalem kontrolującym co najwyżej jednej sesji.

       Maksymalne jedno zadanie w powłoce może być zadaniem pierszoplanowym;  pozostałe  zadania  w  powłoce  są
       zadaniami  tła.  Z  terminala  może  czytać  jedynie  zadanie  pierwszoplanowe; gdy proces w tle spróbuje
       odczytać z terminala, jego  grupa  procesu  otrzymuje  sygnał  SIGTTIN,  zawieszający  zadanie.  Gdy  dla
       terminala  ustawi  się  znacznik TOSTOP (zob. termios(3)), to tylko zadania pierwszoplanowe mogą pisać do
       terminala; zapisy od zadań tła spowodują wygenerowanie sygnału SIGTTOU, zawieszającego zadanie. Gdy użyje
       się klawiszy terminala do wygenerowania sygnału (np. klawisz przerwania, zwykle control-C),  sygnał  jest
       wysyłany do procesów będących zadaniem pierwszoplanowym.

       Istnieje  wiele  wywołań systemowych i funkcji bibliotecznych, które mogą działać na wszystkich członkach
       grupy  procesu,  są  to  m.in  kill(2),   killpg(3),   getpriority(2),   setpriority(2),   ioprio_get(2),
       ioprio_set(2),  waitid(2)  i  waitpid(2).  Zob.  też  opis  operacji  F_GETOWN,  F_GETOWN_EX,  F_SETOWN i
       F_SETOWN_EX w podręczniku fcntl(2).

   Identyfikatory użytkownika i grupy
       Każdy proces ma wiele powiązanych identyfikatorów użytkownika i grupy.  Identyfikatory  te  są  liczbami,
       reprezentowanymi za pomocą typów, odpowiednio, uid_t i gid_t (zdefiniowanych w <sys/types.h>).

       W Linuksie, każdy proces ma następujące identyfikatory użytkownika i grupy:

       •  Rzeczywisty  identyfikator  użytkownika  i rzeczywisty identyfikator grupy. Identyfikatory te służą do
          określenia właściciela procesu.  Procesy  mogą  uzyskać  swój  rzeczywisty  identyfikator  użytkownika
          (grupy) za pomocą getuid(2) (getgid(2)).

       •  Efektywny  identyfikator  użytkownika  i  efektywny  identyfikator grupy. Identyfikatory te są używane
          przez jądro, aby  określić  uprawnienia  jakie  będzie  posiadał  proces,  przy  dostępie  do  zasobów
          dzielonych,  takich  jak  kolejek  komunikatów, pamięci dzielonej lub semaforów. W większości systemów
          uniksowych, te identyfikatory określają również uprawnienia dostępu do plików.  W  Linuksie  służą  do
          tego  jednak,  opisane  niżej,  identyfikatory  systemu  plików.  Proces  może  uzyskać swój efektywny
          identyfikator użytkownika (grupy) za pomocą geteuid(2) (getegid(2)).

       •  Zapisany set-user-ID i zapisany set-group-ID. Identyfikatory te są używane przez programy korzystające
          z ustawiania  identyfikatora  użytkownika  (suid)  lub  grupy  (sgid)  przy  wykonaniu,  do  zapisania
          odpowiadających  identyfikatorów  efektywnych,  ustawianych  przy wykonaniu programu (zob. execve(2)).
          Program suid może nabyć i porzucić przywileje przez przełączanie  swojego  efektywnego  identyfikatora
          użytkownika   pomiędzy  wartościami  jego  rzeczywistego  identyfikatora  użytkownika,  a  wartościami
          zapisanego suid. Przełączanie następuje za pomocą wywołań seteuid(2),  setreuid(2)  lub  setresuid(2).
          Programy  sgid  wykonują  analogiczne  działania  za  pomocą setegid(2), setregid(2) lub setresgid(2).
          Procesy mogą uzyskać swój zapisany suid (zapisany sgid) za pomocą getresuid(2) (getresgid(2)).

       •  Identyfikator użytkownika systemu plików i identyfikator  grupy  systemu  plików  (typowo  linuksowe).
          Identyfikatory  te,  razem  z  opisanymi  poniżej  identyfikatorami  grup  uzupełniających,  służą  do
          określenia uprawnień dostępu do  plików;  więcej  szczegółów  w  podręczniku  path_resolution(7).  Gdy
          efektywny  identyfikator  użytkownika  (grupy)  procesu  ulega  zmianie,  jądro  automatycznie zmienia
          identyfikator użytkownika (grupy) systemu plików na tę samą  wartość.  Identyfikatory  systemu  plików
          mają  zatem  zwykle  te  same  wartości  jak  odpowiadające im identyfikatory efektywne co oznacza, że
          semantyka kontroli uprawnień do plików jest w Linuksie taka sama, jak w innych  systemach  uniksowych.
          Identyfikatory  systemu  plików  można  jednak uczynić różnymi od identyfikator efektywnych, za pomocą
          wywołań setfsuid(2) i setfsgid(2).

       •  Identyfikatory grup uzupełniających  (dodatkowych).  Stanowią  one  identyfikatory  grup  dodatkowych,
          używanych  do  kontroli  uprawnień dostępu do plików i innych wspólnych zasobów. Przed Linuksem 2.6.4,
          proces mógł być członkiem co najwyżej 32  grup  uzupełniających;  od  Linuksa  2.6.4  to  ograniczenie
          zwiększono do 65536 grup uzupełniających. Do uzyskania liczby grup uzupełniających, jakich proces może
          być  członkiem można posłużyć się wywołaniem sysconf(_SC_NGROUPS_MAX). Proces może uzyskać swój zestaw
          identyfikatorów grup uzupełniających za pomocą wywołania getgroups(2).

       Proces potomny utworzony wywołaniem fork(2) dziedziczy kopie identyfikatorów użytkownika i grupy  swojego
       procesu  macierzystego.  Podczas  execve(2) zachowywane są rzeczywiste identyfikatory użytkownika i grupy
       procesu, a także identyfikatory grup  uzupełniających;  natomiast  identyfikatory  efektywne  i  zapisane
       suid/sgid można zmieniać, zgodnie z opisem w execve(2).

       Oprócz  przeznaczenia  opisanego  wyżej,  identyfikatory  użytkownika  procesu są używane również w wielu
       innych sytuacjach:

       •  przy określaniu uprawnień do wysyłania sygnałów (zob. kill(2));

       •  przy określaniu uprawnień do ustawiania parametrów  planisty  związanych  z  procesem  (wartość  nice,
          priorytet  i  zasady planisty czasu rzeczywistego, koligacja procesorów, priorytet wejścia/wyjścia) za
          pomocą     setpriority(2),     sched_setaffinity(2),     sched_setscheduler(2),     sched_setparam(2),
          sched_setattr(2) i ioprio_set(2);

       •  przy sprawdzania limitów zasobów (zob. getrlimit(2));

       •  przy sprawdzaniu limitu liczby wystąpień inotify, jakie może utworzyć proces (zob. inotify(7)).

   Modyfikowanie identyfikatorów użytkownika i grupy procesu
       Zgodnie  z  zasadami  opisanymi  we  właściwych podręcznikach systemowych, proces może użyć następujących
       interfejsów programistycznych w celu modyfikacji swoich identyfikatorów użytkownika i grupy:

       setuid(2) (
              setgid(2))  Modyfikuje rzeczywiste (może również efektywne i  zapisane  suid/sgid)  identyfikatory
              użytkownika (grupy) procesu.

       seteuid(2) (
              setegid(2))  Modyfikuje efektywny identyfikator użytkownika (grupy) procesu.

       setfsuid(2) (
              setfsgid(2))  Modyfikuje identyfikator użytkownika (grupy) systemu plików procesu.

       setreuid(2) (
              setregid(2))   Modyfikuje rzeczywiste i efektywne (może również zapisane suid/sgid) identyfikatory
              użytkownika (grupy) procesu.

       setresuid(2) (
              setresgid(2))  Modyfikuje rzeczywiste, efektywne i zapisane suid/sgid  identyfikatory  użytkownika
              (grupy) procesu.

       setgroups(2)
              Modyfikuje listę grup uzupełniających procesu.

       Wszelkie  zmiany  w identyfikatorach efektywnych użytkownika (grupy) procesu są automatycznie przenoszone
       na identyfikatory użytkownika (grupy) systemu  plików  procesu.  Zmiany  w  identyfikatorach  efektywnych
       użytkownika  (grupy)  procesu  mogą  również wpływać na atrybut procesu „zrzucalności” (ang. „dumpable”),
       zgodnie z opisem w podręczniku prctl(2).

       Zmiany identyfikatorów efektywnych użytkownika (grupy) procesu mogą wpłynąć na jego przywileje, zgodnie z
       opisem w podręczniku capabilities(7).

STANDARDY

       Identyfikatory: procesu, procesu macierzystego, grupy procesu oraz sesji są określone w  normie  POSIX.1.
       Identyfikatory użytkownika i grupy: rzeczywiste, efektywne, zapisane suid/sgid są określone w POSIX.1.

       Identyfikatory użytkownika i grupy systemu plików są rozszerzeniem Linuksa.

UWAGI

       Różne  pola  w  pliku  /proc/pid/status  ukazują opisane wyżej poświadczenia procesu. Więcej informacji w
       podręczniku systemowym proc(5).

       Standard wątków określony przez POSIX wymaga, aby  poświadczenia  były  dzielone  przez  wszystkie  wątki
       procesu.  Na  poziomie  jądra,  Linux  zarządza  jednak  osobnymi poświadczeniami użytkownika i grupy dla
       każdego wątku. Implementacja wątkowania NPTL czyni  pewne  starania  aby  zapewnić,  że  wszelkie  zmiany
       poświadczeń  użytkownika lub grupy (np. wywołania do setuid(2), setresuid(2)) są przenoszone na wszystkie
       wątki POSIX procesu. Więcej szczegółów w podręczniku nptl(7).

ZOBACZ TAKŻE

       bash(1), csh(1), groups(1), id(1), newgrp(1), ps(1), runuser(1),  setpriv(1),  sg(1),  su(1),  access(2),
       execve(2),  faccessat(2),  fork(2),  getgroups(2), getpgrp(2), getpid(2), getppid(2), getsid(2), kill(2),
       setegid(2), seteuid(2), setfsgid(2),  setfsuid(2),  setgid(2),  setgroups(2),  setpgid(2),  setresgid(2),
       setresuid(2),  setsid(2),  setuid(2),  waitpid(2), euidaccess(3), initgroups(3), killpg(3), tcgetpgrp(3),
       tcgetsid(3),   tcsetpgrp(3),   group(5),   passwd(5),    shadow(5),    capabilities(7),    namespaces(7),
       path_resolution(7),    pid_namespaces(7),    pthreads(7),   signal(7),   system_data_types(7),   unix(7),
       user_namespaces(7), sudo(8)

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika są: 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 man-pages 6.8                              2 maja 2024 r.                                   credentials(7)