Provided by: manpages-pl-dev_0.7-1_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.