Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       getgroups, setgroups - abfragen/setzen von zusätzlichen Gruppen-IDs

Ü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  Gruppen-IDs 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 Gruppen ist, dann
       führt  dies  zu  einem  Fehler.  Es  ist  nicht  beschrieben, ob die effektive Gruppen-ID 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
       Gruppen-IDs 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  Gruppen-IDs  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 Gruppen-IDs im Puffer an, auf den liste zeigt.

RÜCKGABEWERT

       Bei Erfolg gibt getgroups() die Anzahl der zusätzlichen Gruppen-IDs 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 Gruppen-IDs, 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 User-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 Gruppen-IDs ergänzend zur  effektiven  Gruppen-ID  haben.
       Die Konstante NGROUPS_MAX ist in <limits.h> definiert. Die Zusammenstellung zusätzlicher Gruppen-IDs wird
       vom Elternprozess geerbt und über ein execve(2) aufbewahrt.

       Die  maximale  Anzahl  von  zusätzlichen  Gruppen-IDs  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  Gruppen-IDs  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-Gruppen-IDs. Nachfolgend fügte  Linux
       2.4  getgroups32()  hinzu, das 32-Bit-IDs 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  4.15  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 René Tschirley <gremlin@cs.tu-berlin.de>,  Martin
       Schulze      <joey@infodrom.org>,     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
       <debian-l10n-german@lists.debian.org>.

Linux                                          15. September 2017                                   GETGROUPS(2)