Provided by: manpages-pl-dev_4.28.0-2_all 

NAZWA
setfsuid - ustawia identyfikator użytkownika używany przy sprawdzeniach na poziomie systemu plików
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <sys/fsuid.h>
[[przestarzałe]] int setfsuid(uid_t fsuid);
OPIS
W Linuksie, proces może posiadać zarówno identyfikator użytkownika systemu plików jak i efektywny
identyfikator użytkownika. (Typowo linuksowy) identyfikator użytkownika systemu plików służy do
sprawdzania uprawnień przy dostępie do obiektów systemu plików, natomiast efektywny identyfikator
użytkownika jest używany do różnych innych sprawdzeń uprawnień (zob. credentials(7)).
Zwykle wartość identyfikatora użytkownika systemu plików dla procesu jest taka sama, jak jego wartość
efektywnego identyfikatora użytkownika. Jest tak, ponieważ przy każdej zmianie efektywnego identyfikatora
użytkownika jądro zmienia również identyfikator użytkownika systemu plików na taki sam, jak nowa wartość
efektywnego ID użytkownika. Proces może spowodować, że wartość jego ID użytkownika systemu plików zacznie
odbiegać od jego efektywnego ID użytkownika korzystając z setfsuid(), w celu zmiany jego ID użytkownika
systemu plików na wartość podaną w fsuid.
Bezpośrednie wywołania do setfsuid() i setfsgid(2) są (były) zwykle stosowane tylko przez programy takie
jak linuksowy serwer NFS, który musi zmienić identyfikator użytkownika i grupy służący do dostępu do
pliku, bez zmieniania odpowiadających mu rzeczywistych i efektywnych identyfikatorów użytkownika i grupy.
Zmienienie normalnego identyfikatora użytkownika dla programu takiego jak serwer NFS jest (było)
zagrożeniem bezpieczeństwa, które może prowadzić do wystawienia go na działanie niechcianych sygnałów
(jednak problem ten jest tylko historyczny; zob. niżej).
setfsuid() powiedzie się tylko, jeśli wywołujący jest superużytkownikiem lub jeśli fsuid pasuje do
rzeczywistego identyfikatora użytkownika wywołującego, efektywnego identyfikatora użytkownika, zapisanego
set-user-ID lub aktualnego identyfikatora użytkownika systemu plików.
WARTOŚĆ ZWRACANA
Zarówno w przypadku powodzenia, jak i przy niepowodzeniu, niniejsze wywołanie zwraca poprzedni
identyfikator użytkownika systemu plików wywołującego.
STANDARDY
Linux.
HISTORIA
Linux 1.2.
W momencie wprowadzenia niniejszego wywołania systemowego, jeden proces mógł wysyłać sygnał do innego
procesu o tym samym efektywnym identyfikatorze użytkownika. Oznaczało to, że jeśli uprzywilejowany proces
zmienił swój efektywny identyfikator użytkownika w celu sprawdzenia uprawnień do pliku, mógł być
odsłonięty na otrzymywanie sygnałów wysyłanych przez inny (nieuprzywilejowany) proces o tym samym
identyfikatorze użytkownika. Z tego względu dodano atrybut identyfikatora użytkownika systemu plików, aby
pozwolić na zmianę identyfikatora użytkownika przez proces, w celu sprawdzenia uprawnień do pliku, bez
możliwości otrzymywanie niechcianych sygnałów. Od Linuksa 2.0 obsługa uprawnień przy sygnałach zmieniła
się (zob. kill(2)), w wyniku czego proces może zmienić swój efektywny identyfikator użytkownika bez
wystawiania się na otrzymywanie sygnałów od niechcianych procesów. Z tego względu setfsuid() jest obecnie
niepotrzebne i powinno się go unikać w nowych aplikacjach (tak jak setfsgid(2)).
Pierwotne linuksowe wywołania systemowe setfsuid() obsługiwało jedynie 16-bitowe identyfikatory grup.
Następnie, w Linuksie 2.4 dodano setfsuid32(), obsługujące identyfikatora 32-bitowe. Funkcja opakowująca
setfsuid() biblioteki glibc obsługuje te warianty pomiędzy wersjami jądra w sposób przezroczysty.
Różnice biblioteki C/jądra
W glibc 2.15 i wcześniejszych, gdy opakowanie dla tego wywołania systemowego ustali, że argument nie może
być przekazany jądru bez obcięcia liczby (ponieważ jądro jest stare i nie obsługuje 32-bitowych
identyfikatorów użytkowników), zwróci -1 i ustawi errno na EINVAL bez próby korzystania z wywołania
systemowego.
USTERKI
Przy wystąpieniu błędu, wywołujący nie otrzymuje zwrotnie żadnego wskazania, a fakt, że pomyślne i
niepomyślne wywołanie zwraca tę samą wartość powoduje, że nie da się bezpośrednio ustalić, czy wywołanie
powiodło się, czy też nie. Zamiast tego wywołujący musi posiłkować się sięgnięciem do wartości zwracanej
przez kolejne wywołanie, takie jak setfsuid(-1) (które zawsze zawiedzie), aby ustalić, czy poprzedzające
je wywołanie do setfsuid() zmieniło identyfikator użytkownika systemu plików. Ostatecznie, EPERM powinno
być zwrócone, gdy wywołanie zawiedzie (z powodu nieposiadania przez wywołującego przywileju CAP_SETUID).
ZOBACZ TAKŻE
kill(2), setfsgid(2), capabilities(7), credentials(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 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.
Linux man-pages 6.9.1 2 maja 2024 r. setfsuid(2)