setgid(2)

NAZWA
setgid - ustawia identyfikator grupy

BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)

SKŁADNIA
#include <unistd.h>

int setgid(gid_t gid);

OPIS
setgid() ustawia efektywny identyfikator grupy procesu wywołującego. Jeśli proces wywołujący jest uprzywilejowany (precyzyjniej: jeśli proces ma przywilej CAP_SETGID w swojej przestrzeni nazw użytkownika) ustawiany jest również rzeczywisty GID oraz zapisany set-group-ID.

W Linuksie setgid() jest zaimplementowany tak, jak wersja POSIX, z funkcją _POSIX_SAVED_IDS. Pozwala to programom set-group-ID innym niż set-user-ID-root porzucić wszystkie swoje przywileje grupy, wykonać jakąś nieuprzywilejowaną pracę, a następnie odzyskać pierwotny efektywny identyfikator grupy w bezpieczny sposób.

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

BŁĘDY

EINVAL
    Identyfikator grupy podany w gid nie jest prawidłowy w tej przestrzeni nazw użytkownika.

EPERM
    Proces wywołujący nie jest uprzywilejowany (Linux: nie ma przywileju CAP_SETGID w swej przestrzeni nazw użytkownika), a gid nie pasuje do rzeczywistego identyfikatora grupy lub zapisanego set-group-ID procesu wywołującego.

WERSJE

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

STANDARDY
POSIX.1-2024.

HISTORIA
POSIX.1-2001, SVr4.

Pierwotne linuksowe wywołania systemowe setgid() obsługiwały jedynie 16-bitowe identyfikatory grup. Następnie, w Linuksie 2.4 dodano setgid32(), obsługujące identyfikatory 32-bitowe. Funkcja opakowująca setgid() biblioteki glibc obsługuje te warianty pomiędzy wersjami jądra w sposób przezroczysty.

ZOBACZ TAKŻE
getgid(2), setegid(2), setregid(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.