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