ext2/3/4 ファイルシステムのディレクトリにハードリンクを使用できますか?

ext2/3/4 ファイルシステムのディレクトリにハードリンクを使用できますか?

ハードリンクを生成するために使用されたコマンド(およびおそらくシステムコール)がディレクトリへのハードリンク生成を許可しないという内容を読みました。また、ハードリンクがDAC、Linuxセキュリティモジュール、IMA / EVMなどのパスベースのセキュリティに問題を引き起こす可能性があることも学びました。ディレクトリへのハードリンクを作成できない場合は、そのディレクトリで発生する可能性があるセキュリティ問題を解決できます。しかし、ストレージレベルでファイルシステムを編集して、ディレクトリinodeへの複数のハードリンクを作成できますか?

答え1

目次するハードリンクがあります...mkdir新しいディレクトリを作成するたびに、..エントリは親ディレクトリと同じinodeへのリンクです。

例えば

$ ls -lid .
23855134 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 .
$ mkdir foo
$ ls -lid . foo/..
23855134 drwxr-xr-x 3 sweh sweh 4096 Sep  8 21:57 .
23855134 drwxr-xr-x 3 sweh sweh 4096 Sep  8 21:57 foo/..

ディレクトリ内のリンク数が1ずつ(2から3に)増加し、インデックスノードが「.」であることがわかります。そして「foo/..」は両方23855134です。 「.」と親ディレクトリのエントリも inode 番号を共有するため、リンク数が 2 で始まることがわかります。

$ ls -lid foo foo/.
23855343 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 foo
23855343 drwxr-xr-x 2 sweh sweh 4096 Sep  8 21:57 foo/.

これで、ファイルシステムを編集して別のリンクを作成できる場合は、簡単に文句を言うことができますfsck

これをしないでください:-)

答え2

技術的にもこれを簡単に実行できます。ディレクトリハードリンクを作成するためのコマンドがdebugfsあります。lnこれにより、同じinodeを指す複数のディレクトリを持つ作業ファイルシステムが作成されます..スティーブン・ハリス'答え)、リンク数を正しく表示するには、リンク数を手動で処理する必要があります。

Stephenが言ったように、これはe2fsck不快になり、重複したディレクトリエントリを削除します(データは失われず、ディレクトリは残ります)。

(私は実際に壊れたもの、特にディレクトリループを試したことはありません...)

関連情報