Ini selalu membingungkan saya. Mengapa direktori root berisi referensi ke direktori induk?
bob @ bob: / $ ls -a . membangun rumah lib32 mnt .rpmdb sys vmlinuz .. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old bin dev initrd.img.old hilang + ditemukan proc selinux usr boot dll lib media root srv var
Saya mengerti bagaimana direktori dikelola dalam sistem file - setiap direktori memiliki n + 2 pointer ke dirinya sendiri (n = jumlah subdirektori di dalam direktori). Satu untuk setiap subdirektori langsung, satu untuk orang tuanya, dan satu untuk dirinya sendiri.
Tapi apa /
itu orangtua?
filesystems
directory
directory-structure
Nathan Osman
sumber
sumber
../../../../../../../../../../../../../../../../etc/passwd
/
. Antara../
(tidak harus di awal!) Dan tautan simbolis, sangat sulit dilakukan, terutama mengingat penyerang mungkin memindahkan direktori di bawah hidung program.Itu ada di sana karena itu adalah jaminan yang dibuat oleh Unix: setiap direktori berisi dua entri,
.
yang merujuk pada dirinya sendiri, dan..
yang mengacu pada induknya.Direktori root namespace saat ini adalah spesial, dalam hal
..
menunjuk ke hal yang sama seperti.
, tetapi tidak begitu istimewa untuk memutus jaminan yang dibuat oleh OS untuk program. Ketika kontrak itu rusak, semuanya salah dan semua orang menunjuk.Direktori root yang Anda lihat mungkin, dalam sistem file pada disk, sebenarnya memiliki direktori induk yang berbeda. Pandangan dari filesystem yang disediakan di namespace yang di-mount adalah apa yang menegakkan
.. = .
aturan/
. Jadi jika Anda berada dichroot()
penjara, Anda akan melihat/.. = /
meskipun seseorang di luar penjara yang melihatnya/path/to/jail/..
akan melihat/path/to
.sumber
/
memiliki..
yang menunjuk ke dirinya sendiri? Saya pikir itu bisa sama (atau lebih) dapat diterima untuk/
TIDAK dimiliki..
.man 5 dir
pada sistem BSD akan memandu Anda melalui API terdokumentasi, dan barang-barang yang dinyatakan dalam API adalah bagian dari kontrak.