我的问题涉及目录上的读取位和执行位之间的关系。我将首先根据我目前的知识给出我的假设,然后询问我的问题以粗体显示在这些假设的背景下。如有错误的假设,欢迎指正:
- 文件和目录都使用 inode 存储。
- 文件和目录都有权限(让我们只关注 rwx 位,忘记 Sticky、setuid、setguid(除非它们相关))。
- 目录的 inode 数据块的内容存储文件名到 inode 编号的映射。
- 目录的读取权限允许用户获取该目录中所有文件的名称列表。
- 用户必须知道文件的索引节点号才能访问其内容。更新:这里原始陈述的含义并不反映我想要表达的意思。我的意思更多的是:用户不需要知道文件的索引节点号,但用户必须有权获取给定文件名的索引节点才能获取文件的内容。
- 目录上的执行权限允许用户“使用”该目录,我理解这具体意味着获取目录的索引节点号(我想确认我对此的理解)。这将允许用户执行诸如 cd 进入该目录之类的操作,这是用户需要执行权限的典型示例。
假设用户必须能够获取目录的“内容”(实际上是目录 inode 数据块的内容)才能访问目录列表,并且用户必须知道目录的 inode 编号才能获得访问权限其内容,为什么用户在没有目录执行权限的情况下仍然可以获得目录列表?看来获取目录 D 的内容列表需要暂时地查找其 inode 编号以读取 inode 数据块的内容。此外,读取权限似乎有必要意味着对目录的执行权限。
答案1
我有一个轻微的误解,这使得我上面的第 6 点无效。为了获取目录中包含的文件的索引节点号,需要目录上的执行(也称为“搜索”)位,但是不是它自己的索引节点号。
引用:
您可以这样考虑对目录的读取和执行:目录是数据文件,其中包含每个文件的两条信息:文件名和索引节点号。访问目录中的文件名需要读取权限。如果您已经知道文件名,则需要执行(也称为搜索)权限才能访问目录中文件的 inode。
参考: