setresuid(2)

NUME
setresuid, setresgid - stabilesc ID-ul utilizatorului sau grupului real, efectiv și salvat

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
#include <unistd.h>

int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

DESCRIERE
setresuid() stabilește ID-ul real al utilizatorului, ID-ul efectiv al utilizatorului și ID-ul salvat de set-user-ID al procesului apelant.

Un proces neprivilegiat își poate schimba UID-ul real, UID-ul efectiv și set-user-ID-ul salvat, fiecare cu unul dintre: UID-ul real curent, UID-ul efectiv curent sau set-user-ID-ul salvat curent.

Un proces privilegiat ( în Linux, un proces care are capacitatea CAP_SETUID) își poate stabili UID-ul real, UID-ul efectiv și set-user-ID-ul salvat la valori arbitrare.

În cazul în care unul dintre argumente este egal cu -1, valoarea corespunzătoare nu se modifică.

Indiferent de modificările aduse UID-ului real, UID-ului efectiv și set-user-ID-ului salvat, UID-ul sistemului de fișiere este întotdeauna stabilit la aceeași valoare ca și UID-ul efectiv (posibil nou).

În mod complet analog, setresgid() stabilește GID-ul real, GID-ul efectiv și set-group-ID-ul salvat al procesului apelant (și modifică întotdeauna GID-ul sistemului de fișiere pentru a fi același cu GID-ul efectiv), cu aceleași restricții pentru procesele neprivilegiate.

VALOAREA RETURNATĂ
În caz de succes, se returnează zero. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

Notă: există cazuri în care setresuid() poate eșua chiar și atunci când apelantul este UID 0; este o gravă eroare de securitate să se omită verificarea pentru o returnare a unui eșec de la setresuid().

ERORI-IEȘIRE

EAGAIN
    Apelul ar schimba UID-ul real al apelantului (adică ruid nu se potrivește cu UID-ul real al apelantului), dar a existat un eșec temporar în alocarea structurilor de date necesare ale nucleului.

EAGAIN
    ruid nu se potrivește cu UID-ul real al apelantului și acest apel ar aduce numărul de procese aparținând ID-ului de utilizator real ruid peste limita de resurse RLIMIT_NPROC a apelantului. Începând cu Linux 3.1, acest caz de eroare nu mai apare (dar aplicațiile robuste ar trebui să verifice această eroare); vedeți descrierea lui EAGAIN din execve(2).

EINVAL
    Unul sau mai multe dintre ID-urile utilizatorului sau grupului țintă nu sunt valide în acest spațiu de nume de utilizator.

EPERM
    Procesul apelant nu este privilegiat (nu avea capacitatea necesară în spațiul de nume de utilizator) și a încercat să schimbe ID-urile în valori care nu sunt permise. Pentru setresuid(), capacitatea necesară este CAP_SETUID; pentru setresgid(), aceasta este CAP_SETGID.

VERSIUNI

  Diferențe între biblioteca C și nucleu
La nivelul nucleului, ID-urile de utilizator și ID-urile de grup sunt un atribut pentru fiecare fir de execuție. Cu toate acestea, POSIX impune ca toate firele dintr-un proces să aibă aceleași credențiale. Implementarea „NPTL threading” se ocupă de cerințele POSIX prin furnizarea de funcții de învăluire pentru diferitele apeluri de sistem care modifică UID și GID ale proceselor. Aceste funcții învăluitoare (inclusiv cele pentru setresuid() și setresgid()) utilizează o tehnică bazată pe semnale pentru a se asigura că, atunci când un fir de execuție își schimbă acreditările, toate celelalte fire de execuție din proces își schimbă și ele acreditările. Pentru detalii, a se vedea nptl(7).

STANDARDE
POSIX.1-2024.

ISTORIC
POSIX.1-2024. Linux 2.1.44, glibc 2.3.2. HP-UX, FreeBSD.

Apelurile de sistem setresuid() și setresgid() originale Linux suportau numai ID-uri de utilizator și de grup pe 16 biți. Ulterior, Linux 2.4 a adăugat setresuid32() și setresgid32(), care acceptă ID-uri pe 32 de biți. Funcțiile de învăluire glibc setresuid() și setresgid() tratează în mod transparent variațiile dintre versiunile nucleului.

CONSULTAȚI ȘI
getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7)

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.