getgroups(2) | System Calls Manual | getgroups(2) |
NUME
getgroups, setgroups - obține/stabilește o listă de ID-uri de grupuri suplimentare
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <unistd.h>
int getgroups(int size, gid_t list[]);
#include <grp.h>
int setgroups(size_t size, const gid_t *_Nullable list);
setgroups():
Începând cu glibc 2.19: _DEFAULT_SOURCE glibc 2.19 și versiunile anterioare: _BSD_SOURCE
DESCRIERE
getgroups() returnează în list ID-urile de grup suplimentare ale procesului apelant. Argumentul size trebuie să fie definit la numărul maxim de elemente care pot fi stocate în memoria tampon indicată de list. În cazul în care procesul de apelare este membru a mai mult de size grupuri suplimentare, apare o eroare.
Nu este specificat dacă ID-ul efectiv al grupului procesului apelant este inclus în lista returnată; (astfel, o aplicație trebuie să apeleze și getegid(2) și să adauge sau să elimine valoarea rezultată).
Dacă size este zero, list nu este modificat, dar se returnează numărul total de ID-uri de grup suplimentare pentru proces. Acest lucru permite apelantului să determine dimensiunea unei liste list alocate dinamic, care va fi utilizată într-un apel ulterior la getgroups().
setgroups() stabilește ID-urile de grup suplimentare pentru procesul apelant. Sunt necesare privilegii corespunzătoare (a se vedea descrierea erorii EPERM, mai jos). Argumentul size specifică numărul de ID-uri de grup suplimentare din memoria tampon indicată de list. Un proces poate renunța la toate grupurile sale suplimentare odată cu apelul:
setgroups(0, NULL);
VALOAREA RETURNATĂ
În caz de succes, getgroups() returnează numărul de ID-uri de grup suplimentare. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
În caz de succes, setgroups() returnează 0. În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE
- EFAULT
- list are o adresă nevalidă.
getgroups() poate eșua în plus cu următoarea eroare:
- EINVAL
- size este mai mic decât numărul de ID-uri de grup suplimentare, dar nu este zero.
setgroups() poate eșua în plus cu următoarele erori:
- EINVAL
- size este mai mare decât NGROUPS_MAX (32 înainte de Linux 2.6.4; 65536 începând cu Linux 2.6.4).
- ENOMEM
- Memorie insuficientă.
- EPERM
- Procesul apelant are privilegii insuficiente (apelantul nu are capacitatea CAP_SETGID în spațiul de nume al utilizatorului în care se află).
- EPERM (începând cu Linux 3.19)
- Utilizarea setgroups() este interzisă în acest spațiu de nume de utilizator. A se vedea descrierea /proc/pid/setgroups în user_namespaces(7).
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 cea pentru setgroups()) 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
- getgroups()
- POSIX.1-2008.
- setgroups()
- Niciunul.
ISTORIC
- getgroups()
- SVr4, 4.3BSD, POSIX.1-2001.
- setgroups()
- SVr4, 4.3BSD. Deoarece setgroups() necesită privilegii, nu este acoperit de POSIX.1.
Apelul de sistem original Linux getgroups() accepta numai ID-uri de grup pe 16 biți. Ulterior, Linux 2.4 a adăugat getgroups32(), care acceptă ID-uri pe 32 de biți. Funcția învăluitoare glibc getgroups() tratează în mod transparent variația dintre versiunile de kernel.
NOTE
Un proces poate avea până la NGROUPS_MAX ID-uri de grup suplimentare în plus față de ID-ul de grup efectiv. Constanta NGROUPS_MAX este definită în <limits.h>. Setul de ID-uri de grup suplimentare este moștenit de la procesul părinte și este păstrat prin intermediul unui execve(2).
Numărul maxim de ID-uri de grup suplimentare poate fi aflat în timpul execuției folosind sysconf(3):
long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX);
Valoarea maximă de returnare a lui getgroups() nu poate fi mai mare decât cu unu față de această valoare. Începând cu Linux 2.6.4, numărul maxim de ID-uri de grup suplimentare este, de asemenea, expus prin intermediul fișierului de numai citire specific Linux, /proc/sys/kernel/ngroups_max.
CONSULTAȚI ȘI
getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(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 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 |