focal (2) setresgid.2.gz

Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       setresuid, setresgid - ustawienie rzeczywistego, efektywnego i zachowanego ID użytkownika lub grupy

SKŁADNIA

       #define _GNU_SOURCE /* Patrz feature_test_macros(7) */
       #include <unistd.h>

       int setresuid(uid_t ruid, uid_t euid, uid_t suid);
       int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

OPIS

       setresuid()  ustawia  dla  bieżącego procesu rzeczywisty i efektywny identyfikator użytkownika (UID) oraz
       wartość zachowanego set-user-ID.

       Proces nieuprzywilejowany może zmienić rzeczywisty UID, efektywny UID i zachowany set-user-ID na jeden z:
       bieżący rzeczywisty UID, bieżący efektywny UID lub bieżący zachowany set-user-ID.

       Proces uprzywilejowany (pod Linuksem - mający atrybut CAP_SETUID) może ustawić rzeczywisty UID, efektywny
       UID i zachowany set-user-ID na dowolne wartości.

       Jeżeli którykolwiek z parametrów jest równy -1, to odpowiadająca mu wartość nie jest zmieniana.

       Niezależnie od zmian rzeczywistego UID, efektywnego UID i zachowanego  set-user-ID,  filesystem-UID  jest
       zawsze ustawiany na taką samą wartość, jaką ma (być może nowy) efektywny UID.

       Analogicznie,  setresgid()  ustawia  rzeczywisty  identyfikator  grupy  (GID),  efektywny GID i zachowany
       set-group-ID bieżącego procesu (i zawsze ustawia filesystem-GID na wartość  efektywnego  GID),  z  takimi
       samymi ograniczeniami dla procesów nieuprzywilejowanych.

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i odpowiednio ustawiane errno.

       Uwaga:  są  przypadki,  gdy  setresuid()  może zawieść nawet wówczas, gdy wywołujący ma UID 0. Pominięcie
       sprawdzenia zwrotu niepowodzenia z setresuid() jest poważnym zagrożeniem bezpieczeństwa.

BŁĘDY

       EAGAIN Wywołanie mogłoby zmienić rzeczywisty UID wywołującego (tzn. ruid nie pasowałby  do  rzeczywistego
              UID wywołującego), lecz wystąpiło tu tymczasowe niepowodzenie w przydzieleniu niezbędnych struktur
              danych jądra.

       EAGAIN ruid nie pasuje do rzeczywistego UID wywołującego,  a  to  wywołanie  spowodowałoby  przekroczenie
              limitu  zasobów  RLIMIT_NPROC  wywołującego  przez  liczbę procesów należących do rzeczywistego ID
              użytkownika ruid. Od Linuksa 3.1 błąd ten już się nie  pojawia  (lecz  solidne  aplikacje  powinny
              dokonywać jego sprawdzenia); zob. opis EAGAIN w execve(2).

       EINVAL Jeden  lub  więcej  docelowych  identyfikatorów  użytkownika  lub grupy jest nieprawidłowych w tej
              przestrzeni użytkownika.

       EPERM  Proces wywołujący nie jest procesem uprzywilejowanym  (nie  ma  atrybutu  CAP_SETUID)  i  próbował
              ustawić niedozwoloną wartość któregoś z identyfikatorów.

WERSJE

       Opisywane wywołania systemowe są dostępne w Linuksie od wersji 2.1.44.

ZGODNE Z

       Opisywane wywołania systemowe są niestandardowe; występują również na HP-UX i niektórych systemach BSD.

UWAGI

       Na  HP-UX  i  FreeBSD prototyp funkcji można znaleźć w <unistd.h>. Pod Linuksem prototyp jest dostarczany
       przez glibc od wersji 2.3.2.

       Oryginalne, linuksowe wywołania setresuid()  i setresgid()  obsługiwały  tylko  16-bitowe  identyfikatory
       użytkownika  i  grupy.  Następnie  w  Linuksie  2.4  dodano   setresuid32()  i setresgid32(), obsługujące
       32-bitowe identyfikatory. Funkcje opakowujące setresuid()  i setresgid() biblioteki  glibc  obsługują  te
       warianty wywołań w różnych wersjach jądra w sposób przezroczysty dla użytkownika.

   Różnice biblioteki C/jądra
       Na  poziomie  jądra, identyfikatory użytkownika i grupy są atrybutami przynależnymi wątkowi. Jednak POSIX
       wymaga, aby wszystkie wątki  procesu  dzieliły  te  same  poświadczenia.  Implementacja  wątkowania  NPTL
       obsługuje  wymagania  POSIX za pomocą funkcji opakowujących dla różnych wywołań systemowych zmieniających
       UID-y i GID-y procesów. Te funkcje opakowujące (w tym te  dla  setresuid()  i  setresgid())  wykorzystują
       technikę opartą  na  sygnałach  aby zapewnić, że gdy jeden wątek zmieni swe poświadczenia, wszystkie inne
       wątki procesu również to uczynią. Więcej szczegółów w podręczniku nptl(7).

ZOBACZ TAKŻE

       getresuid(2),   getuid(2),   setfsgid(2),   setfsuid(2),   setreuid(2),    setuid(2),    capabilities(7),
       credentials(7), user_namespaces(7)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 4.07 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 man są: Robert Luberda <robert@debian.org> i
       Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie  błędów  na  stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.07 oryginału.