Man page - path_resolution(7)

Packages contains this manual

Available languages:

en fr pl ja ro de

Manual

path_resolution

NOM
DESCRIPTION
Étape 1 : dĂ©marrer le processus de rĂ©solution
Étape 2 : parcourir le chemin
Étape 3 : trouver l’entrĂ©e finale
. et ..
Points de montage
Barres obliques de fin
Lien symbolique final
Limite de longueur
Nom de chemin vide
Permissions
Contourner les vérifications de permissions : superutilisateur et capacités
VOIR AUSSI
TRADUCTION

NOM

path_resolution – Trouver le fichier auquel un chemin fait rĂ©fĂ©rence

DESCRIPTION

Certains appels systÚme UNIX/Linux ont pour paramÚtre un ou plusieurs noms de fichier. Un nom de fichier (ou chemin) est résolu de la maniÚre suivante.

Étape 1 : dĂ©marrer le processus de rĂ©solution

Si le chemin dĂ©bute par le caractĂšre « / », le rĂ©pertoire de recherche de dĂ©part est le rĂ©pertoire racine du processus appelant. Un processus hĂ©rite son rĂ©pertoire racine de son parent. Habituellement, c’est le rĂ©pertoire racine de la hiĂ©rarchie des fichiers. Un processus peut avoir un rĂ©pertoire racine diffĂ©rent avec l’utilisation de l’appel systĂšme chroot (2) ou peut temporairement utiliser un rĂ©pertoire racine diffĂ©rent en utilisant openat2 (2) avec l’attribut RESOLVE_IN_ROOT dĂ©fini.

Un processus peut obtenir un espace de noms montage complĂštement privĂ© dans le cas ou il — ou un de ses ancĂȘtres — a Ă©tĂ© dĂ©marrĂ© par une invocation de l’appel systĂšme clone (2) dont l’attribut CLONE_NEWNS est dĂ©fini. Cela gĂšre la partie « / » du chemin.

Si le chemin ne dĂ©bute pas par le caractĂšre « / », le rĂ©pertoire de recherche de dĂ©part du processus de rĂ©solution est le rĂ©pertoire courant du processus — ou dans le cas d’appel systĂšme du style openat (2), l’argument dfd (ou le rĂ©pertoire courant de travail si AT_FDCWD est passĂ© en tant qu’argument dfd ). Le rĂ©pertoire courant de travail est hĂ©ritĂ© du parent et peut ĂȘtre modifiĂ© avec l’appel systĂšme chdir (2).

Les chemins débutant par le caractÚre « / » sont appelés chemins absolus. Les chemins ne débutant pas par le caractÚre « / » sont appelés chemins relatifs.

Étape 2 : parcourir le chemin

DĂ©finir le rĂ©pertoire courant de recherche au rĂ©pertoire de dĂ©marrage de recherche. Puis pour chaque composant non terminal du chemin, oĂč un composant est une sous-chaine dĂ©limitĂ©e par des caractĂšres « / », ce composant est recherchĂ© dans le rĂ©pertoire courant de recherche.

Si le processus n’a pas les permissions nĂ©cessaires pour effectuer la recherche dans le rĂ©pertoire de recherche courant, une erreur EACCES est renvoyĂ©e (« Permission denied » : « Permission non accordĂ©e »).

Si le composant n’est pas trouvĂ©, une erreur ENOENT est renvoyĂ©e (« No such file or directory » : « Aucun fichier ou rĂ©pertoire de ce type »).

Si le composant est trouvĂ©, mais n’est ni un rĂ©pertoire ni un lien symbolique, une erreur ENOTDIR est renvoyĂ©e (« Not a directory » : « N’est pas un rĂ©pertoire »).

Si le composant est trouvé et est un répertoire, le répertoire de recherche courant devient ce répertoire et on passe au composant suivant.

