Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       setreuid, seteuid - ustawia rzeczywisty i/lub efektywny identyfikator użytkownika lub grupy

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <unistd.h>

       int setreuid(uid_t ruid, uid_t euid);
       int setregid(gid_t rgid, gid_t egid);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       setreuid(), setregid():
           _XOPEN_SOURCE >= 500
               || /* Od glibc 2.19: */ _DEFAULT_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE

OPIS

       setreuid() ustawia rzeczywisty i efektywny identyfikator użytkownika procesu wywołującego.

       Podanie  wartości  -1  dla rzeczywistego lub efektywnego ID użytkownika wymusza na systemie pozostawienie
       tego ID niezmienionym.

       Nieuprzywilejowane procesy mogą jedynie ustawić efektywny  identyfikator  użytkownika  na  identyfikatory
       użytkownika: rzeczywisty, efektywny lub zachowany set-user-ID.

       Nieuprzywilejowani  użytkownicy  mogą  ustawić  ustawić  jedynie rzeczywisty identyfikator użytkownika na
       identyfikatory użytkownika: rzeczywisty lub efektywny.

       Jeśli rzeczywisty ID użytkownika jest ustawiony (tj. ruid nie jest równy -1) lub efektywny ID użytkownika
       jest ustawiany na wartość różną od poprzedniego rzeczywistego ID użytkownika, to zachowanemu  set-user-ID
       zostanie nadana wartość nowego efektywnego ID użytkownika.

       Zupełnie analogicznie setregid() ustawia rzeczywisty i efektywny identyfikator grupy bieżącego procesu, a
       wszystko powyżej nadal obowiązuje po zmianie słowa „użytkownik” na „grupa”.

WARTOŚĆ ZWRACANA

       Po  pomyślnym  zakończeniu  zwracane  jest zero. Po błędzie zwracane jest -1 i ustawiane errno, wskazując
       błąd.

       Uwaga: są przypadki, gdy setreuid() może zawieść nawet wówczas,  gdy  wywołujący  ma  UID  0.  Pominięcie
       sprawdzenia zwrotu niepowodzenia z setreuid() 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  uprzywilejowany  (w  Linuksie:  nie  ma  wymaganego  przywileju  (ang.
              capability)  w  swojej  przestrzeni  nazw  użytkownika:  CAP_SETUID  w  przypadku  setreuid() albo
              CAP_SETGID w przypadku setregid()), a  zażądano  zmian  innych  niż  (i)  zamiana  efektywnego  ID
              użytkownika  (grupy)  z  rzeczywistym  lub  (ii)  ustawienie  jednej  z tych wartości na podstawie
              drugiej, lub (iii) ustawienie efektywnego ID użytkownika (grupy) na podstawie wartości zachowanego
              set-user-ID (zapisanego set-group-ID).

WERSJE

       POSIX.1 nie określa wszystkich zmian identyfikatorów  użytkownika,  które  Linux  dopuszcza  w  przypadku
       procesów  nieuprzywilejowanych.  Dla  setreuid(),  efektywny  ID  użytkownika  może  zostać  ustawiony na
       identyczny jak rzeczywisty ID użytkownika lub zapisany set-user-ID  i  nie  jest  określone,  czy  proces
       nieuprzywilejowany  może  ustawić  rzeczywisty ID użytkownika na rzeczywisty ID użytkownika, efektywny ID
       użytkownika lub zapisany set-user-ID. Dla setregid(), rzeczywisty  ID  grupy  może  zostać  zmieniony  na
       wartość  rzeczywistego  ID  grupy  lub  zapisanego  set-group-ID.  Dokładne  detale  tego,  jakie  zmiany
       identyfikatorów są możliwe, różnią się między implementacjami.

       POSIX.1 nie określa wpływu, jaki mają te wywołania na zapisany set-user-ID i zapisany set-group-ID.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, 4.3BSD (pojawiło się pierwotnie w 4.2BSD).

       Ustawianie  efektywnego  ID  użytkownika  (grupy)  na  podstawie  zachowanego   set-user-ID   (zapisanego
       set-group-ID) jest możliwe poczynając od Linuksa 1.1.37 (1.1.38).

       Oryginalne,  linuksowe  wywołania  setreuid()   i  setregid()  obsługiwały tylko 16-bitowe identyfikatory
       użytkownika i grupy. Następnie w Linuksie 2.4 dodano  setreuid32()  i setregid32(), obsługujące 32-bitowe
       identyfikatory. Funkcje opakowujące setreuid()  i setregid()  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  setreuid()  i  setregid())  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

       getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2),  setuid(2),  capabilities(7),  credentials(7),
       user_namespaces(7)

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>,
       Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> 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 man-pages 6.8                              2 maja 2024 r.                                      setreuid(2)