SETREUID(2)

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

SYNOPSIS
#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 (consulter feature_test_macros(7)) :

setreuid(), setregid() :
    _XOPEN_SOURCE >= 500
        || /* Depuis la glibc 2.19 : */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19 : */ _BSD_SOURCE

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é (c'est-à-dire si ruid est différent de -1), ou si l'UID effectif a avec une valeur différente de l'UID réel précédent, le set-uid sauvegardé prendra également 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.

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, setreuid() peut échouer alors même que l'UID de l'appelant est 0 ; ne pas vérifier la valeur renvoyée par setreuid() pour détecter un échec est une grave erreur qui compromet la sécurité du système.

ERREURS

EAGAIN
    L'appel a changé l'identifiant (UID) réel de l'appelant (c'est à dire que ruid ne correspond pas à l'UID réel de l'appelant), mais une erreur temporaire est survenue lors de l'allocation des structures de données du noyau nécessaires à l'opération.

EAGAIN
    ruid 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 ruid a dépassé la limite de ressources RLIMIT_NPROC de l'appelant. A partir de Linux 3.1, cette erreur ne peut plus se produire (néanmoins, les applications sérieuses doivent vérifier 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 privilégié (sous Linux, il n'a pas les capacités nécessaires 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 été demandées autres que (1) l'échange de l'UID (resp. GID) effectif avec l'UID (resp. GID) réel, (2) la définition de la valeur de l'une avec celle de l'autre ou (3) la définition de l'UID (resp. GID) effectif avec la valeur de l'UID (resp. GID) sauvée.

CONFORMITÉ
POSIX.1-2001, POSIX.1-2008, 4.3BSD (setreuid() et setregid() sont apparues dans 4.2BSD).

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.

  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 de threading de NPTL satisfait aux exigences de POSIX à l'aide de fonctions enveloppes pour les différents appels système qui modifient des UID ou des GID de processus. Ces fonctions enveloppes (dont celles autour de setreuid() et de setregid()) "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
getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7)

COLOPHON
Cette page fait partie de la publication 5.13 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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