setgroups

GETGROUPS(2)                Linux-Programmierhandbuch               GETGROUPS(2)



BEZEICHNUNG
       getgroups, setgroups - abfragen/setzen von zusätzlichen Gruppenkennungen

ÜBERSICHT
       #include <unistd.h>

       int getgroups(int groesse, gid_t liste[]);

       #include <grp.h>

       int setgroups(size_t groesse, const gid_t *liste);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       setgroups():
           Seit Glibc 2.19:
               _DEFAULT_SOURCE
           Glibc 2.19 und älter:
               _BSD_SOURCE

BESCHREIBUNG
       getgroups() gibt die zusätzlichen Gruppenkennungen des aufrufenden
       Prozesses in liste zurück. Das Argument groesse sollte auf die maximale
       Anzahl der Elemente gesetzt werden, die in dem Puffer gespeichert werden
       können, auf den liste zeigt. Falls der aufrufende Prozess Mitglied von
       mehr als groesse zusätzlichen Gruppen ist, führt dies zu einem Fehler.

       Es ist nicht beschrieben, ob die effektive Gruppenkennungen des
       aufrufenden Prozesses in der zurückgegebenen Liste enthalten ist. (Daher
       sollte eine Anwendung auch getegid(2) aufrufen und den resultierenden
       Wert hinzufügen oder entfernen.)

       Wenn groesse Null ist, wird liste nicht verändert, es wird aber die
       Gesamtzahl der zusätzlichen Gruppenkennungen für den Prozess
       zurückgegeben. Dies erlaubt es dem Aufrufenden, die Größe einer dynamisch
       reservierten liste festzulegen, die in einem weiteren Aufruf von
       getgroups() benutzt wird.

       setgroups() setzt die zusätzlichen Gruppenkennungen für den aufrufenden
       Prozess. Es werden geeignete Privilegien benötigt (siehe die Beschreibung
       des Fehlers EPERM unten). Das Argument groesse gibt die Anzahl der
       zusätzlichen Gruppenkennungen im Puffer an, auf den liste zeigt. Ein
       Prozess kann sämtliche zusätzliche Gruppen mit folgendem Aufruf abgeben:

           setgroups(0, NULL);

RÜCKGABEWERT
       Bei Erfolg gibt getgroups() die Anzahl der zusätzlichen Gruppenkennungen
       zurück. Bei aufgetretenem Fehler wird -1 geliefert und errno wird
       gesetzt, um den Fehler anzuzeigen.

       Bei Erfolg gibt setgroups() 0 zurück. Bei aufgetretenem Fehler wird -1
       geliefert und errno wird gesetzt, um den Fehler anzuzeigen.

FEHLER
       EFAULT liste hat eine ungültige Adresse.

       getgroups() kann außerdem mit dem folgenden Fehler fehlschlagen:

       EINVAL groesse ist kleiner als die Anzahl der zusätzlichen
              Gruppenkennungen, aber nicht Null.

       setgroups() kann überdies mit den folgenden Fehlern fehlschlagen:

       EINVAL groesse ist größer 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).

KONFORM ZU
       getgroups(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

       setgroups(): SVr4, 4.3BSD. Da setgroups() Privilegien benötigt, ist es
       nicht durch POSIX.1 abgedeckt.

ANMERKUNGEN
       Ein Prozess kann bis zu NGROUPS_MAX zusätzliche Gruppenkennungen
       ergänzend zur effektiven Gruppenkennung haben. Die Konstante NGROUPS_MAX
       ist in <limits.h> definiert. Die Zusammenstellung zusätzlicher
       Gruppenkennungen wird vom Elternprozess geerbt und über ein execve(2)
       aufbewahrt.

       Die maximale Anzahl von zusätzlichen Gruppenkennungen kann zur Laufzeit
       durch Benutzung von sysconf(3) bestimmt werden:

           long ngroups_max;
           ngroups_max = sysconf(_SC_NGROUPS_MAX);

       Der maximale Rückgabewert von getgroups() kann nicht um mehr als eins
       größer als dieser Wert sein. Seit Linux 2.6.4 wird die maximale Anzahl
       zusätzlicher Gruppenkennungen außerdem über die nur lesbare
       Linux-spezifische Datei /proc/sys/kernel/ngroups_max offengelegt.

       Der Original-Linux-Systemaufruf getgroups() unterstützte nur
       16-Bit-Gruppenkennungen. Nachfolgend fügte Linux 2.4 getgroups32() hinzu,
       das 32-Bit-Kennungen unterstützte. Die Glibc-Wrapper-Funktion getgroups()
       stellt die Änderungen transparent über Kernel-Versionen hinweg bereit.

   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 für die verschiedenen
       Systemaufrufe, die die UIDs und GIDs der Prozesse ändern. Diese
       Wrapper-Funktionen (darunter die für setgroups()) verwenden eine
       signalbasierte Technik, um sicherzustellen, dass bei der Änderung der
       Berechtigungsnachweise eines Threads auch alle anderen Threads des
       Prozesses ihre Berechtigungsnachweise ändern. Für Details siehe nptl(7).

SIEHE AUCH
       getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3),
       capabilities(7), credentials(7)

KOLOPHON
       Diese Seite ist Teil der Veröffentlichung 5.11 des Projekts
       Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie
       Fehler gemeldet werden können sowie die aktuelle Version dieser Seite
       finden sich unter https://www.kernel.org/doc/man-pages/.


ÜBERSETZUNG
       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze
       <joey@infodrom.org>, René Tschirley <gremlin@cs.tu-berlin.de>, Chris
       Leick <c.leick@vollbio.de>, Mario Blättermann
       <mario.blaettermann@gmail.com> und Dr. Tobias Quathamer
       <toddy@debian.org> erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General
       Public License Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ oder
       neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG
       übernommen.

       Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
       Sie bitte eine E-Mail an die Mailingliste der Übersetzer ⟨debian-l10n-
       german@lists.debian.org⟩.



Linux                             22. März 2021                     GETGROUPS(2)