setgroups

GETGROUPS(2)               Manuel du programmeur Linux              GETGROUPS(2)



NOM
       getgroups, setgroups - Lire et écrire la liste des groupes additionnels
       d'un processus

SYNOPSIS
       #include <unistd.h>

       int getgroups(int size, gid_t list[]);

       #include <grp.h>

       int setgroups(size_t size, const gid_t *list);

   Exigences de macros de test de fonctionnalités pour la glibc (consulter
   feature_test_macros(7)) :

       setgroups():
           Since glibc 2.19:
               _DEFAULT_SOURCE
           Glibc 2.19 and earlier:
               _BSD_SOURCE

DESCRIPTION
       getgroups() renvoie dans la liste list les identifiants des groupes
       additionnels du processus appelant. Le paramètre size doit indiquer le
       nombre maximal d'éléments qui peuvent être stockés dans le tampon pointé
       par list. Si le processus appelant est membre de plus de size groupes
       additionnels, cela génère une erreur.

       Il n'est pas précisé si l'ID du groupe effectif du processus appelant est
       inclus dans la liste renvoyée (ainsi, une application doit aussi appeler
       getegid(2) et ajouter ou supprimer la valeur qui en résulte).

       Si size vaut zéro, list n'est pas modifiée, mais le nombre total de
       groupes additionnels pour le processus est renvoyé. Cela permet à
       l'appelant de déterminer la taille d'une liste list allouée dynamiquement
       à utiliser dans un appel à getgroups() ultérieur.

       setgroups() définit des identifiants de groupe additionnel pour le
       processus appelant. Les privilèges appropriés sont nécessaires (voir la
       description de EPERM ci-dessous). Le paramètre size indique le nombre
       d'identifiants de groupe additionnel du tampon pointé par list. Un
       processus peut supprimer tous ses groupes additionnels :

           setgroups(0, NULL);

VALEUR RENVOYÉE
       On success, getgroups()  returns the number of supplementary group IDs.
       On error, -1 is returned, and errno is set to indicate the error.

       On success, setgroups()  returns 0.  On error, -1 is returned, and errno
       is set to indicate the error.

ERREURS
       EFAULT list contient une adresse non autorisée.

       getgroups() peut également échouer avec les erreurs suivantes :

       EINVAL size est inférieur au nombre d'identifiants de groupe additionnel,
              et n'est pas nul.

       setgroups() peut également échouer avec les erreurs suivantes :

       EINVAL size est plus grand que NGROUPS_MAX (32 avant Linux 2.6.4 ; 65536
              depuis Linux 2.6.4).

       ENOMEM Plus assez de mémoire.

       EPERM  Le processus appelant n'a pas de privilèges suffisants (l'appelant
              n'a pas la capacité CAP_SETGID dans l'espace de noms utilisateur
              où il réside).

       EPERM (depuis Linux 3.19)
              L'utilisation de setgroups() est interdite dans cet espace de noms
              utilisateur. Voir la description de /proc/[pid]/setgroups dans
              user_namespaces(7).

CONFORMITÉ
       getgroups() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

       setgroups() : SVr4, 4.3BSD. Depuis que setgroups() exige des privilèges,
       il n'est pas traité dans POSIX.1.

NOTES
       Un processus peut avoir jusqu'à NGROUPS_MAX identifiants de groupe
       additionnel en plus de son identifiant de groupe effectif. La constante
       NGROUPS_MAX est définie dans <limits.h>. Le jeu d'identifiants de groupe
       additionnel est hérité du processus parent, et est préservé au travers
       des appels à execve(2).

       Le nombre maximal d'identifiants de groupe additionnel peut être obtenu
       pendant l'exécution au moyen de sysconf(3) :

           long ngroups_max;
           ngroups_max = sysconf(_SC_NGROUPS_MAX);

       La valeur de retour maximale de getgroups() ne peut pas être plus grande
       que 1 plus cette valeur. Depuis Linux 2.6.4, le nombre maximal
       d’identifiants de groupe additionnel est aussi exposé à l’aide du fichier
       /proc/sys/kernel/ngroups_max en lecture seule et spécifique à Linux.

       L'appel système getgroups() originel de Linux ne gérait que des
       identifiants de groupe sur 16 bits. En conséquence, Linux 2.4 a ajouté
       getgroups32() qui prend en charge des identifiants 32 bits. La fonction
       getgroups() de la glibc qui l'encapsule gère de manière transparente ces
       différences entre noyaux.

   différences entre bibliothèque C et noyau
       Au niveau du noyau, les ID d'utilisateur et de groupe représentent un
       attribut par thread. Cependant, POSIX exige que tous les threads d'un
       processus partagent les mêmes droits. L'implémentation des threads NPTL
       gère les exigences de POSIX en fournissant des fonctions enveloppes pour
       les appels système qui modifient les UID et les GID du processus. Ces
       fonctions enveloppes (dont celle de setgroups()) utilisent une technique
       basée sur le signal pour s'assurer que quand un thread modifie les
       droits, tous les autres threads du processus modifient également leurs
       droits. Pour des détails, voir nptl(7).

VOIR AUSSI
       getgid(2), setgid(2), getgrouplist(3), group_member(3), initgroups(3),
       capabilities(7), credentials(7)

COLOPHON
       Cette page fait partie de la publication 5.11 du projet man-pages Linux.
       Une description du projet et des instructions pour signaler des anomalies
       et la dernière version de cette page, peuvent être trouvées à l'adresse
       https://www.kernel.org/doc/man-pages/.


TRADUCTION
       La traduction française de cette page de manuel a été créée par
       Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin
       <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>,
       François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe
       Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-
       luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas
       Huriaux <thomas.huriaux@gmail.com>, Nicolas François
       <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>,
       Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier
       <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier
       <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et
       Jean-Philippe MENGUAL <jpmengual@debian.org>

       Cette traduction est une documentation libre ; veuillez vous reporter à
       la GNU General Public License version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ concernant les conditions de
       copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,
       veuillez envoyer un message à debian-l10n-french@lists.debian.org ⟨⟩.




Linux                             22 mars 2021                      GETGROUPS(2)