Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

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

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

       int getgroups(int Größe, gid_t Liste[]);

       #include <grp.h>

       int setgroups(size_t Größe, 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 älter:
               _BSD_SOURCE

BESCHREIBUNG

       getgroups()  gibt  die  zusätzlichen  Gruppenkennungen  des  aufrufenden  Prozesses  in Liste zurück. Das
       Argument Größe 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 Größe 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  Größe  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 Größe 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 Größe ist kleiner als die Anzahl der zusätzlichen Gruppenkennungen, aber nicht Null.

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

       EINVAL Größe 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).

STANDARDS

       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)

Ü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 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.

Linux man-pages 6.03                             5. Februar 2023                                    getgroups(2)