dwww Home | Manual pages | Find package

access.(2)                    System Calls Manual                   access.(2)

NOM
       access,  faccessat,  faccessat2  - Vérifier les permissions utilisateur
       d'un fichier

BIBLIOTHÈQUE
       Bibliothèque C standard (libc, -lc)

SYNOPSIS
       #include <unistd.h>

       int access(const char *chemin, int mode);

       #include <fcntl.h>            /* Définition des constantes AT_* */
       #include <unistd.h>

       int faccessat(int dirfd, const char *chemin, int mode, int argument);
                       /* Mais voir les différences entre la bibliothèque C
                          et le noyau ci-dessous. */

       #include <fcntl.h>            /* Définition des constantes AT_* */
       #include <sys/syscall.h>      /*  Définition des constantes
                                                     SYS_* */
       #include <unistd.h>

       int syscall(SYS_faccessat2,
                   int dirfd, const char *pathname, int mode, int flags);

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

       faccessat() :
           Depuis la version 2.10 de la glibc :
               _POSIX_C_SOURCE >= 200809L
           Avant la version 2.10 de la glibc :
               _ATFILE_SOURCE

DESCRIPTION
       access()  vérifie si le processus appelant peut accéder au fichier che-
       min. Si chemin est un lien symbolique, il est déréférencé.

       Le mode indique les vérifications d'accès à effectuer. Il prend la  va-
       leur  F_OK  ou  un masque contenant un OU binaire d'une ou plus des va-
       leurs R_OK, W_OK et X_OK. F_OK teste l'existence du fichier. R_OK, W_OK
       et  X_OK  testent  si le fichier existe et autorisent respectivement la
       lecture, l'écriture et l'exécution.

       Le test est effectué avec les UID et GID réels du  processus  appelant,
       plutôt  qu'avec  les  ID effectifs qui sont utilisés lorsque l'on tente
       une opération (comme open(2)) sur le fichier. De la même manière,  pour
       le  superutilisateur, le test utilise un ensemble de capacités permises
       plutôt que l’ensemble des capacités effectives, et  pour  les  utilisa-
       teurs non privilégiés, le test utilise un ensemble vierge de capacités.

       Cela  permet  aux programmes Setuid et dotés de capacités de déterminer
       les autorisations de  l'utilisateur  ayant  invoqué  le  programme.  En
       d'autres  termes,  access()  ne  répond  pas  à  la  question « puis-je
       lire/écrire/exécuter ce fichier ? ». Il répond à une  question  légère-
       ment  différente : « en supposant que je suis un binaire Setuid, l'uti-
       lisateur qui m'a appelé peut-il lire/écrire/exécuter ce fichier ? », ce
       qui  donne aux programmes Setuid la possibilité d'empêcher des utilisa-
       teurs malveillants de lire des fichiers qu'un  utilisateur  ne  devrait
       pas lire.

       Si  le processus appelant est privilégié (c'est-à-dire son UID réel est
       zéro), alors une vérification X_OK réussit pour un fichier régulier  si
       l'exécution  est  permise pour l'utilisateur propriétaire, le groupe ou
       pour les autres.

   faccessat()
       faccessat() opère exactement de la même manière que  access(),  excepté
       les différences décrites ici.

       Si  le  nom de chemin fourni dans chemin est relatif, il est interprété
       relativement au répertoire référencé  par  le  descripteur  de  fichier
       dirfd (plutôt que relativement au répertoire de travail courant du pro-
       cessus appelant, comme cela est fait par access() pour un chemin  rela-
       tif).

       Si  chemin  est  relatif  et que dirfd est la valeur spéciale AT_FDCWD,
       chemin est interprété relativement au répertoire de travail courant  du
       processus appelant (comme avec access()).

       Si pathname est absolu, alors dirfd est ignoré.

       argument  est  construit  en réalisant un OU logique entre zéro ou plu-
       sieurs des valeurs suivantes :

       AT_EACCESS
              Réaliser les vérifications d'accès en utilisant les UID  et  GID
              effectifs.  Par  défaut, faccessat() utilise les ID réels (comme
              access()).

       AT_SYMLINK_NOFOLLOW
              Si chemin est un lien symbolique, ne pas le  déréférencer,  mais
              renvoyer des informations sur le lien lui-même.

       Consultez  openat(2)  pour  une explication sur la nécessité de facces-
       sat().

   faccessat2()
       La description de faccessat() donnée ci-dessus correspond à POSIX.1  et
       à  l'implémentation  fournie dans la glibc. Cependant, l'implémentation
       de la glibc était une émulation imparfaite (voir BOGUES)  qui  masquait
       le  fait  que  l'appel système faccessat() brut de Linux n'a pas de pa-
       ramètre argument. Pour avoir une implémentation correcte,  Linux 5.8  a
       ajouté  l'appel  système faccessat2() qui gère le paramètre argument et
       permet une bonne implémentation de la fonction enveloppe faccessat().

