Linux

作為非 root 使用者的“mv”命令的意外行為

  • November 9, 2021

最近,我偶然發現了這個:

我的非 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對文件沒有寫權限。那麼它怎麼可能刪除了原始文件呢?

即使不是這樣,發生了什麼並且文件實際上只是“重命名”了,那也不應該起作用,對吧?!?

我錯過了什麼嗎?

您對(源和目標)目錄具有寫權限,這是重命名系統呼叫正常工作所必需的。更安全的目錄不會授予您寫訪問權限。

不好的類比:圖書館員不需要打開一本書在不同的書架上進行分類。

重命名與複製並不完全相同。如果不讀取文件,則無法 cp 或使用編輯器。但是您至少可以在同一個文件系統上重命名它。

引用自:https://unix.stackexchange.com/questions/676768