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

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)