SETRESUID(2)

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).

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.

ZOBACZ TAKŻE
getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7)

O STRONIE
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą wersję oryginału można znaleźć pod adresem http://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ą 3.71 oryginału.