ACCESS(2) Manuel du programmeur Linux ACCESS(2)
access - Vrifier les permissions d'accs un fichier de l'utilisateur
rel
#include <unistd.h>
int access(const char *pathname, int mode);
access() vrifie si le processus appelant peut accder au fichier path-
name. Si pathname est un lien symbolique, il est drfrenc.
Le mode spcifie les vrifications d'accs effectuer. Il prend la valeur
F_OK ou un masque contenant un OU binaire d'une des valeurs 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 autorise respectivement la lecture, l'criture
et l'excution.
Le test est effectu avec les UID et GID rels du processus appelant,
plutt qu'avec les IDs effectifs qui sont utiliss lorsque l'on tente une
opration (comme open(2)) sur le fichier. Ceci permet aux programmes
Set-UID de dterminer les autorisations de l'utilisateur ayant invoqu le
programme.
Si le processus appelant est privilgi (c'est--dire son UID rel est
zro), alors une vrification X_OK russit pour un fichier rgulier si
l'excution est permise pour l'utilisateur propritaire, le groupe ou
pour les autres.
En cas de succs (toutes les permissions demandes sont autorises), 0 est
renvoy. En cas d'erreur (au moins une permission de mode est interdite
ou d'autres erreurs se sont produites), -1 est renvoy et errno contient
le code d'erreur.
access() doit chouer si :
EACCES L'accs serait refus au fichier lui-mme, ou il n'est pas permis
de parcourir l'un des rpertoires du prfixe du chemin de path-
name. (Voir aussi path_resolution(7).)
ELOOP Trop de liens symboliques ont t rencontrs en parcourant path-
name.
ENAMETOOLONG
pathname est trop long.
ENOENT Un composant du chemin d'accs pathname n'existe pas ou est un
lien symbolique pointant nulle part.
ENOTDIR
Un lment du chemin d'accs pathname n'est pas un rpertoire.
EROFS On demande une criture sur un systme de fichiers en lecture
seule.
access() peut chouer si :
EFAULT pathname pointe en-dehors de l'espace d'adressage accessible.
EINVAL mode tait mal spcifi.
EIO Une erreur d'entre-sortie s'est produite.
ENOMEM Pas assez de mmoire pour le noyau.
ETXTBSY
On a demand l'criture dans un fichier excutable qui est en cours
d'utilisation.
SVr4, BSD 4.3, POSIX.1-2001.
Attention : Utiliser access() pour vrifier si un utilisateur a le
droit, par exemple, d'ouvrir un fichier avant d'effectuer rellement
l'ouverture avec open(2), risque de crer un trou de scurit. En effet,
l'utilisateur peut exploiter le petit intervalle de temps entre la vri-
fication et l'accs pour modifier le fichier. Pour cette raison, l'util-
isation de cet appel systme devrait tre vit.
access() renvoie une erreur si l'un des types d'accs de mode est refus,
mme si d'autres types spcifis dans mode sont autoriss.
Si le processus appelant a les privilges suffisants (c'est--dire est
superutilisateur), POSIX.1-2001 permet une implmentation d'indiquer un
succs pour X_OK mme si le fichier n'a aucun bit d'excution positionn.
Un fichier n'est accessible que si les permissions de chacun des rper-
toires du prfixe du chemin pathname permet les recherches (c'est--dire
l'excution). Si un rpertoire est inaccessible, alors l'appel access()
chouera, sans tenir compte des permissions du fichier lui mme.
Seuls les bits d'accs sont vrifis, et non pas le contenu du fichier.
Ainsi, l'autorisation d'criture dans un rpertoire indique la possibilit
d'y crer des fichiers et non d'y crire comme dans un fichier. De mme,
un fichier DOS peut tre considr comme excutable, alors que l'appel
execve(2) chouera videmment.
access() peut fonctionner incorrectement sur un serveur NFS si les cor-
respondances d'UID sont actives, car ces correspondances sont gres par
le serveur, et masques au client qui effectue les vrifications
d'autorisation.
Dans le noyau 2.4 (et auparavant) les tests X_OK sont grs de faon
bizarre pour le superutilisateur. Si toutes les catgories de permission
d'excution sont dsactives pour un fichier (n'tant pas un rpertoire),
access() ne renvoie -1 que si le mode est juste X_OK ; si R_OK ou W_OK
est galement prcis dans le mode, access() renvoyait 0 pour ce fichier.
Les premier noyaux 2.6 (jusqu' la version 2.6.3) se comportaient de la
mme faon que les noyaux 2.4.
Dans les noyaux antrieurs 2.6.20, access() ignorait l'effet de
l'attribut MS_NOEXEC s'il tait utilis pour monter le systme de fichiers
correspondant (avec mount(2)). Depuis Linux 2.6.20, access() prend en
compte cet attribut.
chmod(2), chown(2), faccessat(2), open(2), setgid(2), setuid(2),
stat(2), euidaccess(3), credentials(7), path_resolution(7)
Cette page fait partie de la publication 3.07 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent tre trouves l'adresse
http://www.kernel.org/doc/man-pages/.
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, et mise disposi-
tion sur http://manpagesfr.free.fr/.
Les mises jour et corrections de la version prsente dans Debian sont
directement gres par Julien Cristau <jcristau [AT] debian.org> et l'quipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en crivant
<debian-l10n-french [AT] lists.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accs la version anglaise de ce document en
utilisant la commande man -L C <section> <page_de_man> .
Linux 10 juillet 2007 ACCESS(2)