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 号

$ 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(超出..史蒂芬·哈里斯'答案),尽管如果您希望链接计数正确显示,则需要手动处理链接计数。

正如斯蒂芬所说,这会让人e2fsck不高兴,并且它将删除重复的目录条目(不过你不会丢失数据,它会留下一个目录)。

(我还没有尝试过任何真正损坏的东西,特别是目录循环......)

相关内容