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

NOM

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

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.

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, 4.3BSD (setreuid() et setregid() sont apparues dans 4.2BSD).

NOTES

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

       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.

       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)

COLOPHON

       Cette page fait partie de la publication 5.13 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⟩.