Provided by: manpages-de-dev_4.15.0-9_all bug

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