VALEUR RENVOYÉE
       En cas de succès (toutes les permissions demandées sont  accordées,  ou
       mode  vaut  F_OK  et le fichier existe), 0 est renvoyé. En cas d'erreur
       (au moins une permission de mode est refusée, ou mode vaut F_OK  et  le
       fichier  n'existe  pas,  ou d'autres erreurs se sont produites), -1 est
       renvoyé et errno est positionné pour indiquer l'erreur.

ERREURS
       EACCES L'accès est refusé au fichier lui-même, ou il n'est  pas  permis
              de  parcourir l'un des répertoires du préfixe de chemin (consul-
              tez aussi path_resolution(7)).

       EBADF  (faccessat())  pathname  est  relatif  mais  dirfd  ne  vaut  ni
              AT_FDCWD (faccessat()), ni un descripteur de fichier valable.

       EFAULT nom_chemin pointe en dehors de l'espace d'adressage accessible.

       EINVAL mode était mal indiqué.

       EINVAL (faccessat()) Attribut non valable indiqué dans flags.

       EIO    Une erreur d'entrée-sortie s'est produite.

       ELOOP  Trop  de  liens  symboliques  ont  été  rencontrés en parcourant
              nom_chemin.

       ENAMETOOLONG
              nom_chemin est trop long.

       ENOENT Un composant du chemin d'accès chemin n'existe  pas  ou  est  un
              lien symbolique pointant nulle part.

       ENOMEM La mémoire disponible du noyau n'était pas suffisante.

       ENOTDIR
              Un élément, utilisé comme répertoire, du chemin d'accès nom_che-
              min n'est pas en fait un répertoire.

       ENOTDIR
              (faccessat()) pathname est relatif et dirfd est  un  descripteur
              de  fichier faisant référence à un fichier qui n'est pas un dos-
              sier.

       EPERM  Une écriture est demandée sur un fichier où un attribut immuable
              est positionné. Voir aussi ioctl_iflags(2).

       EROFS  Une  écriture est demandée sur un système de fichiers en lecture
              seule.

       ETXTBSY
              Une écriture a été demandée dans un fichier exécutable  qui  est
              en cours d'utilisation.

VERSIONS
       faccessat()  a  été ajouté dans Linux 2.6.16 ; la prise en charge de la
       bibliothèque a été ajouté dans la glibc 2.4.

       faccessat2() a été ajouté à Linux 5.8.

STANDARDS
       access() : SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.

       faccessat() : POSIX.1-2008.

       faccessat2() : spécifique à Linux

