credentials(7) Miscellaneous Information Manual credentials(7) NAZWA credentials - identyfikatory procesu OPIS Identyfikator procesu (PID) Kazdy proces posiada unikatowy identyfikator bedacy liczba nieujemna, ktory jest mu przypisywany w trakcie tworzenia procesu za pomoca fork(2). Proces moze pozyskac swoj PID wywolaniem getpid(2). PID jest reprezentowany za pomoca typu pid_t (zdefiniowanego w ). PID-y sa uzywane w wielu wywolaniach systemowych, do identyfikacji procesu, ktorego dotyczy wywolanie 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, ktory utworzyl dany proces za pomoca fork(2). Proces moze uzyskac swoj PPID wywolaniem getppid(2). PPID jest reprezentowany za pomoca typu pid_t. PPID procesu jest zachowywany przez execve(2). Identyfikator grupy procesu oraz identyfikator sesji Kazdy proces posiada identyfikator sesji oraz identyfikator grupy procesu, oba reprezentowane za pomoca typu pid_t. Proces moze uzyskac swoj identyfikator sesji wywolaniem getsid(2), a swoj identyfikator grupy procesu wywolaniem 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 sa zachowywane przez execve(2). Sesje i grupy procesow sa abstrakcjami pomyslanymi jako wsparcie kontroli pracy powloki. Grupa procesu (czasem nazywana ,,zadaniem" -- ang. ,,job") jest zbiorem procesow dzielacych ten sam identyfikator grupy procesu; powloka tworzy nowa grupe procesu procesowi/procesom uzytym do wykonania pojedynczego polecenia lub potoku (np. dwa procesy tworzone do wykonania polecenia ,,ls | wc" sa umieszczane w tej samem grupie procesu). Czlonkostwo w grupie procesu mozna ustawic wywolaniem setpgid(2). Proces, ktorego PID jest taki sam jak jego identyfikator grupy procesu jest liderem grupy procesu dla danej grupy. Sesja jest zbiorem procesow dzielacych ten sam identyfikator sesji. Wszyscy czlonkowie grupy procesu maja rowniez ten sam identyfikator sesji (tj. wszyscy czlonkowie grupy procesu zawsze przynaleza do tej samem sesji, zatem sesje i grupy procesu stanowia scisla, dwustopniowa hierarchie procesow). Nowa sesje tworzy wywolanie przez proces setsid(2), co powoduje utworzenie sesji z identyfikatorem sesji takim samym, jak PID procesu wywolujacego setsid(2). Tworca sesji jest nazywany liderem sesji. Wszystkie procesy w sesji dziela terminal kontrolujacy. Termin kontrolujacy jest ustanawiany, gdy lider sesji otworzy pierwotnie terminal (chyba ze podano znacznik O_NOCTTY przy wywolaniu open(2)). Terminal moze byc terminalem kontrolujacym co najwyzej jednej sesji. Maksymalne jedno zadanie w powloce moze byc zadaniem pierszoplanowym; pozostale zadania w powloce sa zadaniami tla. Z terminala moze czytac jedynie zadanie pierwszoplanowe; gdy proces w tle sprobuje odczytac z terminala, jego grupa procesu otrzymuje sygnal SIGTTIN, zawieszajacy zadanie. Gdy dla terminala ustawi sie znacznik TOSTOP (zob. termios(3)), to tylko zadania pierwszoplanowe moga pisac do terminala; zapisy od zadan tla spowoduja wygenerowanie sygnalu SIGTTOU, zawieszajacego zadanie. Gdy uzyje sie klawiszy terminala do wygenerowania sygnalu (np. klawisz przerwania, zwykle control-C), sygnal jest wysylany do procesow bedacych zadaniem pierwszoplanowym. Istnieje wiele wywolan systemowych i funkcji bibliotecznych, ktore moga dzialac na wszystkich czlonkach grupy procesu, sa to m.in kill(2), killpg(3), getpriority(2), setpriority(2), ioprio_get(2), ioprio_set(2), waitid(2) i waitpid(2). Zob. tez opis operacji F_GETOWN, F_GETOWN_EX, F_SETOWN i F_SETOWN_EX w podreczniku fcntl(2). Identyfikatory uzytkownika i grupy Kazdy proces ma wiele powiazanych identyfikatorow uzytkownika i grupy. Identyfikatory te sa liczbami, reprezentowanymi za pomoca typow, odpowiednio, uid_t i gid_t (zdefiniowanych w ). W Linuksie, kazdy proces ma nastepujace identyfikatory uzytkownika i grupy: o Rzeczywisty identyfikator uzytkownika i rzeczywisty identyfikator grupy. Identyfikatory te sluza do okreslenia wlasciciela procesu. Procesy moga uzyskac swoj rzeczywisty identyfikator uzytkownika (grupy) za pomoca getuid(2) (getgid(2)). o Efektywny identyfikator uzytkownika i efektywny identyfikator grupy. Identyfikatory te sa uzywane przez jadro, aby okreslic uprawnienia jakie bedzie posiadal proces, przy dostepie do zasobow dzielonych, takich jak kolejek komunikatow, pamieci dzielonej lub semaforow. W wiekszosci systemow uniksowych, te identyfikatory okreslaja rowniez uprawnienia dostepu do plikow. W Linuksie sluza do tego jednak, opisane nizej, identyfikatory systemu plikow. Proces moze uzyskac swoj efektywny identyfikator uzytkownika (grupy) za pomoca geteuid(2) (getegid(2)). o Zapisany set-user-ID i zapisany set-group-ID. Identyfikatory te sa uzywane przez programy korzystajace z ustawiania identyfikatora uzytkownika (suid) lub grupy (sgid) przy wykonaniu, do zapisania odpowiadajacych identyfikatorow efektywnych, ustawianych przy wykonaniu programu (zob. execve(2)). Program suid moze nabyc i porzucic przywileje przez przelaczanie swojego efektywnego identyfikatora uzytkownika pomiedzy wartosciami jego rzeczywistego identyfikatora uzytkownika, a wartosciami zapisanego suid. Przelaczanie nastepuje za pomoca wywolan seteuid(2), setreuid(2) lub setresuid(2). Programy sgid wykonuja analogiczne dzialania za pomoca setegid(2), setregid(2) lub setresgid(2). Procesy moga uzyskac swoj zapisany suid (zapisany sgid) za pomoca getresuid(2) (getresgid(2)). o Identyfikator uzytkownika systemu plikow i identyfikator grupy systemu plikow (typowo linuksowe). Identyfikatory te, razem z opisanymi ponizej identyfikatorami grup uzupelniajacych, sluza do okreslenia uprawnien dostepu do plikow; wiecej szczegolow w podreczniku path_resolution(7). Gdy efektywny identyfikator uzytkownika (grupy) procesu ulega zmianie, jadro automatycznie zmienia identyfikator uzytkownika (grupy) systemu plikow na te sama wartosc. Identyfikatory systemu plikow maja zatem zwykle te same wartosci jak odpowiadajace im identyfikatory efektywne co oznacza, ze semantyka kontroli uprawnien do plikow jest w Linuksie taka sama, jak w innych systemach uniksowych. Identyfikatory systemu plikow mozna jednak uczynic roznymi od identyfikator efektywnych, za pomoca wywolan setfsuid(2) i setfsgid(2). o Identyfikatory grup uzupelniajacych (dodatkowych). Stanowia one identyfikatory grup dodatkowych, uzywanych do kontroli uprawnien dostepu do plikow i innych wspolnych zasobow. Przed Linuksem 2.6.4, proces mogl byc czlonkiem co najwyzej 32 grup uzupelniajacych; od Linuksa 2.6.4 to ograniczenie zwiekszono do 65536 grup uzupelniajacych. Do uzyskania liczby grup uzupelniajacych, jakich proces moze byc czlonkiem mozna posluzyc sie wywolaniem sysconf(_SC_NGROUPS_MAX). Proces moze uzyskac swoj zestaw identyfikatorow grup uzupelniajacych za pomoca wywolania getgroups(2). Proces potomny utworzony wywolaniem fork(2) dziedziczy kopie identyfikatorow uzytkownika i grupy swojego procesu macierzystego. Podczas execve(2) zachowywane sa rzeczywiste identyfikatory uzytkownika i grupy procesu, a takze identyfikatory grup uzupelniajacych; natomiast identyfikatory efektywne i zapisane suid/sgid mozna zmieniac, zgodnie z opisem w execve(2). Oprocz przeznaczenia opisanego wyzej, identyfikatory uzytkownika procesu sa uzywane rowniez w wielu innych sytuacjach: o przy okreslaniu uprawnien do wysylania sygnalow (zob. kill(2)); o przy okreslaniu uprawnien do ustawiania parametrow planisty zwiazanych z procesem (wartosc nice, priorytet i zasady planisty czasu rzeczywistego, koligacja procesorow, priorytet wejscia/wyjscia) za pomoca setpriority(2), sched_setaffinity(2), sched_setscheduler(2), sched_setparam(2), sched_setattr(2) i ioprio_set(2); o przy sprawdzania limitow zasobow (zob. getrlimit(2)); o przy sprawdzaniu limitu liczby wystapien inotify, jakie moze utworzyc proces (zob. inotify(7)). Modyfikowanie identyfikatorow uzytkownika i grupy procesu Zgodnie z zasadami opisanymi we wlasciwych podrecznikach systemowych, proces moze uzyc nastepujacych interfejsow programistycznych w celu modyfikacji swoich identyfikatorow uzytkownika i grupy: setuid(2) ( setgid(2)) Modyfikuje rzeczywiste (moze rowniez efektywne i zapisane suid/sgid) identyfikatory uzytkownika (grupy) procesu. seteuid(2) ( setegid(2)) Modyfikuje efektywny identyfikator uzytkownika (grupy) procesu. setfsuid(2) ( setfsgid(2)) Modyfikuje identyfikator uzytkownika (grupy) systemu plikow procesu. setreuid(2) ( setregid(2)) Modyfikuje rzeczywiste i efektywne (moze rowniez zapisane suid/sgid) identyfikatory uzytkownika (grupy) procesu. setresuid(2) ( setresgid(2)) Modyfikuje rzeczywiste, efektywne i zapisane suid/sgid identyfikatory uzytkownika (grupy) procesu. setgroups(2) Modyfikuje liste grup uzupelniajacych procesu. Wszelkie zmiany w identyfikatorach efektywnych uzytkownika (grupy) procesu sa automatycznie przenoszone na identyfikatory uzytkownika (grupy) systemu plikow procesu. Zmiany w identyfikatorach efektywnych uzytkownika (grupy) procesu moga rowniez wplywac na atrybut procesu ,,zrzucalnosci" (ang. ,,dumpable"), zgodnie z opisem w podreczniku prctl(2). Zmiany identyfikatorow efektywnych uzytkownika (grupy) procesu moga wplynac na jego przywileje, zgodnie z opisem w podreczniku capabilities(7). STANDARDY Identyfikatory: procesu, procesu macierzystego, grupy procesu oraz sesji sa okreslone w normie POSIX.1. Identyfikatory uzytkownika i grupy: rzeczywiste, efektywne, zapisane suid/sgid sa okreslone w POSIX.1. Identyfikatory uzytkownika i grupy systemu plikow sa rozszerzeniem Linuksa. UWAGI Rozne pola w pliku /proc/pid/status ukazuja opisane wyzej poswiadczenia procesu. Wiecej informacji w podreczniku systemowym proc(5). Standard watkow okreslony przez POSIX wymaga, aby poswiadczenia byly dzielone przez wszystkie watki procesu. Na poziomie jadra, Linux zarzadza jednak osobnymi poswiadczeniami uzytkownika i grupy dla kazdego watku. Implementacja watkowania NPTL czyni pewne starania aby zapewnic, ze wszelkie zmiany poswiadczen uzytkownika lub grupy (np. wywolania do setuid(2), setresuid(2)) sa przenoszone na wszystkie watki POSIX procesu. Wiecej szczegolow w podreczniku nptl(7). ZOBACZ TAKZE 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) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 19 listopada 2023 r. credentials(7)