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

NOM

       setuid - Définir l'identifiant de l'utilisateur

SYNOPSIS

       #include <unistd.h>

       int setuid(uid_t uid);

DESCRIPTION

       setuid()  définit  l'UID  effectif  du  processus  appelant.  Si ce processus appelant est
       privilégié (plus précisément, s'il a la  capacité  CAP_SETUID  dans  son  espace  de  noms
       utilisateur), l'UID réel et sauvé sont aussi positionnés.

       Sous  Linux,  setuid()  est  implémenté  avec l'option _POSIX_SAVED_IDS, comme le spécifie
       POSIX. Cela permet  à  un  programme  Set-UID  (autre  que  root)  d'abandonner  tous  ses
       privilèges,  d'effectuer  des tâches non privilégiées, et de retrouver son UID effectif de
       manière sécurisée.

       Si l'utilisateur est le superutilisateur,  ou  si  le  programme  est  Set-UID  root,  des
       précautions  particulières  doivent  être  prises :  setuid()  vérifie  l'UID  effectif de
       l'appelant et si c'est le superutilisateur, tous les UID du processus sont mis à uid.  Une
       fois  cela  effectué,  il  est  impossible  au  programme  de  retrouver ses privilèges de
       superutilisateur.

       Ainsi, un programme Set-UID root désireux d'abandonner temporairement ses  privilèges,  en
       prenant  l'identité  d'un  utilisateur  ordinaire, puis de récupérer ses privilèges par la
       suite ne doit  pas  utiliser  setuid().  On  peut  accomplir  cela  en  utilisant  l'appel
       seteuid(2).

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, setuid() peut échouer alors même que l'UID de l'appelant est 0 ;
       ne  pas  vérifier  la  valeur  renvoyée  par setuid() pour détecter un échec est une grave
       erreur qui compromet la sécurité du système.

ERREURS

       EAGAIN L'appel voudrait changer l'identifiant (UID) réel de l'appelant  (c'est-à-dire  que
              uid  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 uid 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  uid  dépasserait
              la  limite  de  ressources RLIMIT_NPROC de l'appelant. À partir de Linux 3.1, cette
              erreur ne peut plus se produire (néanmoins, les  applications  rigoureuses  doivent
              vérifier  que  l'erreur ne s'est pas produite) ; consultez la description de EAGAIN
              dans execve(2).

       EINVAL L'identifiant utilisateur indiqué dans uid n'est pas valable  dans  cet  espace  de
              noms utilisateur.

       EPERM  L'utilisateur  n'est  pas  privilégié  (sous Linux : n'a pas la capacité CAP_SETUID
              dans son espace de noms utilisateur) et uid ne correspond ni à l'UID  réel,  ni  au
              set-uid sauvé du processus appelant.

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, SVr4. Pas tout à fait compatible avec l'appel système BSD 4.4,
       qui positionne l'ensemble des ID réel, sauvé et effectif.

NOTES

       Linux dispose d'un concept d'UID de système de fichiers qui est normalement égal  à  l'UID
       effectif.  L'appel  setuid()  définit  également l'UID de système de fichiers du processus
       appelant. Consultez setfsuid(2).

       Si l'uid est différent de l'ancien UID  effectif,  le  processus  ne  pourra  pas  laisser
       d'image mémoire (core dump) sur le disque.

       L'appel  système  setuid()  original de Linux ne gérait que des identifiants d'utilisateur
       sur 16 bits. En conséquence, Linux 2.4  a  ajouté  setuid32()  qui  prend  en  charge  des
       identifiants  32 bits.  La  fonction  setuid() 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 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 du threading de la NPTL satisfait aux exigences de POSIX à l'aide
       de  fonctions  d'enveloppe pour les différents appels système qui modifient des UID ou des
       GID de processus. Ces fonctions d'enveloppe (dont celles autour de setuid()) 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

       getuid(2),   seteuid(2),   setfsuid(2),   setreuid(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⟩.