NOTES
       Attention : Utiliser ces appels pour vérifier si un  utilisateur  a  le
       droit,  par  exemple,  d'ouvrir un fichier avant d'effectuer réellement
       l'ouverture avec open(2), risque de créer un trou de sécurité.  En  ef-
       fet, l'utilisateur peut exploiter le petit intervalle de temps entre la
       vérification et l'accès pour modifier le fichier.  Pour  cette  raison,
       l'utilisation  de  cet  appel  système  devrait  être  évitée (dans cet
       exemple, une alternative plus sûre serait  de  basculer  temporairement
       l'identifiant  effectif  de  l'utilisateur  vers  l'identifiant réel et
       d'appeler open(2)).

       La fonction access() déréférence toujours  les  liens  symboliques.  Si
       vous  avez besoin de vérifier les droits sur un lien symbolique, utili-
       sez faccessat(2) avec l'attribut AT_SYMLINK_NOFOLLOW.

       Ces appels renvoient une erreur si l'un des types d'accès de  mode  est
       refusé, même si d'autres types indiqués dans mode sont autorisés.

       Si  le processus appelant a les privilèges suffisants (c'est-à-dire est
       superutilisateur), POSIX.1-2001 permet à une implémentation  d'indiquer
       un  succès pour X_OK même si le fichier n'a aucun bit d'exécution posi-
       tionné. Linux ne le permet pas.

       Un fichier n'est accessible que si les permissions de chacun des réper-
       toires  du  préfixe  du  chemin permettent les recherches (c'est-à-dire
       l'exécution). Si un répertoire est inaccessible, alors  l'appel  à  ac-
       cess() échouera, sans tenir compte des permissions du fichier lui-même.

       Seuls  les  bits  d'accès sont vérifiés et non le type ou le contenu du
       fichier. Ainsi, l'autorisation d'écriture dans  un  répertoire  indique
       probablement  la  possibilité  d'y créer des fichiers et non d'y écrire
       comme dans un fichier. De même, un  fichier  DOS  peut  être  considéré
       comme exécutable, alors que l'appel execve(2) échouera toujours.

       Ces  appels  peuvent fonctionner incorrectement sur un serveur NFSv2 si
       les correspondances d'UID sont activées, car ces  correspondances  sont
       gérées  par le serveur et masquées au client qui effectue les vérifica-
       tions d'autorisation. Ces vérifications sont effectuées sur le  serveur
       pour  les  versions 3  et  supérieures de NFS. Des problèmes similaires
       peuvent survenir avec les montages FUSE.

   différences entre bibliothèque C et noyau
       L’appel système brut faccessat() n’accepte que les trois premiers argu-
       ments. Les attributs AT_EACCESS et AT_SYMLINK_NOFOLLOW sont en fait im-
       plémentés dans la fonction enveloppe de la glibc pour  faccessat().  Si
       un  de  ces  attributs est indiqué, la fonction enveloppe utilise fsta-
       tat(2) pour déterminer les droits d'accès, mais voir BOGUES.

   Notes de la glibc
       Sur les anciens noyaux où faccessat() n'est pas  disponible  (et  quand
       les attributs AT_EACCESS et AT_SYMLINK_NOFOLLOW ne sont pas spécifiés),
       la fonction enveloppe de la glibc se rabat sur access().  Quand  chemin
       est  un  chemin  relatif, la glibc construit un chemin à partir du lien
       symbolique dans /proc/self/fd qui correspond au paramètre dirfd.

BOGUES
       L'appel système faccessat() du noyau Linux ne prenant pas en charge  le
       paramètre  argument,  la fonction enveloppe faccessat() fournie dans la
       glibc 2.32 et antérieure émule la fonctionnalité nécessaire  en  utili-
       sant  une  combinaison de l'appel système faccessat() et de fstatat(2).
       Mais cette émulation ne prend pas en charge les ACL (listes de contrôle
       d'accès).  À  partir  de  la glibc 2.33, la fonction enveloppe évite ce
       bogue en utilisant l'appel système faccessat2() là où il est fourni par
       le noyau sous-jacent.

       Dans  Linux 2.4  (et auparavant) les tests X_OK sont gérés de façon bi-
       zarre pour le superutilisateur. Si toutes les catégories de  permission
       d'exécution  sont  désactivées  pour  un fichier (n'étant pas un réper-
       toire), access() ne renvoie -1 que si le mode est juste X_OK ; si  R_OK
       ou  W_OK est également précisé dans le mode, access() renvoie 0 pour ce
       fichier. Les premiers Linux 2.6 (jusqu'à Linux 2.6.3)  se  comportaient
       de la même façon que Linux 2.4.

       Avant   Linux 2.6.20,  ces  appels  ignoraient  l'effet  de  l'attribut
       MS_NOEXEC s'il  était  utilisé  pour  monter  le  système  de  fichiers
       sous-jacent  (avec mount(2)). Depuis Linux 2.6.20, l'attribut MS_NOEXEC
       est pris en compte.

VOIR AUSSI
       chmod(2), chown(2), open(2),  setgid(2),  setuid(2),  stat(2),  euidac-
       cess(3), credentials(7), path_resolution(7), symlink(7)

TRADUCTION
       La  traduction française de cette page de manuel a été créée par Chris-
       tophe Blaess <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <ste-
       phan.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.cou-
       lon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>,  Thomas  Huriaux
       <thomas.huriaux@gmail.com>,  Nicolas François <nicolas.francois@centra-
       liens.net>, Florentin Duneau <fduneau@gmail.com>, Simon  Paillard  <si-
       mon.paillard@resel.enst-bretagne.fr>,    Denis   Barbier   <barbier@de-
       bian.org>, David Prévot <david@tilapin.org>  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⟩.

Pages du manuel de Linux 6.03   5 février 2023                      access.(2)

Generated by dwww version 1.15 on Sat Jun 29 01:46:25 CEST 2024.