继从另一位用户的问题我遇到了一个 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
。
移动文件不涉及写入它们,但移动目录涉及写入。