seteuid(2)

NAZWA
seteuid, setegid - ustawia efektywny identyfikator użytkownika lub grupy

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <unistd.h>

int seteuid(uid_t euid);
int setegid(gid_t egid);

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

seteuid(), setegid():
    _POSIX_C_SOURCE >= 200112L
        || /* glibc <= 2.19: */ _BSD_SOURCE

OPIS
seteuid() ustawia efektywny identyfikator użytkownika procesu wywołującego. Nieuprzywilejowane procesy mogą ustawiać tylko efektywny identyfikator użytkownika na rzeczywisty identyfikator użytkownika, efektywny identyfikator użytkownika lub zapisany set-user-ID.

Powyższy opis stosuje się również do setegid(), po zastąpieniu słowa „użytkownik” – „grupą”.

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 seteuid() może zawieść nawet wówczas, gdy wywołujący ma UID 0. Pominięcie sprawdzenia zwrotu niepowodzenia z seteuid() jest poważnym zagrożeniem bezpieczeństwa.

BŁĘDY

EINVAL
    Docelowy identyfikator użytkownika lub grupy nie jest prawidłowy w tej przestrzeni nazw użytkownika.

EPERM
    W przypadku seteuid(): proces wywołujący nie jest uprzywilejowany (nie ma przywileju CAP_SETUID w swej przestrzeni nazw użytkownika), a euid nie pasuje do obecnego rzeczywistego identyfikatora użytkownika, obecnego efektywnego identyfikatora użytkownika lub obecnego zapisanego set-user-ID.

    W przypadku setegid(): proces wywołujący nie jest uprzywilejowany (nie ma przywileju CAP_SETGID w swej przestrzeni nazw użytkownika), a egid nie pasuje do obecnego rzeczywistego identyfikatora grupy, obecnego efektywnego identyfikatora grupy lub obecnego zapisanego set-group-ID.

WERSJE
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). Na nieznanym systemie należy sprawdzić _POSIX_SAVED_IDS.

W glibc 2.0, seteuid(euid) jest równoważne setreuid(-1, euid), zatem może zmienić zapisany set-user-ID. W glibc 2.1 i późniejszych, jest równoważne setresuid(-1, euid, -1), zatem nie zmienia zapisanego set-user-ID. Analogiczne uwagi stosują się wobec setegid(), z tą różnicą, że zmiana w implementacji z setregid(-1, egid) na setresgid(-1, egid, -1) nastąpiła w glibc 2.2 lub 2.3 (w zależności od architektury sprzętowej).

Zgodnie z POSIX.1, seteuid() (setegid()) nie może zezwalać, aby euid (egid) miał tę samą wartość jak obecny efektywny identyfikator użytkownika (grupy) i niektóre implementacje na to nie zezwalają.

  Różnice biblioteki C/jądra
W Linuksie, seteuid() i setegid() zaimplementowano jako funkcje biblioteczne wywołujące, odpowiednio: setresuid(2) i setresgid(2).

STANDARDY
POSIX.1-2024.

HISTORIA
POSIX.1-2001, 4.3BSD.

ZOBACZ TAKŻE
geteuid(2), setresuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7)

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: 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.