setfsuid(2) System Calls Manual setfsuid(2)

setfsuid - stabilește identitatea utilizatorului utilizată pentru verificările sistemului de fișiere

Biblioteca C standard (libc, -lc)

#include <sys/fsuid.h>
[[depreciat]] int setfsuid(uid_t fsuid);

În Linux, un proces are atât un ID de utilizator al sistemului de fișiere, cât și un ID de utilizator efectiv. ID-ul de utilizator al sistemului de fișiere (specific Linux) este utilizat pentru verificarea permisiunilor la accesarea obiectelor sistemului de fișiere, în timp ce ID-ul de utilizator efectiv este utilizat pentru diverse alte tipuri de verificări ale permisiunilor (a se vedea credentials(7)).

În mod normal, valoarea ID-ului de utilizator din sistemul de fișiere al procesului este aceeași cu valoarea ID-ului său efectiv de utilizator. Acest lucru este așa, deoarece ori de câte ori ID-ul efectiv de utilizator al unui proces este modificat, nucleul modifică, de asemenea, ID-ul de utilizator din sistemul de fișiere pentru a fi același cu noua valoare a ID-ului efectiv de utilizator. Un proces poate face ca valoarea ID-ului său de utilizator din sistemul de fișiere să difere de ID-ul său efectiv de utilizator, utilizând setfsuid() pentru a schimba ID-ul său de utilizator din sistemul de fișiere la valoarea indicată în fsuid.

Apelurile explicite la setfsuid() și setfsgid(2) sunt (au fost) utilizate de obicei numai de programe precum serverul Linux NFS care trebuie să schimbe ID-ul de utilizator și de grup utilizat pentru accesul la fișiere fără o modificare corespunzătoare a ID-urilor reale și efective de utilizator și de grup. O modificare a ID-urilor de utilizator normale pentru un program precum serverul NFS este (era) o gaură de securitate care îl poate expune la semnale nedorite; (cu toate acestea, această problemă este istorică (a fost odată o problemă); a se vedea mai jos).

setfsuid() va reuși numai dacă apelantul este superutilizatorul sau dacă fsuid corespunde fie ID-ului real al utilizatorului apelantului, fie ID-ului efectiv al utilizatorului, fie ID-ului salvat al utilizatorului stabilit, fie ID-ului curent al utilizatorului sistemului de fișiere.

Atât în caz de succes, cât și în caz de eșec, acest apel returnează ID-ul anterior al utilizatorului din sistemul de fișiere al apelantului.

Linux.

Linux 1.2.

În momentul în care a fost introdus acest apel de sistem, un proces putea trimite un semnal către un alt proces cu același ID de utilizator efectiv. Acest lucru însemna că, dacă un proces privilegiat își schimba ID-ul efectiv de utilizator în scopul verificării permisiunilor pentru fișiere, atunci putea deveni vulnerabil la primirea de semnale trimise de un alt proces (neprivilegiat) cu același ID de utilizator. Atributul ID utilizator al sistemului de fișiere a fost astfel adăugat pentru a permite unui proces să își schimbe ID-ul de utilizator în scopul verificării permisiunilor de fișiere fără a deveni în același timp vulnerabil la primirea de semnale nedorite. Începând cu Linux 2.0, gestionarea permisiunilor de semnal este diferită (a se vedea kill(2)), rezultatul fiind că un proces își poate schimba ID-ul de utilizator efectiv fără a fi vulnerabil la primirea de semnale de la procese nedorite. Astfel, setfsuid() este în prezent inutil și ar trebui evitat în noile aplicații (la fel și pentru setfsgid(2)).

Apelul de sistem original Linux setfsuid() accepta doar ID-uri de utilizator pe 16 biți. Ulterior, Linux 2.4 a adăugat setfsuid32() care acceptă ID-uri pe 32 de biți. Funcția de învăluire glibc setfsuid() tratează în mod transparent variația dintre versiunile nucleului.

În glibc 2.15 și în versiunile anterioare, atunci când funcția de învăluire pentru acest apel de sistem determină că argumentul nu poate fi transmis nucleului fără trunchierea numerelor întregi (deoarece nucleul este vechi și nu acceptă ID-uri de utilizator pe 32 de biți), aceasta va returna -1 și va configura errno la EINVAL fără să încerce apelul de sistem.

Nu se returnează nici un fel de indicații de eroare către apelant, iar faptul că atât apelurile reușite, cât și cele nereușite returnează aceeași valoare face imposibilă determinarea directă a succesului sau eșecului apelului. În schimb, apelantul trebuie să apeleze la valoarea returnată de un apel ulterior, cum ar fi setfsuid(-1) (care va eșua întotdeauna), pentru a determina dacă un apel anterior la setfsuid() a schimbat ID-ul utilizatorului sistemului de fișiere. Cel puțin, EPERM ar trebui să fie returnat atunci când apelul eșuează (deoarece apelantului îi lipsește capacitatea CAP_SETUID).

kill(2), setfsgid(2), capabilities(7), credentials(7)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.9.1