ACCESS(2) Manuel du programmeur Linux ACCESS(2)
NOM
access - Vérifier les permissions d'accès à un fichier.
SYNOPSIS
#include
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 liens symboliques rencontrés
sur ce chemin.
Le test est effectué avec les User-ID et Group-ID 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 si l'autorisation d'écriture dans un répertoire, indique la pos‐
sibilité d'y créer des fichiers, et pas 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 per‐
mis de parcourir l'un des répertoires de pathname.
ELOOP Trop de liens symboliques ont été rencontrés en parcourant path‐
name.
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 contenu dans le chemin pathname n'est pas un réper‐
toire.
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 Le noyau n'a pas assez de mémoire.
ETXTBSY
On a demandé l'écriture dans un fichier exécutable qui en cours
d'utilisation.
RESTRICTIONS
access renvoie une erreur si l'un quelconque 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 corre‐
spondances 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 exem‐
ple, 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É
SVID, AT&T, POSIX, X/OPEN, BSD 4.3
VOIR AUSSI
stat(2) open(2) chmod(2) chown(2) setuid(2) setgid(2).
TRADUCTION
Christophe Blaess, 1996-2003.
LDP 18 juillet 2003 ACCESS(2)