当您可以移动其他用户的文件时,为什么不能移动其他用户的目录?

当您可以移动其他用户的文件时,为什么不能移动其他用户的目录?

继从另一位用户的问题我遇到了一个 Linux 文件系统权限的怪癖,我无法轻易合理化它:

sudo mkdir ~/foo ~/foo/bar
sudo touch ~/baz
mkdir ~/my_dir
chown 700 ~/my_dir
# this is fine
mv ~/baz ~/my_dir
# renaming is fine
mv ~/foo ~/bob
# Moving caused: Permission denied
mv ~/bob ~/my_dir/

为了清楚起见,foo foo/bar baz它们归 root 所有。 my_dir属于我自己的用户,当然也~属于我自己的用户。我可以重命名和移动另一个用户拥有的文件。我可以重命名另一个用户拥有的目录,但我不能移动另一个用户拥有的目录。

这似乎是一个非常具体的限制,我不明白正在防止什么危险,或者什么潜在机制意味着它只能以这种方式工作。

为什么其他用户的目录不能移动?

答案1

这是其中一种情况有记录的导致EACCES

oldpath是一个目录,不允许写权限(需要更新 .. 条目)。

您无法在内部写入bob,这意味着您无法更新bob/..以指向其新值my_dir

移动文件不涉及写入它们,但移动目录涉及写入。

相关内容