setuid(2) System Calls Manual setuid(2) NOM setuid - Definir l'identifiant de l'utilisateur BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int setuid(uid_t uid); DESCRIPTION setuid() definit l'UID effectif du processus appelant. Si ce processus appelant est privilegie (plus precisement, s'il a la capacite CAP_SETUID dans son espace de noms utilisateur), l'UID reel et sauve sont aussi positionnes. Sous Linux, setuid() est implemente avec l'option _POSIX_SAVED_IDS, comme le specifie POSIX. Cela permet a un programme Set-UID (autre que root) d'abandonner tous ses privileges, d'effectuer des taches non privilegiees, et de retrouver son UID effectif de maniere securisee. Si l'utilisateur est le superutilisateur, ou si le programme est Set-UID root, des precautions particulieres doivent etre prises : setuid() verifie l'UID effectif de l'appelant et si c'est le superutilisateur, tous les UID du processus sont mis a uid. Une fois cela effectue, il est impossible au programme de retrouver ses privileges de superutilisateur. Ainsi, un programme Set-UID root desireux d'abandonner temporairement ses privileges, en prenant l'identite d'un utilisateur ordinaire, puis de recuperer ses privileges par la suite ne doit pas utiliser setuid(). On peut accomplir cela en utilisant l'appel seteuid(2). VALEUR RENVOYEE En cas de succes, zero est renvoye. En cas d'erreur, -1 est renvoye et errno est definie pour preciser l'erreur. Note : dans certains cas, setuid() peut echouer alors meme que l'UID de l'appelant est 0 ; ne pas verifier la valeur renvoyee par setuid() pour detecter un echec est une grave erreur qui compromet la securite du systeme. ERREURS EAGAIN L'appel voudrait changer l'identifiant (UID) reel de l'appelant (c'est-a-dire que uid ne correspond pas a l'UID reel de l'appelant), mais une erreur temporaire est survenue lors de l'allocation des structures de donnees du noyau necessaires a l'operation. EAGAIN uid ne correspond pas a l'UID reel de l'appelant et suite a cet appel, le nombre de processus appartenant a l'utilisateur dont l'identifiant reel est uid depasserait la limite de ressources RLIMIT_NPROC de l'appelant. A partir de Linux 3.1, cette erreur ne peut plus se produire (neanmoins, les applications rigoureuses doivent verifier que l'erreur ne s'est pas produite) ; consultez la description de EAGAIN dans execve(2). EINVAL L'identifiant utilisateur indique dans uid n'est pas valable dans cet espace de noms utilisateur. EPERM L'utilisateur n'est pas privilegie (sous Linux : n'a pas la capacite CAP_SETUID dans son espace de noms utilisateur) et uid ne correspond ni a l'UID reel, ni au set-uid sauve du processus appelant. VERSIONS Differences entre bibliotheque C et noyau Au niveau du noyau, les identifiants d'utilisateur et de groupe representent un attribut par thread. Cependant, POSIX exige que tous les threads d'un processus partagent les memes droits. L'implementation du threading de la NPTL satisfait aux exigences de POSIX a l'aide de fonctions d'enveloppe pour les differents appels systeme qui modifient des UID ou des GID de processus. Ces fonctions d'enveloppe (dont celles autour de setuid()) utilisent des techniques basees sur le signal pour s'assurer que lorsqu'un thread modifie les droits, tous les autres threads du processus le font egalement pour leur compte. Pour des details, consultez nptl(7). STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, SVr4. Pas tout a fait compatible avec l'appel systeme 4.4BSD, qui positionne l'ensemble des ID reel, sauve et effectif. L'appel systeme setuid() original de Linux ne gerait que des identifiants d'utilisateur sur 16 bits. En consequence, Linux 2.4 a ajoute setuid32() qui prend en charge des identifiants 32 bits. La fonction setuid() de la glibc qui l'encapsule gere de maniere transparente ces differences entre noyaux. NOTES Linux dispose d'un concept d'UID de systeme de fichiers qui est normalement egal a l'UID effectif. L'appel setuid() definit egalement l'UID de systeme de fichiers du processus appelant. Consultez setfsuid(2). Si l'uid est different de l'ancien UID effectif, le processus ne pourra pas laisser d'image memoire (core dump) sur le disque. VOIR AUSSI getuid(2), seteuid(2), setfsuid(2), setreuid(2), capabilities(7), credentials(7), user_namespaces(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Cedric Boutillier , Frederic Hantrais et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 setuid(2)