setresuid(2) System Calls Manual setresuid(2) NOM setresuid, setresgid - Definir les UID ou les GID reel, effectif et sauve BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include int setresuid(uid_t ruid, uid_t euid, uid_t suid); int setresgid(gid_t rgid, gid_t egid, gid_t sgid); DESCRIPTION setresuid() definit l'UID reel, effectif et (effectif) sauve du processus appelant. Un processus non privilegie peut definir son UID reel, effectif ou sauve, chacun etant : l'UID actuel, l'UID effectif actuel ou l'UID sauve. Un processus privilegie (sous Linux, qui a la capacite CAP_SETUID) peut positionner son UID reel, effectif ou sauve a une valeur quelconque. Si l'un des parametres vaut -1, la valeur correspondante n'est pas modifiee. Independamment des changements concernant les UID reels, effectifs et sauves, le fsuid est toujours defini a la meme valeur que l'UID effectif. De maniere analogue, setresgid() definit le GID reel, effectif et sauve du processus appelant (et definit toujours le fsgid a la meme valeur que le GID effectif) avec les memes restrictions pour les processus n'ayant aucun GID nul. 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, setresuid() peut echouer alors meme que l'UID de l'appelant est 0 ; ne pas verifier la valeur renvoyee par setresuid() pour detecter un echec est une grave erreur qui compromet la securite du systeme. ERREURS EAGAIN L'appel a change l'identifiant (UID) reel de l'appelant (c'est a dire que ruid 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 ruid 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 ruid a depasse 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 serieuses doivent verifier 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'a pas de privileges (n'a pas la capacite necessaire dans son espace de noms utilisateur) et essaie de modifier ses ID de maniere interdite. Pour setresuid(), la capacite necessaire est CAP_SETUID.Pour setresgid(), c'est CAP_SETGID. 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 de threading de NPTL satisfait aux exigences de POSIX a l'aide de fonctions enveloppes pour les differents appels systeme qui modifient des UID ou des GID. Ces fonctions enveloppe (dont celles autour de setresuid() et de setresgid()) 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 Aucun. HISTORIQUE Linux 2.1.44, glibc 2.3.2. HP-UX, FreeBSD. Les appels systeme setresuid() et setresgid() originaux de Linux ne geraient que des identifiants d'utilisateur et de groupe sur 16 bits. En consequence, Linux 2.4 a ajoute setresuid32() et setresgid32() qui prennent en charge des identifiants 32 bits. Les fonctions setresuid() et setresgid() de la glibc qui les encapsulent gerent de maniere transparente ces differences entre noyaux. VOIR AUSSI getresuid(2), getuid(2), setfsgid(2), setfsuid(2), setreuid(2), setuid(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 setresuid(2)