Files

為什麼 rm 允許刪除其他使用者擁有的文件?

  • June 12, 2020

來自文章為什麼 rm 可以刪除只讀文件?我知道rm只需要目錄的寫權限即可刪除文件。但是我發現很難消化我們可以輕鬆刪除所有者和組不同的文件的行為。

我嘗試了以下

mtk : 我的使用者名

abc : 創建了一個新使用者

$ ls -l file
-rw-rw-r-- 1 mtk mtk       0 Aug 31 15:40 file
$ sudo chown abc file
$ sudo chgrp abc file
$ ls -l file
-rw-rw-r-- 1 abc abc       0 Aug 31 15:40 file
$ rm file
$ ls -l file
<deleted>

我在想這不應該被允許。使用者應該只能刪除他擁有的文件嗎?有人可以闡明為什麼允許這樣做嗎?有什麼方法可以避免這種情況?我可以認為只限制父目錄的寫權限以禁止意外刪除文件。

允許這樣做的原因與刪除文件的實際作用有關。從概念上講,rm的工作是從目錄中刪除名稱條目。如果這是文件的唯一名稱,那麼文件可能變得無法訪問,並且文件佔用的 inode 和空間因此可以在此時恢復,這幾乎是偶然的。該rm命令呼叫的系統呼叫的名稱,即unlink,甚至暗示了這一事實。

而且,從目錄中刪除名稱條目基本上是對該目錄的操作,因此該目錄是您需要具有寫入權限的東西。


下面的場景可能會讓它感覺更舒服?假設有目錄:

/home/me    # owned and writable only by me
/home/you   # owned and writable only by you

還有一個文件歸我所有,有兩個硬連結:

/home/me/myfile
/home/you/myfile

別管那個硬連結/home/you/myfile最初是如何到達那裡的。也許root把它放在那裡。

這個例子的想法是你應該被允許刪除硬連結/home/you/myfile。畢竟,它會弄亂你的目錄。應該能夠控制內部存在和不存在的內容/home/you。當您刪除時/home/you/myfile,請注意您實際上並沒有刪除該文件。您只刪除了一個連結。


請注意,如果在包含文件的目錄上設置了粘性位(顯示為tls,那麼您需要成為文件的所有者才能被允許刪除它(除非您擁有該目錄)。粘性位通常設置為/tmp

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