setreuid(2) System Calls Manual setreuid(2) NOM setreuid, setregid - Definir les UID et GID effectifs et/ou reels BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int setreuid(uid_t ruid, uid_t euid); int setregid(gid_t rgid, gid_t egid); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : setreuid(), setregid() : _XOPEN_SOURCE >= 500 || /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE || /* glibc <= 2.19 : */ _BSD_SOURCE DESCRIPTION setreuid() definit les ID d'utilisateur effectif et reel du processus appelant. Fournir une valeur -1 pour l'un des arguments demande au systeme de ne pas modifier l'ID correspondant Les processus non privilegies peuvent seulement definir leur UID effectif a la valeur de l'UID reel, de l'UID effectif ou de l'UID sauve. Les utilisateurs non privilegies peuvent seulement definir l'UID reel a la valeur de l'UID reel ou de l'UID effectif. Si l'UID reel est change (c'est-a-dire si ruid est different de -1), ou si l'UID effectif a avec une valeur differente de l'UID reel precedent, le set-uid sauvegarde prendra egalement la valeur du nouvel UID effectif. De maniere analogue, setregid() definit les ID de groupe du processus appelant, et toutes les remarques precedentes s'appliquent, en remplacant GID par UID. 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, setreuid() peut echouer alors meme que l'UID de l'appelant est 0 ; ne pas verifier la valeur renvoyee par setreuid() 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'est pas privilegie (sous Linux, il n'a pas les capacites necessaires dans son espace de noms utilisateur : CAP_SETUID dans le cas de setreuid(), ou CAP_SETGID dans le cas de setregid()), et des modifications ont ete demandees autres que (1) l'echange de l'UID (resp. GID) effectif avec l'UID (resp. GID) reel, (2) la definition de la valeur de l'une avec celle de l'autre ou (3) la definition de l'UID (resp. GID) effectif avec la valeur de l'UID (resp. GID) sauvee. VERSIONS POSIX.1 ne donne pas tous les changements d'identifiants qui sont autorises sous Linux pour un processus non privilegie. Pour setreuid(), l'identifiant d'utilisateur effectif peut etre celui de l'identifiant d'utilisateur reel ou celui de l'identifiant d'utilisateur sauve. Il n'est pas indique si des processus non privilegies peuvent changer l'identifiant d'utilisateur reel en l'identifiant d'utilisateur effectif ou en celui sauve. Pour setregid(), l'identifiant de groupe reel peut etre change en la valeur de l'identifiant de groupe sauve, et l'identifiant de groupe effectif peut etre change en la valeur de l'identifiant de groupe reel ou de celui sauve. Les details precis sur les changements d'identifiants autorises varient en fonction de l'implementation. POSIX.1 ne dit rien de l'effet de ces appels sur les set-user-ID et set-group-ID sauves. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, 4.3BSD (apparue dans 4.2BSD). Definir l'UID (GID) effectif avec la valeur de l'UID (GID) sauve est possible depuis Linux 1.1.37 (1.1.38). Les appels systeme setreuid() et setregid() originaux de Linux ne geraient que des identifiants d'utilisateur et de groupe sur 16 bits. En consequence, Linux 2.4 a ajoute setreuid32() et setregid32() qui prennent en charge des identifiants 32 bits. Les fonctions setreuid() et setregid() de la glibc qui les encapsulent gerent de maniere transparente ces differences entre noyaux. 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 de processus. Ces fonctions enveloppes (dont celles autour de setreuid() et de setregid()) "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). VOIR AUSSI getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(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.8 2 mai 2024 setreuid(2)