setresuid(2) System Calls Manual setresuid(2) NUME setresuid, setresgid - stabilesc ID-ul utilizatorului sau grupului real, efectiv i salvat BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #define _GNU_SOURCE /* Consultai feature_test_macros(7) */ #include int setresuid(uid_t ruid, uid_t euid, uid_t suid); int setresgid(gid_t rgid, gid_t egid, gid_t sgid); DESCRIERE setresuid() stabilete ID-ul real al utilizatorului, ID-ul efectiv al utilizatorului i ID-ul salvat de set-user-ID al procesului apelant. Un proces neprivilegiat ii 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 ( in Linux, un proces care are capacitatea CAP_SETUID) ii poate stabili UID-ul real, UID-ul efectiv i set-user-ID-ul salvat la valori arbitrare. In cazul in care unul dintre argumente este egal cu -1, valoarea corespunzatoare nu se modifica. Indiferent de modificarile aduse UID-ului real, UID-ului efectiv i set-user-ID-ului salvat, UID-ul sistemului de fiiere este intotdeauna stabilit la aceeai valoare ca i UID-ul efectiv (posibil nou). In mod complet analog, setresgid() stabilete GID-ul real, GID-ul efectiv i set-group-ID-ul salvat al procesului apelant (i modifica intotdeauna GID-ul sistemului de fiiere pentru a fi acelai cu GID-ul efectiv), cu aceleai restricii pentru procesele neprivilegiate. VALOAREA RETURNATA In caz de succes, se returneaza zero. In caz de eroare, se returneaza -1, iar errno este configurata pentru a indica eroarea. Nota: exista cazuri in care setresuid() poate eua chiar i atunci cand apelantul este UID 0; este o grava eroare de securitate sa se omita verificarea pentru o returnare a unui eec de la setresuid(). ERORI-IEIRE EAGAIN Apelul ar schimba UID-ul real al apelantului (adica ruid nu se potrivete cu UID-ul real al apelantului), dar a existat un eec temporar in alocarea structurilor de date necesare ale nucleului. EAGAIN ruid nu se potrivete cu UID-ul real al apelantului i acest apel ar aduce numarul de procese aparinand ID-ului de utilizator real ruid peste limita de resurse RLIMIT_NPROC a apelantului. Incepand cu Linux 3.1, acest caz de eroare nu mai apare (dar aplicaiile robuste ar trebui sa verifice aceasta eroare); vedei descrierea lui EAGAIN din execve(2). EINVAL Unul sau mai multe dintre ID-urile utilizatorului sau grupului inta nu sunt valide in acest spaiu de nume de utilizator. EPERM Procesul apelant nu este privilegiat (nu avea capacitatea necesara in spaiul de nume de utilizator) i a incercat sa schimbe ID-urile in valori care nu sunt permise. Pentru setresuid(), capacitatea necesara este CAP_SETUID; pentru setresgid(), aceasta este CAP_SETGID. VERSIUNI Diferene intre biblioteca C i nucleu La nivelul nucleului, ID-urile de utilizator i ID-urile de grup sunt un atribut pentru fiecare fir de execuie. Cu toate acestea, POSIX impune ca toate firele dintr-un proces sa aiba aceleai credeniale. Implementarea ,,NPTL threading" se ocupa de cerinele POSIX prin furnizarea de funcii de invaluire pentru diferitele apeluri de sistem care modifica UID i GID ale proceselor. Aceste funcii invaluitoare (inclusiv cele pentru setresuid() i setresgid()) utilizeaza o tehnica bazata pe semnale pentru a se asigura ca, atunci cand un fir de execuie ii schimba acreditarile, toate celelalte fire de execuie din proces ii schimba i ele acreditarile. Pentru detalii, a se vedea nptl(7). STANDARDE Niciunul. ISTORIC 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 bii. Ulterior, Linux 2.4 a adaugat setresuid32() i setresgid32(), care accepta ID-uri pe 32 de bii. Funciile de invaluire glibc setresuid() i setresgid() trateaza in mod transparent variaiile dintre versiunile nucleului. CONSULTAI I getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 setresuid(2)