Linux
作為非 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
對文件沒有寫權限。那麼它怎麼可能刪除了原始文件呢?即使不是這樣,發生了什麼並且文件實際上只是“重命名”了,那也不應該起作用,對吧?!?
我錯過了什麼嗎?
您對(源和目標)目錄具有寫權限,這是重命名系統呼叫正常工作所必需的。更安全的目錄不會授予您寫訪問權限。
不好的類比:圖書館員不需要打開一本書在不同的書架上進行分類。
重命名與複製並不完全相同。如果不讀取文件,則無法 cp 或使用編輯器。但是您至少可以在同一個文件系統上重命名它。