Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

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

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

       int getgroups(int Größe, gid_t Liste[]);

       #include <grp.h>

       int setgroups(size_t Größe, const gid_t *_Nullable Liste);

   Mit Glibc erforderliche Feature-Test-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 Größe 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 Größe 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 Größe 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  Größe  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 Größe ist kleiner als die Anzahl  der  zusätzlichen  Gruppenkennungen,  aber  nicht
              Null.

       setgroups() kann überdies mit den folgenden Fehlern fehlschlagen:

       EINVAL Größe 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).

STANDARDS

       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)

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