Date création : 27-03-2008 20:23:44
 Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]
ACCESS
Index
- NOM
- SYNOPSIS
- DESCRIPTION
- VALEUR RENVOYÉE
- ERREURS
- RESTRICTIONS
- CONFORMITÉ
- VOIR AUSSI
- TRADUCTION
NOM
access - Vérifier les permissions d'accès à un fichier
SYNOPSIS
#include <unistd.h>
int access(const char *pathname, int mode);
DESCRIPTION
access() vérifie si le processus serait autorisé à lire, écrire,
exécuter, ou tester l'existence d'un fichier (ou d'un autre objet
appartenant au système de fichiers), dont le nom est pathname. Si
pathname est un lien symbolique, ce sont les permissions du fichier
pointé par celui-ci qui sont testées.
mode est un masque constitué des arguments liés par un OU binaire « | »
R_OK, W_OK, X_OK et F_OK.
Les requêtes R_OK, W_OK et X_OK servent respectivement à tester la
lecture, l'écriture, et l'exécution du fichier. La requête F_OK teste
l'existence du fichier.
Les tests dépendent des permissions des répertoires apparaissant dans le
chemin pathname et éventuellement des cibles des liens symboliques
rencontrés sur ce chemin.
Le test est effectué avec les UID et GID réels du processus, plutôt
qu'avec les IDs effectifs qui sont utilisés lorsque l'on tente
l'opération. Ceci permet aux programmes Set-UID de déterminer les
autorisations de l'utilisateur ayant invoqué le programme.
Seuls les bits d'accès sont vérifiés, et non pas le contenu du
fichier. Ainsi, l'autorisation d'écriture dans un répertoire indique 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 évidemment.
Si le processus a les privilèges suffisants, une implémentation peut
indiquer un succès pour X_OK même si le fichier n'a aucun bit d'exécution
positionné.
VALEUR RENVOYÉE
L'appel renvoie 0 s'il réussit (toutes les requêtes sont autorisées), ou -1
s'il échoue (au moins une requête du mode est interdite), auquel cas
errno contient le code d'erreur.
ERREURS
access() doit échouer si :
- EACCES
-
L'accès serait refusé au fichier lui-même, ou il n'est pas permis de
parcourir l'un des répertoires du préfixe du chemin de pathname. (Voir
aussi path_resolution(2).)
- ELOOP
-
Trop de liens symboliques ont été rencontrés en parcourant pathname.
- ENAMETOOLONG
-
pathname est trop long.
- ENOENT
-
Un répertoire contenu dans le pathname aurait été accessible mais
n'existe pas, ou est un lien symbolique pointant dans le vide.
- ENOTDIR
-
Un élément utilisé dans le chemin pathname n'est pas un répertoire.
- EROFS
-
On demande une écriture sur un système de fichiers en lecture seule.
access() peut échouer si :
- EFAULT
-
pathname pointe en-dehors de l'espace d'adressage accessible.
- EINVAL
-
mode était mal spécifié.
- EIO
-
Une erreur d'entrée-sortie s'est produite.
- ENOMEM
-
Pas assez de mémoire pour le noyau.
- ETXTBSY
-
On a demandé l'écriture dans un fichier exécutable qui en cours
d'utilisation.
RESTRICTIONS
access() renvoie une erreur si l'un des types d'accès est refusé, même si
les autres sont acceptés.
access() peut fonctionner incorrectement sur un serveur NFS 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érifications
d'autorisation.
Utiliser access() 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 effet, l'utilisateur
peut exploiter le petit intervalle de temps entre la vérification et l'accès
pour modifier le fichier (via un lien symbolique en général).
CONFORMITÉ
SVr4, POSIX.1-2001, BSD 4.3.
VOIR AUSSI
chmod(2), chown(2), faccessat(2), open(2),
path_resolution(2), setgid(2), setuid(2), stat(2)
TRADUCTION
Cette page de manuel a été traduite et mise à jour par
Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003,
puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions
disponibles sur http://manpagesfr.free.fr/,
mais est gérée par l'équipe francophone de traduction de Debian
au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction par un rapport de bogue sur
le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en
utilisant la commande
« man -L C <section> <page_de_man> ».
|