Si le composant est trouvĂ© et est un lien symbolique, on rĂ©sout d’abord ce lien (avec le rĂ©pertoire de recherche courant comme rĂ©pertoire de recherche de dĂ©part). Si une erreur survient, cette erreur est renvoyĂ©e. Si le rĂ©sultat de la rĂ©solution n’est pas un rĂ©pertoire, une erreur ENOTDIR est renvoyĂ©e. Si la rĂ©solution du lien symbolique est couronnĂ©e de succĂšs et renvoie un rĂ©pertoire, le rĂ©pertoire de recherche courant devient ce rĂ©pertoire et on passe au composant suivant. Veuillez noter que le processus de rĂ©solution peut impliquer une rĂ©cursivitĂ© si le composant prĂ©fixe (« dirname ») du chemin contient un nom de fichier qui est un lien symbolique qui mĂšne Ă  un rĂ©pertoire (oĂč le composant prĂ©fixe de ce rĂ©pertoire peut contenir un lien symbolique, et ainsi de suite). Afin de protĂ©ger le noyau d’un dĂ©bordement de pile et Ă©galement d’un dĂ©ni de service, il y a des limites Ă  la profondeur maximale de rĂ©cursivitĂ© et au nombre maximal de liens symboliques suivis. Une erreur ELOOP est renvoyĂ©e lors ces maxima sont atteints (« Too many levels of symbolic links » : « Trop de niveaux de liens symboliques »).

Tel que mis en Ɠuvre dans Linux, le nombre maximal de liens symboliques pouvant ĂȘtre suivis pour la rĂ©solution de chemin est 40. Avant Linux 2.6.18, la limite de profondeur de rĂ©cursion Ă©tait 5. Depuis Linux 2.6.18, cette limite a Ă©tĂ© relevĂ©e à 8. Dans Linux 4.2, le code du noyau pour la rĂ©solution de chemin a Ă©tĂ© retravaillĂ© pour Ă©liminer l’utilisation de la rĂ©cursion, aussi la seule limite qui demeure est le maximum de 40 rĂ©solutions pour le chemin complet.

La rĂ©solution de liens symboliques dans cette Ă©tape peut ĂȘtre bloquĂ©e en utilisant openat2 (2), avec l’attribut RESOLVE_NO_SYMLINKS Ă©tabli.

Étape 3 : trouver l’entrĂ©e finale

La recherche du dernier composant du nom de chemin s’effectue de la mĂȘme maniĂšre que pour les autres composants, comme dĂ©crit dans l’étape prĂ©cĂ©dente, avec deux diffĂ©rences : (1) le composant final n’a pas besoin d’ĂȘtre un rĂ©pertoire (du moins tant que le processus de rĂ©solution du chemin est concernĂ© — il peut ĂȘtre ou ne pas ĂȘtre un rĂ©pertoire, suivant les exigences de l’appel systĂšme concernĂ©), et (2) ce n’est peut-ĂȘtre pas une erreur si le composant n’est pas trouvĂ© — peut-ĂȘtre vient-il juste d’ĂȘtre créé. Les dĂ©tails du traitement du composant final sont dĂ©crits dans les pages de manuel des appels systĂšme concernĂ©s.

. et ..

Par convention, chaque rĂ©pertoire possĂšde les entrĂ©es . et .. qui se rapportent, respectivement, au rĂ©pertoire lui-mĂȘme et Ă  son rĂ©pertoire parent.

Le processus de résolution de chemin considÚre que ces entrées ont leurs sens conventionnels, sans considération de leur existence ou non sur le systÚme de fichiers physique.

Il n’est pas possible de remonter au-dessus de la racine : /.. est identique à / .

Points de montage

AprĂšs une commande mount pĂ©riphĂ©rique chemin , le nom de chemin chemin fait rĂ©fĂ©rence Ă  la racine de la hiĂ©rarchie du systĂšme de fichiers sur le pĂ©riphĂ©rique , et plus du tout Ă  ce qu’il rĂ©fĂ©rençait prĂ©cĂ©demment.

On peut sortir d’un systĂšme de fichiers monté : chemin/.. fait rĂ©fĂ©rence au rĂ©pertoire parent de chemin , en dehors de la hiĂ©rarchie du systĂšme de fichiers sur pĂ©riphĂ©rique .

Le parcours de points de montage peut ĂȘtre bloquĂ© en utilisant openat2 (2) avec l’attribut RESOLVE_NO_XDEV Ă©tabli (remarquez cependant que cela restreint le parcours de montage « bind »).

Barres obliques de fin

Si un nom de chemin se termine par un « / », cela force la rĂ©solution du composant qui le prĂ©cĂšde comme dĂ©crit dans l’étape 2 : le composant avant l’oblique finale doit soit exister et ĂȘtre rĂ©solu comme rĂ©pertoire, soit Ă©voquer un rĂ©pertoire devant ĂȘtre créé immĂ©diatement aprĂšs la rĂ©solution du chemin. Autrement, un « / » final est ignorĂ©.

