getgroups(2) System Calls Manual getgroups(2) BEZEICHNUNG getgroups, setgroups - abfragen/setzen von zusatzlichen Gruppenkennungen BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int getgroups(int Grosse, gid_t Liste[]); #include int setgroups(size_t Grosse, const gid_t *_Nullable Liste); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): setgroups(): Seit Glibc 2.19: _DEFAULT_SOURCE Glibc 2.19 und alter: _BSD_SOURCE BESCHREIBUNG getgroups() gibt die zusatzlichen Gruppenkennungen des aufrufenden Prozesses in Liste zuruck. Das Argument Grosse sollte auf die maximale Anzahl der Elemente gesetzt werden, die in dem Puffer gespeichert werden konnen, auf den Liste zeigt. Falls der aufrufende Prozess Mitglied von mehr als Grosse zusatzlichen Gruppen ist, fuhrt dies zu einem Fehler. Es ist nicht beschrieben, ob die effektive Gruppenkennungen des aufrufenden Prozesses in der zuruckgegebenen Liste enthalten ist. (Daher sollte eine Anwendung auch getegid(2) aufrufen und den resultierenden Wert hinzufugen oder entfernen.) Wenn Grosse Null ist, wird liste nicht verandert, es wird aber die Gesamtzahl der zusatzlichen Gruppenkennungen fur den Prozess zuruckgegeben. Dies erlaubt es dem Aufrufenden, die Grosse einer dynamisch reservierten Liste festzulegen, die in einem weiteren Aufruf von getgroups() benutzt wird. setgroups() setzt die zusatzlichen Gruppenkennungen fur den aufrufenden Prozess. Es werden geeignete Privilegien benotigt (siehe die Beschreibung des Fehlers EPERM unten). Das Argument Grosse gibt die Anzahl der zusatzlichen Gruppenkennungen im Puffer an, auf den Liste zeigt. Ein Prozess kann samtliche zusatzliche Gruppen mit folgendem Aufruf abgeben: setgroups(0, NULL); RUCKGABEWERT Bei Erfolg gibt getgroups() die Anzahl der zusatzlichen Gruppenkennungen zuruck. Bei aufgetretenem Fehler wird -1 geliefert und errno wird gesetzt, um den Fehler anzuzeigen. Bei Erfolg gibt setgroups() 0 zuruck. Bei aufgetretenem Fehler wird -1 geliefert und errno wird gesetzt, um den Fehler anzuzeigen. FEHLER EFAULT liste hat eine ungultige Adresse. getgroups() kann ausserdem mit dem folgenden Fehler fehlschlagen: EINVAL Grosse ist kleiner als die Anzahl der zusatzlichen Gruppenkennungen, aber nicht Null. setgroups() kann uberdies mit den folgenden Fehlern fehlschlagen: EINVAL Grosse ist grosser als NGROUPS_MAX (32 vor Linux 2.6.4; 65536 seit Linux 2.6.4). ENOMEM Speicher aufgebraucht. EPERM Der aufrufende Prozess hat unzureichende Rechte (dem Aufrufenden fehlt die CAP_SETGID-Capability in dem Benutzernamensraum, in dem er sich befindet). EPERM (seit Linux 3.19) Die Verwendung von setgroups() wird in diesem Benutzer-Namensraum verweigert. Siehe die Beschreibung von /proc/pid/setgroups in user_namespaces(7). VERSIONEN Unterschiede C-Bibliothek/Kernel Auf der Kernelebene sind Benutzer- und Gruppenkennungen Attribute pro Thread. POSIX verlangt aber, dass sich alle Threads in einem Prozess die gleichen Berechtigungsnachweise teilen. Die NPTL-Threading-Implementierung behandelt die POSIX-Anforderungen durch Bereitstellung von Wrapper-Funktionen fur die verschiedenen Systemaufrufe, die die UIDs und GIDs der Prozesse andern. Diese Wrapper-Funktionen (darunter die fur setgroups()) verwenden eine signalbasierte Technik, um sicherzustellen, dass bei der Anderung der Berechtigungsnachweise eines Threads auch alle anderen Threads des Prozesses ihre Berechtigungsnachweise andern. Fur Details siehe nptl(7). STANDARDS getgroups() POSIX.1-2008. setgroups() Keine. GESCHICHTE getgroups() SVr4, 4.3BSD, POSIX.1-2001. setgroups() SVr4, 4.3BSD. Da setgroups() Privilegien benotigt, ist es nicht durch POSIX.1 abgedeckt. Der Original-Linux-Systemaufruf getgroups() unterstutzte nur 16-Bit-Gruppenkennungen. Nachfolgend fugte Linux 2.4 getgroups32() hinzu, das 32-Bit-Kennungen unterstutzte. Die Glibc-Wrapper-Funktion getgroups() stellt die Anderungen transparent uber Kernel-Versionen hinweg bereit. ANMERKUNGEN Ein Prozess kann bis zu NGROUPS_MAX zusatzliche Gruppenkennungen erganzend zur effektiven Gruppenkennung haben. Die Konstante NGROUPS_MAX ist in definiert. Die Zusammenstellung zusatzlicher Gruppenkennungen wird vom Elternprozess geerbt und uber ein execve(2) aufbewahrt. Die maximale Anzahl von zusatzlichen Gruppenkennungen kann zur Laufzeit durch Benutzung von sysconf(3) bestimmt werden: long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX); Der maximale Ruckgabewert von getgroups() kann nicht um mehr als eins grosser als dieser Wert sein. Seit Linux 2.6.4 wird die maximale Anzahl zusatzlicher Gruppenkennungen ausserdem uber die nur lesbare Linux-spezifische Datei /proc/sys/kernel/ngroups_max offengelegt. SIEHE AUCH getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3), capabilities(7), credentials(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Rene Tschirley , Chris Leick , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 getgroups(2)