dwww Home | Manual pages | Find package

setuid(2)                     System Calls Manual                    setuid(2)

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_SE-
       TUID  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 pri-
       vilé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 :  se-
       tuid()  vérifie l'UID effectif de l'appelant et si c'est le superutili-
       sateur, tous les UID du processus sont mis à uid. Une fois cela  effec-
       tué,  il est impossible au programme de retrouver ses privilèges de su-
       perutilisateur.

       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'appe-
              lant), mais une erreur temporaire est survenue lors de l'alloca-
              tion des structures de données du noyau nécessaires  à  l'opéra-
              tion.

       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 rigou-
              reuses 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  ca-
              pacité CAP_SETUID dans son espace de noms utilisateur) et uid ne
              correspond ni à l'UID réel, ni au set-uid sauvé du processus ap-
              pelant.

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

NOTES
       Linux  dispose d'un concept d'UID de système de fichiers qui est norma-
       lement é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  identi-
       fiants  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 fonc-
       tions d'enveloppe pour les différents appels système qui modifient  des
       UID ou des GID de processus. Ces fonctions d'enveloppe (dont celles au-
       tour 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), cre-
       dentials(7), user_namespaces(7)

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>,  David  Prévot  <david@tilapin.org>,  Cédric Boutillier <ce-
       dric.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⟩.

Pages du manuel de Linux 6.03   30 octobre 2022                      setuid(2)

Generated by dwww version 1.15 on Sat Jun 29 01:37:55 CEST 2024.