Provided by: manpages-pl_4.27.0-1_all 

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
Tłumaczenie niniejszej strony podręcznika: 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.9.1 2 maja 2024 r. credentials(7)