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  ⟨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⟩.