oracular (2) setreuid.2.gz

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.