Lien symbolique final

Si le dernier composant d’un nom de chemin est un lien symbolique, cela dĂ©pend de l’appel systĂšme si le fichier rĂ©fĂ©rencĂ© sera le lien symbolique ou bien le rĂ©sultat de la rĂ©solution de chemin sur son contenu. Par exemple, l’appel systĂšme lstat (2) agit sur le lien symbolique alors que stat (2) agit sur le fichier pointĂ© par le lien symbolique.

Limite de longueur

Il existe une longueur maximale pour les noms de chemin. Si le chemin (ou un chemin intermédiaire obtenu en résolvant un lien symbolique) est trop long, une erreur ENAMETOOLONG est renvoyée (« Filename too long » : « Nom de fichier trop long »).

Nom de chemin vide

Dans l’UNIX d’origine, un nom de chemin vide faisait rĂ©fĂ©rence au rĂ©pertoire courant. Aujourd’hui, POSIX dĂ©crĂšte qu’un nom de fichier vide ne doit pas ĂȘtre rĂ©solu avec succĂšs. Linux renvoie ENOENT dans ce cas.

Permissions

Les bits de permissions d’un fichier consistent en trois groupes de trois bits, cf. chmod (1) et stat (2). Le premier de ces groupes est utilisĂ© lorsque l’UID effectif du processus appelant est Ă©gal Ă  l’ID du propriĂ©taire du fichier. Le deuxiĂšme de ces groupes est utilisĂ© lorsque le GID du fichier est soit Ă©gal au GID effectif du processus appelant, soit est un des GID supplĂ©mentaires du processus appelant (comme configurĂ© avec setgroups (2)). Lorsqu’aucun ne correspond, le troisiĂšme groupe est utilisĂ©.

Des trois bits utilisĂ©s, le premier dĂ©termine la permission de lecture, le deuxiĂšme la permission d’écriture et le dernier la permission d’exĂ©cution dans le cas d’un fichier ordinaire ou la permission de recherche dans le cas d’un rĂ©pertoire.

Linux utilise le fsuid Ă  la place de l’UID effectif lors de la vĂ©rification des permissions. D’ordinaire, le fsuid est Ă©gal Ă  l’UID effectif, mais le fsuid peut ĂȘtre modifiĂ© avec l’appel systĂšme setfsuid (2).

Ici, « fsuid » signifie quelque chose comme « ID utilisateur du systĂšme de fichiers » (« filesystem user ID »). Le concept Ă©tait requis pour l’implĂ©mentation d’un serveur NFS en espace utilisateur lorsque les processus pouvaient envoyer un signal Ă  un processus qui avait le mĂȘme UID effectif. Il est aujourd’hui obsolĂšte. Personne ne devrait utiliser setfsuid (2).

De la mĂȘme maniĂšre, Linux utilise le fsgid (ID de groupe du systĂšme de fichiers) Ă  la place du GID effectif. Consultez setfsgid (2).

Contourner les vérifications de permissions : superutilisateur et capacités

Sur un systùme UNIX traditionnel, le superutilisateur ( root , d’identifiant 0) est tout-puissant et contourne toutes les restrictions de permissions lorsqu’il accùde à des fichiers.

Sous Linux, les privilĂšges du superutilisateur sont divisĂ©s en capacitĂ©s (consultez capabilities (7)). Deux de ces capacitĂ©s sont liĂ©es aux vĂ©rifications d’accĂšs aux fichiers : CAP_DAC_OVERRIDE et CAP_DAC_READ_SEARCH . (Un processus a ces capacitĂ©s si son fsuid est 0.)

La capacitĂ© CAP_DAC_OVERRIDE Ă©crase toutes les vĂ©rifications de permission, mais n’assurera la permission d’exĂ©cution que si au moins un des trois bits de permission d’exĂ©cution de fichier est Ă©tabli.

La capacité CAP_DAC_READ_SEARCH accorde la permission de lecture et de recherche sur les répertoires et la permission de lecture sur les fichiers ordinaires.

VOIR AUSSI

readlink (2), capabilities (7), credentials (7), symlink (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> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 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 .