非 sudo 使用者提示訊息「rm:刪除寫保護的常規空檔案」而不是權限被拒絕

非 sudo 使用者提示訊息「rm:刪除寫保護的常規空檔案」而不是權限被拒絕

我在 Linux 伺服器上新增了一個額外的磁碟。

我將以下行新增到 fstab 中:

UUID=e277f402-bbac-4830-bc1d-5a849ffe7f9c /disk1          ext4    defaults 0 0

然後我創建了一個掛載點 /disk1 並掛載了它

 sudo mkdir /disk1
 sudo mount /disk1

然後我以使用者「hari」創建了一個空檔案 touch1.txt ,其權限如下

sudo touch test1.txt

-rw-rw-r-- 1 hari hari     0 Sep 12 18:23 test1.txt

現在,當我以另一個使用者身分登入並刪除 test1.txt 檔案時,它實際上會詢問我,然後拒絕我,而不是說「權限被拒絕」。為什麼會這樣呢?我怎麼能讓它表現得像“正常”

hari2@UBUNTU01:/disk1$ rm test2.txt
rm: remove write-protected regular empty file ‘test2.txt’? y
rm: cannot remove ‘test2.txt’: Operation not permitted

答案1

當涉及到刪除操作時,Unix 權限有點奇怪。

首先,刪除檔案實際上涉及從目錄中刪除該檔案的連結。由於大多數 Unix 檔案系統都允許硬鏈接,因此檔案可能從多個目錄鏈接,因此存在多個鏈接。當您刪除連結時,該檔案不會被刪除,除非不存在指向該檔案的其他連結。

因此,用於「刪除」檔案的實際系統呼叫稱為unlink.然而,完成取消連結的 shell 命令實用程式稱為rm,它是「remove」的助記符。

由於取消連結操作修改了目錄(透過刪除目錄項目)而不是文件,操作所需的權限是寫入權限在目錄上。文件本身的權限無關緊要。

然而,事實證明,嘗試從您具有寫入權限的目錄中刪除實際上不屬於您的檔案是一個常見的錯誤。 (更準確地說,這種情況並不常見,但在存在的情況下,錯誤地嘗試刪除檔案是很常見的。)

為了幫助防止系統管理員開槍射擊自己的腳趾,該rm實用程式首先驗證調用它的人是否具有對系統的寫入權限。文件,即使取消連結檔案不需要該權限。出於顯而易見的原因,它在嘗試刪除檔案之前會進行此檢查。

rm實用程式確實不是檢查是否允許使用取消連結文件,因為「在操作之前檢查」通常被認為是不好的風格。相反,它執行所需的操作,並在作業系統返回錯誤時報告失敗。在這種情況下,作業系統將報告 EACCES,因為使用者沒有對該目錄的寫入存取權限。

不幸的後果是,如果你試圖從一個你沒有寫權限的目錄中刪除一個你沒有寫權限的文件,它rm會徒勞地詢問你是否繼續,然後報告失敗。

相關內容