setreuid(2) System Calls Manual setreuid(2)

setreuid, setregid, setregid - stabilesc ID-ul real și/sau efectiv al utilizatorului sau al grupului

Biblioteca C standard (libc, -lc)

#include <unistd.h>
int setreuid(uid_t ruid, uid_t euid);
int setregid(gid_t rgid, gid_t egid);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

setreuid(), setregid():

    _XOPEN_SOURCE >= 500
        || /* Începând cu glibc 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _BSD_SOURCE

setreuid() stabilește ID-urile de utilizator real și efectiv ale procesului apelant.

Furnizarea unei valori de -1 pentru ID-ul real sau efectiv al utilizatorului forțează sistemul să lase acel ID neschimbat.

Procesele neprivilegiate pot stabili ID-ul efectiv al utilizatorului numai la ID-ul real al utilizatorului, la ID-ul efectiv al utilizatorului sau la set-user-ID salvat.

Utilizatorii neprivilegiați pot stabili doar ID-ul real al utilizatorului la ID-ul real al utilizatorului sau la ID-ul efectiv al utilizatorului.

Dacă ID-ul real al utilizatorului este stabilit (adică ruid nu este -1) sau dacă ID-ul efectiv al utilizatorului este stabilit la o valoare diferită de ID-ul real al utilizatorului anterior, set-user-ID salvat va fi stabilit la noul ID efectiv al utilizatorului.

În mod complet analog, setregid() stabilește ID-urile de grup reale și efective ale procesului apelant, iar toate cele de mai sus sunt valabile cu „grup” în loc de „utilizator”.

Î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 setreuid() 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 setreuid().

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.
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).
Unul sau mai multe dintre ID-urile utilizatorului sau grupului țintă nu sunt valide în acest spațiu de nume de utilizator.
Procesul apelant nu este privilegiat (în Linux, nu are capacitatea necesară în spațiul de nume de utilizator): CAP_SETUID în cazul lui setreuid() sau CAP_SETGID în cazul lui setregid()) și a fost specificată o modificare, alta decât (i) schimbarea ID-ului efectiv al utilizatorului (grupului) cu ID-ul real al utilizatorului (grupului) sau (ii) stabilirea unuia la valoarea celuilalt sau (iii) stabilirea ID-ului efectiv al utilizatorului (grupului) la valoarea set-user-ID salvat (set-group-ID salvat).

POSIX.1 nu specifică toate modificările UID pe care Linux le permite pentru un proces neprivilegiat. Pentru setreuid(), ID-ul efectiv al utilizatorului poate fi făcut identic cu ID-ul real al utilizatorului sau cu ID-ul salvat și nu este specificat dacă procesele neprivilegiate pot stabili ID-ul real al utilizatorului la ID-ul real al utilizatorului, la ID-ul efectiv al utilizatorului sau la ID-ul salvat al utilizatorului. Pentru setregid(), ID-ul real al grupului poate fi modificat la valoarea set-group-ID salvat, iar ID-ul efectiv al grupului poate fi modificat la valoarea ID-ului real al grupului sau la valoarea set-group-ID salvat. Detaliile exacte ale modificărilor de ID permise variază de la o implementare la alta.

Translated with DeepL.com (free version)

POSIX.1 nu face nicio specificație cu privire la efectul acestor apeluri asupra set-user-ID și set-group-ID salvate.

POSIX.1-2008.

POSIX.1-2001, 4.3BSD (a apărut pentru prima dată în 4.2BSD).

Stabilirea ID-ului efectiv al utilizatorului (grupului) la set-user-ID salvat (set-group-ID salvat) este posibilă începând cu Linux 1.1.37 (1.1.38).

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

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 setreuid() și setregid()) 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).

getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(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.8