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