Cela m'a toujours intrigué. Pourquoi le répertoire racine contient-il une référence à un répertoire parent?
bob @ bob: / $ ls -a . construire la maison lib32 mnt .rpmdb sys vmlinuz .. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old bin dev initrd.img.old perdus + trouvés proc selinux usr démarrage etc lib media racine srv var
Je comprends comment les répertoires sont gérés dans le système de fichiers - chaque répertoire a n + 2 pointeurs sur lui-même (n = nombre de sous-répertoires dans le répertoire). Un pour chaque sous-répertoire immédiat, un pour son parent et un pour lui-même.
Mais quel est /
le parent?
la source
../../../../../../../../../../../../../../../../etc/passwd
/
. Entre../
(pas nécessairement au début!) Et les liens symboliques, c'est très difficile à faire, d'autant plus que l'attaquant peut être en train de déplacer des répertoires sous le nez du programme.C'est là parce que c'est une garantie faite par Unix: chaque répertoire contient deux entrées,
.
qui se réfèrent à elles-mêmes et..
qui font référence au parent.Le répertoire racine de l’espace de noms actuel est spécial, car il
..
pointe vers la même chose que.
, mais pas si spécial, pour casser la garantie offerte par le système d’exploitation aux programmes. Lorsque ces contrats sont rompus, les choses tournent mal et tout le monde pointe du doigt.Le répertoire racine que vous voyez peut, dans le système de fichiers sur le disque, avoir en réalité un répertoire parent différent. C'est la vue des systèmes de fichiers fournie dans l'espace de noms monté qui applique la
.. = .
règle/
. Donc , si vous êtes dans unechroot()
prison, vous verrez/.. = /
bien que quelqu'un en dehors de la prison regardant/path/to/jail/..
verra à la/path/to
place.la source
/
a..
cela pointe sur lui-même? Je pense que cela aurait pu être également (ou plus) acceptable de/
ne pas en avoir..
.man 5 dir
sur un système BSD vous guidera à travers l'API documentée, et les éléments énoncés dans l'API faites partie du contrat.