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.

Linux                                              2015-07-23                                       SETRESUID(2)