Provided by: manpages-de-dev_4.13-4_all bug

BEZEICHNUNG

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

ÜBERSICHT

       #include <sys/types.h>
       #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 entsprechend gesetzt.

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

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.10  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 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                                             6. März 2019                                      GETGROUPS(2)