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

Phi*_*ing 7 linux permissions directory mv

另一个用户的问题之后,我遇到了一个我无法轻易合理化的 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/
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ste*_*itt 12

这是记录在案的情况之一导致EACCES

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

你不能写 inside bob,这意味着你不能更新bob/..以指向它的新值,my_dir

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

  • `.` 通常也存在;这就是目录的链接数 >= 2 的原因。 (3认同)
  • 实际上,在某些 fs (btrfs) 上,如果 1. `.` 和 `..` 由 VFS 在此类 fs 上模拟,则目录具有链接计数。我现在无法测试,但我很确定它也在模拟 EACCES 条件(这不是那么深奥)。 (3认同)
  • @pizdelect 正确,`/proc/sys` 为初学者;我可能记错了。我现在能找到的只是 POSIX 要求 [`.` 和 `..` 似乎存在](https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13)(没有定义它们是如何实现的)。 (2认同)