当用户没有父目录的写权限时,为什么 chmod 对文件会成功?

当用户没有父目录的写权限时,为什么 chmod 对文件会成功?

我正在尝试了解 Linux 中的文件/目录权限。用户可以使用以下命令列出目录中的文件

cd test
ls -l 

即使发出上述命令的用户对测试目录中的任何文件没有读、写或执行权限,他仍然可以列出它们,因为他/她对测试目录具有读权限。

那么为什么在下面的场景中,用户B可以更改自己拥有的文件的权限,但没有父目录的写权限呢?

用户 A 创建一个测试目录并允许其他用户在其中写入:

mkdir test
chmod o+w test

用户 B 在测试文件夹中创建一个文件。

cd test
touch b.txt

用户A删除其他人对该目录的写权限

chmod o-w test

用户 B,可以成功更改权限,即使权限是目录的一部分,并且该用户对其拥有的文件的父目录没有写权限

chmod g-r b.txt

为什么chmod不会失败,因为用户无法修改包含文件信息(权限等)的目录?

答案1

当您更改文件的元数据(权限、所有权、时间戳等)时,您并不是在更改目录,而是在更改文件的索引节点。这需要x目录的权限(访问文件)和文件的所有权(只有拥有该文件的用户才能更改其权限)。

如果您还记得文件可以有,我认为这很直观硬链接在多个目录中。该目录包含一个将文件名映射到 inode 的表。如果一个文件在多个目录中以多个名称链接,那么它仍然是一个具有一组权限、所有权等的 inode,这表明该文件的元数据位于 inode 中,而不是在目录中。

创建、重命名、移动或删除文件涉及到修改目录,因此需要对该目录的写权限。

相关内容