1. NOM

setreuid, setregid - Définir les UID et GID effectifs et/ou réels

2. SYNOPSIS

#include <sys/types.h>
#include <unistd.h>

int setreuid(uid_t ruid, uid_t euid);
int setregid(gid_t rgid, gid_t egid);

Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

setreuid(), setregid() : _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

3. DESCRIPTION

setreuid() définit les ID d'utilisateur effectif et réel du processus appelant. Fournir une valeur -1 pour l'un des arguments demande au système de ne pas modifier l'ID correspondant Les processus non privilégiés peuvent seulement définir leur UID effectif à la valeur de l'UID réel, de l'UID effectif ou de l'UID sauvé. Les utilisateurs non privilégiés peuvent seulement définir l'UID réel à la valeur de l'UID réel ou de l'UID effectif. Si l'UID réel est changé, ou si l'UID effectif est rempli avec une valeur différente de l'UID réel précédent, le set-uid sauvé sera également rempli avec la valeur du nouvel UID effectif. De manière analogue, setregid() définit les ID de groupe du processus appelant, et toutes les remarques précédentes s'appliquent, en remplaçant GID par UID.

4. VALEUR RENVOYÉE

S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit errno en conséquence.

5. ERREURS

  • EPERM
        Le processus appelant n'est pas privilégié (sous Linux : n'a pas la capacité CAP_SETUID dans le cas de setreuid(), ou la capacité CAP_SETGID dans le cas de setregid()), des modifications ont été demandées autres que (i) l'échange de l'UID (resp. GID) effectif avec l'UID (GID) réel, (ii) la copie d'un UID (GID) dans un autre, ou (iii) le remplissage de l'UID (GID) effectif avec la valeur de l'UID (GID) sauvé.

6. CONFORMITÉ

POSIX.1-2001, BSD 4.3 (les fonctions setreuid() et setregid() sont apparues dans BSD 4.2).

7. NOTES

Définir l'UID (GID) effectif avec la valeur de l'UID (GID) sauvé est possible depuis Linux 1.1.37 (1.1.38). POSIX.1 ne donne pas tous les changements d'identifiants qui sont autorisés sous Linux pour un processus non privilégié. Pour setreuid(), l'identifiant d'utilisateur effectif peut être celui de l'identifiant d'utilisateur réel ou celui de l'identifiant d'utilisateur sauvé. Il n'est pas indiqué si des processus non privilégiés peuvent changer l'identifiant d'utilisateur réel en l'identifiant d'utilisateur effectif ou en celui sauvé. Pour setregid(), l'identifiant de groupe réel peut être changé en la valeur de l'identifiant de groupe sauvé, et l'identifiant de groupe effectif peut être changé en la valeur de l'identifiant de groupe réel ou de celui sauvé. Les détails précis sur les changements d'identifiants autorisés varient en fonction de l'implémentation. POSIX.1 ne dit rien de l'effet de ces appels sur les set-user-ID et set-group-ID sauvés. Les appels système setreuid() et setregid() originaux de Linux ne géraient que des identifiants d'utilisateur et de groupe sur 16 bits. En conséquence, Linux 2.4 a ajouté setreuid32() et setregid32() qui prennent en charge des identifiants 32 bits. Les fonctions setreuid() et setregid() de la glibc qui les encapsulent gèrent de manière transparente ces différences entre noyaux.

8. VOIR AUSSI

getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7)

9. COLOPHON

Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

10. TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à < >.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».