Provided by: manpages-fr-dev_4.26.0-1_all bug

NOM

       setreuid, setregid - Définir les UID et GID effectifs et/ou réels

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <unistd.h>

       int setreuid(uid_t ruid, uid_t euid);
       int setregid(gid_t rgid, gid_t egid);

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

       setreuid(), setregid() :
           _XOPEN_SOURCE >= 500
               || /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE
               || /* glibc <= 2.19 : */ _BSD_SOURCE

DESCRIPTION

       setreuid() définit les ID d'utilisateur effectif et réel du processus appelant.

       Fournir une valeur -1 pour l'un des arguments demande au système de ne pas modifier l'ID correspondant

       Les  processus  non privilégiés peuvent seulement définir leur UID effectif à la valeur de l'UID réel, de
       l'UID effectif ou de l'UID sauvé.

       Les utilisateurs non privilégiés peuvent seulement définir l'UID réel à la valeur de  l'UID  réel  ou  de
       l'UID effectif.

       Si  l'UID  réel  est  changé  (c'est-à-dire si ruid est différent de -1), ou si l'UID effectif a avec une
       valeur différente de l'UID réel précédent, le set-uid sauvegardé prendra également la  valeur  du  nouvel
       UID effectif.

       De  manière  analogue, setregid() définit les ID de groupe du processus appelant, et toutes les remarques
       précédentes s'appliquent, en remplaçant GID par UID.

VALEUR RENVOYÉE

       En cas de succès, zéro est renvoyé. En cas d'erreur, -1 est renvoyé et errno est  définie  pour  préciser
       l'erreur.

       Note  :  dans  certains  cas,  setreuid()  peut échouer alors même que l'UID de l'appelant est 0 ; ne pas
       vérifier la valeur renvoyée par setreuid() pour détecter un échec est une grave erreur qui  compromet  la
       sécurité du système.

ERREURS

       EAGAIN L'appel a changé l'identifiant (UID) réel de l'appelant (c'est à dire que ruid ne correspond pas à
              l'UID  réel  de  l'appelant),  mais  une  erreur  temporaire est survenue lors de l'allocation des
              structures de données du noyau nécessaires à l'opération.

       EAGAIN ruid ne correspond pas à l'UID réel de l'appelant et suite à cet appel,  le  nombre  de  processus
              appartenant  à  l'utilisateur  dont  l'identifiant réel est ruid a dépassé la limite de ressources
              RLIMIT_NPROC de l'appelant. A partir  de  Linux  3.1,  cette  erreur  ne  peut  plus  se  produire
              (néanmoins,  les  applications  sérieuses  doivent  vérifier que l'erreur ne s'est pas produite) ;
              consultez la description de EAGAIN dans execve(2).

       EINVAL Au moins un des identifiants utilisateur ou groupe cible n'est pas  valide  dans  espace  de  noms
              utilisateur.

       EPERM  Le  processus appelant n'est pas privilégié (sous Linux, il n'a pas les capacités nécessaires dans
              son espace de noms utilisateur : CAP_SETUID dans le cas de setreuid(), ou CAP_SETGID dans  le  cas
              de  setregid()),  et  des modifications ont été demandées autres que (1) l'échange de l'UID (resp.
              GID) effectif avec l'UID (resp. GID) réel, (2) la définition de la valeur de l'une avec  celle  de
              l'autre  ou  (3)  la  définition de l'UID (resp. GID) effectif avec la valeur de l'UID (resp. GID)
              sauvée.

VERSIONS

       POSIX.1 ne donne pas tous les changements d'identifiants qui sont autorisés sous Linux pour un  processus
       non  privilégié.  Pour  setreuid(), l'identifiant d'utilisateur effectif peut être celui de l'identifiant
       d'utilisateur réel ou celui de l'identifiant d'utilisateur sauvé. Il n'est pas indiqué si  des  processus
       non  privilégiés peuvent changer l'identifiant d'utilisateur réel en l'identifiant d'utilisateur effectif
       ou en celui sauvé. Pour setregid(), l'identifiant de groupe  réel  peut  être  changé  en  la  valeur  de
       l'identifiant  de  groupe  sauvé,  et  l'identifiant  de groupe effectif peut être changé en la valeur de
       l'identifiant de groupe réel ou de celui sauvé. Les détails précis  sur  les  changements  d'identifiants
       autorisés varient en fonction de l'implémentation.

       POSIX.1 ne dit rien de l'effet de ces appels sur les set-user-ID et set-group-ID sauvés.

STANDARDS

       POSIX.1-2008.

HISTORIQUE

       POSIX.1-2001, 4.3BSD (apparue dans 4.2BSD).

       Définir  l'UID  (GID)  effectif  avec  la  valeur  de  l'UID (GID) sauvé est possible depuis Linux 1.1.37
       (1.1.38).

       Les appels système setreuid()  et  setregid()  originaux  de  Linux  ne  géraient  que  des  identifiants
       d'utilisateur  et  de groupe sur 16 bits. En conséquence, Linux 2.4 a ajouté setreuid32() et setregid32()
       qui prennent en charge des identifiants 32 bits. Les fonctions setreuid() et setregid() de la  glibc  qui
       les encapsulent gèrent de manière transparente ces différences entre noyaux.

   Différences entre bibliothèque C et noyau
       Au  niveau  du  noyau,  les  identifiants 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
       de  threading  de  NPTL  satisfait  aux  exigences  de  POSIX  à  l'aide de fonctions enveloppes pour les
       différents appels système qui modifient des UID ou des GID de processus. Ces fonctions  enveloppes  (dont
       celles  autour  de  setreuid()  et  de  setregid())  "utilisent  des techniques basées sur le signal pour
       s'assurer que lorsqu'un thread modifie les droits, tous les autres threads du processus le font également
       pour leur compte. Pour des détails, consultez nptl(7).

VOIR AUSSI

       getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2),  setuid(2),  capabilities(7),  credentials(7),
       user_namespaces(7)

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

Pages du manuel de Linux 6.9.1                     2 mai 2024                                        setreuid(2)