「/」に「..」エントリがあるのはなぜですか?


81

これは常に私を困惑させてきました。ルートディレクトリに親ディレクトリへの参照が含まれているのはなぜですか?

bob @ bob:/ $ ls -a
。ビルドホームlib32 mnt .rpmdb sys vmlinuz
.. cdrom initrd.img lib64 opt sbin tmp vmlinuz.old
bin dev initrd.img.old lost + found proc selinux usr
boot etc libメディアルートsrv var

ファイルシステムでディレクトリがどのように管理されているかを理解しています-各ディレクトリにはそれ自体へのn + 2ポインタがあります(n =ディレクトリ内のサブディレクトリの数)。直接のサブディレクトリごとに1つ、その親に1つ、それ自体に1つ。

しかし、/の親は何ですか?

回答:


73

/..を指す/

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

両方とも同じiノード番号を持ち、このシステムではたまたま2です。(正確な値は重要ではありません。)

一貫性のために行われました。このよう..に、パス内のを処理するときに現在の場所を確認するためにカーネルにコードを置く必要はありません。あなたはcd ..永遠に言うことができ、根よりも深くなることはありません。


20
@George相対パスを利用するエクスプロイトはそれを使用すると信じています。現在のフォルダーを推測する必要はありません。ただ行うだけです../../../../../../../../../../../../../../../../etc/passwd
Michael Mrozek

21
単純に/ etc / passwdを使用すると、どのような違いが生じますか?
jlliagre

9
@jlliagre:で始まるかどうかをテストすることにより、ファイルが現在のディレクトリにあるかどうかをチェックするプログラムがあります/。間に../(!初めに限らない)とシンボリックリンク、それは特に、攻撃者はプログラムの鼻の下にディレクトリを移動することができる考えると、やることは非常に困難です。
ジル

4
少なくともcanonicalize_file_nameまたはrealpathを使用する必要があります。
-jlliagre

5
@musiphil:それは良いことです。マイケルは、悪用に対処するためのコードが記述されていない場合、悪用のために悪用される可能性がある機能であることを指摘していました。悪用される可能性のあるすべての機能を取り除くと、コンピューターは非常につまらないものになります。
ウォーレンヤング

38

これは、Unixによって保証されているためです。すべてのディレクトリに.は、自身を参照するエントリと..親を参照するエントリが2つ含まれています。

現在のネームスペースのルートディレクトリは特別なものであり、という..点でを指しますが.、OSがプログラムに対して行った保証を破るほど特別なものではありません。それらの契約が破られると、事態は悪化し、誰もが指を指すようになります。

あなたが見るルートディレクトリは、ディスク上のファイルシステムで、実際には異なる親ディレクトリを持っているかもしれません。マウントされた名前空間で提供されるファイルシステムのビューは、の.. = .ルールを強制するものです/。そのため、chroot()刑務所にいる場合は/.. = /、刑務所の外にいる誰か/path/to/jail/../path/to代わりに見ている場合でも表示されます。


1
どのように多くのプログラムは、「契約」に依存し/ている..自分自身を指していること?私はそれがために(またはそれ以上)も同様に許容されている可能性が考えて/持っていません..
musiphil

この理論を裏付ける情報源はありますか?
ジュリアンホールマン14

1
さて、man 5 dirBSDシステムでは、文書化されたAPIを順を追って説明します。APIに記載されている項目は契約の一部です。
フィルP 14年

1
findには、n + 2コントラクトに依存する最適化があります。
ctrl-alt-delor

2
ああ、もちろんソースが必要な場合は、仕様を読んでください。 セクション4.12のposs.opengroup.org/onlinepubs/9699919799の POSIX :「特別なファイル名のドットは、その前身によって指定されたディレクトリを指します。特別なファイル名のドット-ドットは、その前身ディレクトリの親ディレクトリを指します。ルートディレクトリでは、ドットドットはルートディレクトリ自体を指す場合があります。」
フィルP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.