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

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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.

STANDARDS

       POSIX.1-2001,  POSIX.1-2008, SVr4. Pas tout à fait compatible avec l'appel système 4.4BSD, 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)

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.03                    30 octobre 2022                                       setuid(2)