Provided by: manpages-pl-dev_4.13-4_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.

       An unprivileged process may change its real UID, effective UID, and saved set-user-ID, each  to  one  of:
       the current real UID, the current effective UID or the current saved set-user-ID.

       A  privileged  process  (on  Linux, one having the CAP_SETUID capability) may set its real UID, effective
       UID, and saved set-user-ID to arbitrary values.

       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 jest
       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  The calling process is not  privileged  (did  not  have  the  necessary  capability  in  its  user
              namespace)   and  tried  to change the IDs to values that are not permitted.  For setresuid(), the
              necessary capability is CAP_SETUID; for setresgid(), it is CAP_SETGID.

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 5.10 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 są:  Robert  Luberda  <robert@debian.org>  i
       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                                          15 września 2017 r.                                  SETRESUID(2)