移動並刪除 setguid 資料夾中的文件

移動並刪除 setguid 資料夾中的文件

我需要用乾淨的版本替換我的郵件檔案(這台機器上的所有郵件都是監視 cron 作業——所以沒有理由不刪除超過「n」天的郵件)。

該文件對我的使用者帳戶具有讀取/寫入權限,對任何其他使用者或群組沒有權限。它的群組所有權是郵件群組,因為 setguid 位元是在 /var/spool/mail 上設定的。

我不是郵件群組的成員。

drwxrwsr-x 2 根郵件 4096 9 月 2 日 15:17 。
drwxr-xr-x 14 root root 4096 五月 10 09:27 ..
-rw-------- 1 myuser 郵件 219722 九月 2 日 04:56 myuser

在使自己成為郵件群組的成員之前,我無法移動或刪除此檔案。

我的問題是「為什麼?」。為什麼要讓自己(顯示出具有讀取和寫入此文件的權限)成為既沒有權限也沒有移動和刪除該文件的組的成員?

答案1

這是因為rmmv(和類似的)涉及修改目錄結構,除非您w對該目錄具有 write () 權限,否則您無法執行此操作。

這與相關檔案的權限無關,只需要父目錄有足夠的權限。請注意,該rm操作實際上是unlink(2)系統調用,它只會從目錄的檔案索引節點映射中取消檔案的連結。mv在同一檔案系統內執行 -ing時,rename(2)將把檔案的 inode 對應到新目錄。

正如您所看到的,所有這些都需要修改父目錄,而不管檔案本身的權限如何,因此您需要w目錄的權限才能重新命名/刪除/建立新檔案。

現在,當在目錄上設定 SETGID 位元時,該目錄上的所有檔案都將歸同一組(即該目錄的擁有者群組)所有。

在您的情況下,目錄由具有權限/var/spool/mail擁有,並設定了 STDGID 位,這將使目錄下的所有檔案都由同一群組擁有。root:mail775mail

因此,就目前情況而言,如果您想重新命名/刪除,myfile您需要對該/var/spool/mail目錄有足夠的權限,要么是root,要么是該群組的成員,如前所述,mail此處的權限是不相關的。myfile

答案2

我認為這是因為當您移動或刪除檔案時,重要的權限是父目錄的權限。由於移動文件意味著建立文件的副本並刪除原始文件,因此您需要對目錄具有正確的權限才能執行此操作。在這種情況下,將您的使用者新增至郵件群組將為您提供必要的權限。

相關內容