setuid(2) System Calls Manual setuid(2) NUME setuid - stabilete identitatea utilizatorului BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int setuid(uid_t uid); DESCRIERE setuid() stabilete ID-ul de utilizator efectiv al procesului apelant. In cazul in care procesul apelant este privilegiat (mai precis: daca procesul are capacitatea CAP_SETUID in spaiul sau de nume de utilizator), se stabilesc, de asemenea, UID real i set-user-ID salvat. In Linux, setuid() este implementat ca versiunea POSIX cu caracteristica _POSIX_SAVED_IDS. Acest lucru permite unui program set-user-ID (altul decat root) sa renune la toate privilegiile de utilizator, sa faca unele lucrari fara privilegii i apoi sa reangajeze ID-ul de utilizator efectiv iniial intr-un mod sigur. Daca utilizatorul este root sau daca programul este set-user-ID-root, trebuie sa se acorde o atenie speciala: setuid() verifica ID-ul de utilizator efectiv al apelantului i, daca acesta este superutilizatorul, toate ID-urile de utilizator legate de proces sunt stabilite la uid. Dupa ce acest lucru s-a intamplat, este imposibil ca programul sa recatige privilegiile de root. Astfel, un program set-user-ID-root care dorete sa renune temporar la privilegiile de root, sa ii asume identitatea unui utilizator neprivilegiat i apoi sa redobandeasca privilegiile de root nu poate utiliza setuid(). Putei realiza acest lucru cu seteuid(2). 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 setuid() 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 setuid(). ERORI-IEIRE EAGAIN Apelul ar schimba UID-ul real al apelantului (adica uid nu se potrivete cu UID-ul real al apelantului), dar a existat un eec temporar in alocarea structurilor de date necesare ale nucleului. EAGAIN uid nu se potrivete cu ID-ul real al apelantului i acest apel ar face ca numarul de procese aparinand ID-ului real al utilizatorului uid sa depaeasca 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 daca exista aceasta eroare); a se vedea descrierea lui EAGAIN din execve(2). EINVAL ID-ul de utilizator specificat in uid nu este valid in acest spaiu de nume de utilizator. EPERM Utilizatorul nu este privilegiat (Linux: nu are capacitatea CAP_SETUID in spaiul sau de nume de utilizator) i uid nu se potrivete cu UID-ul real sau cu set-user-ID-ul salvat al procesului de apelare. 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 cea pentru setuid()) 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 POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4. Nu este foarte compatibil cu apelul 4.4BSD, care stabilete toate ID-urile de utilizator reale, salvate i efective. Apelul de sistem original Linux setuid() suporta doar ID-uri de utilizator pe 16 bii. Ulterior, Linux 2.4 a adaugat setuid32() care accepta ID-uri pe 32 de bii. Funcia invaluitoare glibc setuid() trateaza in mod transparent variaia dintre versiunile de kernel. NOTE Linux are conceptul de ID de utilizator al sistemului de fiiere, in mod normal egal cu ID-ul efectiv al utilizatorului. Apelul setuid() stabilete, de asemenea, ID-ul de utilizator din sistemul de fiiere al procesului care il apeleaza. A se vedea setfsuid(2). Daca uid este diferit de vechiul UID efectiv, procesului ii va fi interzis sa lase descarcari de imagine de memorie. CONSULTAI I getuid(2), seteuid(2), setfsuid(2), setreuid(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 setuid(2)