oracular (2) setfsuid.2.gz

Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       setfsuid - Définir l'UID pour les vérifications d'accès au système de fichiers

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <sys/fsuid.h>

       [[obsolète]] int setfsuid(uid_t fsuid);

DESCRIPTION

       Sur  Linux,  un  processus  a un identifiant utilisateur pour le système de fichiers et un
       identifiant  utilisateur  effectif.  L'identifiant  utilisateur  du  système  de  fichiers
       (spécifique  à  Linux) est utilisé pour valider les droits lors de l'accès aux systèmes de
       fichiers, alors que l'identifiant utilisateur effectif est utilisé pour d'autres types  de
       validations de droits (voir credentials(7)).

       Normalement,  la valeur de l'identifiant utilisateur de système de fichiers d'un processus
       est la même que celle de son identifiant utilisateur effectif. Cela car à chaque fois  que
       l'identifiant  utilisateur  effectif est modifié, le noyau change l'identifiant de système
       de fichiers pour lui donner la même valeur que celle du nouvel  identifiant  d'utilisateur
       effectif.  Un  processus peut faire diverger ces deux identifiants en utilisant setfsuid()
       pour passer son identifiant utilisateur de système de fichiers à  la  valeur  donnée  dans
       fsuid.

       Les appels explicites à setfsuid() et à setfsgid(2) ne sont (n'étaient) normalement utiles
       qu'aux programmes tels que le serveur NFS qui ont besoin  de  modifier  l’UID  et  le  GID
       utilisé  pour  les accès aux fichiers sans changer véritablement leurs UID et GID réels et
       effectifs. Une modification des identifiants normaux d'un programme comme un  serveur  NFS
       serait  un  trou  de  sécurité  qui  l'exposerait à des signaux indésirables (néanmoins ce
       problème est historique ; voir ci-dessous).

       setfsuid() ne réussira que si l'appelant est le superutilisateur ou si fsuid correspond  à
       l'UID  réel  de  l'appelant, à son UID effectif, à son UID sauvé, ou encore à la valeur de
       l'UID au niveau du système de fichier au moment de l'appel.

VALEUR RENVOYÉE

       En cas de succès comme en cas d'échec, l'appel renvoie la dernière valeur de l'identifiant
       utilisateur (UID) de l'appelant dans le système de fichiers.

STANDARDS

       Linux.

HISTORIQUE

       Linux 1.2.

       Lorsque  cet  appel  système  a été introduit, un processus pouvait envoyer un signal à un
       autre processus avec le même identifiant utilisateur effectif. Cela avait pour conséquence
       que si un processus disposant de privilèges changeait son identifiant utilisateur effectif
       afin de valider les droits d'un fichier, il était susceptible de recevoir des signaux d'un
       autre  processus  (ne  disposant  pas de privilèges) avec le même identifiant utilisateur.
       Pour cette raison, l'attribut ID utilisateur a été  introduit  au  niveau  du  système  de
       fichiers  pour  permettre à un processus de changer son identifiant utilisateur et valider
       les droits d'un fichier, sans pour  autant  devenir  vulnérable  au  signaux  envoyés  par
       d'autres  processus. À partir de Linux 2.0, la prise en charge des permissions des signaux
       a évolué (consultez kill(2)), de sorte que la modification d'un processus  puisse  changer
       l'ID  utilisateur effectif sans pour autant rendre le processus vulnérable aux signaux non
       sollicités  envoyés  par  d'autres  processus.  Ainsi,  setfsuid()  n'est  désormais  plus
       nécessaire  et  on  doit éviter d'y avoir recours dans les nouvelles applications (de même
       qu'on évitera d'utiliser setfsgid(2)).

       L'appel système setfsuid() originel de Linux ne gérait que des identifiants  d'utilisateur
       sur  16 bits.  En  conséquence,  Linux 2.4  a  ajouté setfsuid32() qui prend en charge des
       identifiants 32 bits. La fonction setfsuid() de la glibc qui l'encapsule gère  de  manière
       transparente ces différences entre noyaux.

   Différences entre bibliothèque C et noyau
       Dans  la  glibc  2.15 et les versions précédentes, lorsque l'enveloppe autour de cet appel
       système détermine que l'argument ne peut pas être passé au noyau sans tronquer  un  entier
       (le  noyau  étant  ancien  et ne gérant pas les identifiants utilisateur en 32 bits), elle
       renverra -1 et positionnera errno sur EINVAL sans essayer l'appel système.

BOGUES

       Aucune indication concernant l'erreur n'est renvoyée à l'appelant et le fait que  la  même
       valeur  soit  retournée  en  cas de succès ou d'échec ne permet pas de savoir si l'appel a
       réussi ou échoué. Pour cela, l'appelant devra se référer à la valeur renvoyée par un appel
       ultérieur  par  exemple  à  setfsuid(-1)  (qui  échouera toujours). Cet appel permettra de
       savoir si un appel antérieur à setfsuid() a changé l'identifiant utilisateur au niveau  du
       système  de  fichiers. Au minimum, EPERM doit être renvoyé lorsque l'appel échoue (puisque
       l'appelant ne dispose pas des privilèges CAP_SETUID).

VOIR AUSSI

       kill(2), setfsgid(2), capabilities(7), credentials(7)

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⟩.