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.