Neden '/' '..' girişine sahip?


81

Bu beni hep şaşırttı. Kök dizin neden bir üst dizine referans içeriyor?

bob @ bob: / $ ls -a
. ev inşa lib32 mnt. rpmdb sys vmlinuz
.. cdrom initrd.img lib64 tercih sbin tmp vmlinuz.old
bin dev initrd.img.old kayıp + bulundu proc selinux usr
önyükleme vb lib medya kök srv var

Dizinlerin dosya sisteminde nasıl yönetildiğini anlıyorum - her dizinde n + 2 işaretçisi var (n = dizinin içindeki alt dizin sayısı). Her bir alt dizin için bir tane, biri üst için, biri de kendi için.

Ama /ebeveyni nedir?

Yanıtlar:


73

/..Puan /:

$ ls -id /
2 /
$ ls -id /..
2 /..

Her ikisi de aynı inode numarasına sahip ve bu sistemde 2 olur. (Kesin değer önemli değil.)

Tutarlılık için yapılır. Bu şekilde, çekirdeğin ..bir yolda işlediği sırada nerede olduğunu kontrol etmek için çekirdeğin kodunun olması gerekmez . cd ..Sonsuza dek söyleyebilirsiniz ve asla kökünden daha derine inmeyin.


20
@George Göreceli yollardan yararlanan sömürülerin bunu kullandığına inanıyorum; Geçerli klasörü tahmin etmek zorunda değilsin, sadece yapmalısın../../../../../../../../../../../../../../../../etc/passwd
Michael Mrozek

21
Bu sadece / etc / passwd kullanarak ne fark eder?
jlliagre

9
@jlliagre: Bir dosyanın geçerli dizinde olup olmadığını kontrol ederek başlayan bir test var /. Arasında ../(ille başında! At) ve sembolik bağlantıları, özellikle saldırgan programın burnunun dibinde dizinleri hareketli olabilir düşünüyor yapmak çok zor.
Gilles

4
Görüyorum ki en azından canonicalize_file_name veya realpath kullanmalılar.
jlliagre

5
@ musiphil: Bu iyi bir şey. Michael, kodun istismarla başa çıkmak için yazılmamış olması durumunda, kötü amaçlarla yararlanılabilecek bir özellik olduğuna işaret ediyordu. Eğer sömürülebilecek tüm özelliklerden kurtulmuş olsaydık, bilgisayarlar çok sıkıcı şeyler olurdu.
Warren Young,

38

İşte orada, Unix tarafından yapılan bir garantiden dolayı: Her bir dizin, .kendisi ve ..üst öğelerini ifade eden iki girdi içeriyor .

Mevcut isim alanının kök dizini özeldir, çünkü bu, işletim sistemi tarafından programlara verilen garantiyi kırmakla ..aynı şeyi göstermez .. Bu sözleşmeler bozulduğunda işler ters gidiyor ve herkes parmaklarını gösteriyor.

Gördüğünüz kök dizin, diskteki dosya sisteminde, aslında farklı bir üst dizine sahip olabilir. Monte edilen ad alanında sağlanan dosya sistemlerinin görünümü, .. = .kuralı zorlayan şeydir /. Öyleyse bir chroot()hapishanedeyseniz, hapishanenin /.. = /dışındaki birisi bakacak olsa bile /path/to/jail/..göreceksiniz /path/to.


1
"Sözleşme" kaç programları bağlıdır /sahiptir ..kendisine bu noktaları? Yapmamak için eşit olarak (veya daha fazla) kabul edilebilir /olabileceğini düşünüyorum ...
musiphil

Bu teoriyi doğrulayan bir kaynağı olan var mı?
Julian Hollmann

1
Eh, man 5 dirbir BSD sisteminde belgelenen API'de size yol gösterecektir ve API'de belirtilen öğeler sözleşmenin bir parçasıdır.
Phil P

1
find, n + 2 sözleşmesine dayanan bir optimizasyona sahiptir.
ctrl-alt-delor

2
Oh, ve tabii ki bir kaynak istiyorsanız o zaman sadece şartnameyi okuyun. Bölüm 4.12'deki pubs.opengroup.org/onlinepubs/9699919799 adresindeki POSIX : "Özel dosya adı noktası, selefi tarafından belirtilen dizine atıfta bulunmalıdır. Özel dosya adı-nokta, selefi dizininin ana dizinine atıfta bulunacaktır. Bu durumda, kök dizinde nokta-nokta kök dizinin kendisine bakabilir. "
Phil P,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.