非 root 用户的“mv”命令的意外行为

非 root 用户的“mv”命令的意外行为

最近,我偶然发现了这一点:

我的非 root 用户myuser尝试移动属于root..的文件工作过?!?

$ whoami
myuser

$ ls -lAhd
drwx------ 2 myuser myuser 4,0K  4. Nov 14:24 .

$ ls -lAh
total 0
-rw-r--r-- 1 root root 0  4. Nov 14:24 testfile.txt

$ mv testfile.txt testfile.txt.bak

$ ls -lAh
total 0
-rw-r--r-- 1 root root 0  4. Nov 14:24 testfile.txt.bak

所以我的问题是:为什么这有效?

“mv”命令应该一直困扰着我不是 root, 正确的?

我确实明白:

  • 该文件可以被读取myuser(644权限,因此每个人都可以读取该文件)
  • 该文件可以通过复制myuser(因为该目录属于myuser

..如果是这样,实际发生了什么(我还没有看过 mv 的源代码)。

myuser没有该文件的写入权限。那么它怎么可能删除了原始文件呢?

即使这不是,发生了什么并且文件实际上只是“重命名”,那么这也不应该起作用,对吗?!?

我错过了什么吗?

答案1

您对(源和目标)目录具有写入权限,这是重命名系统调用正常工作所必需的。更安全的目录不会授予您写访问权限。

不好的类比:图书馆员不需要打开一本书来将其放在不同的书架上进行编目。

重命名与复制并不完全相同。如果不读取文件,则无法 cp 或使用编辑器。但您至少可以在同一文件系统上重命名它。

相关内容