為什麼使用者在顯然沒有權限的情況下可以刪除 Samba 共享上的文件?
我試圖圍繞 Samba 共享上的文件權限來思考問題,以下問題讓我感到困惑,為什麼 user1 和 user2 都可以刪除彼此的文件,即使他們似乎沒有這樣做的權限。這是這些文件在執行 samba 伺服器的 ubuntu 機器上的樣子:
-rwxr--r-- 1 user1 private 0 okt 8 00:43 'test file user1.txt'* -rwxr--r-- 1 user2 private 0 okt 8 00:06 'test file user2.txt'*
萬一這件事很重要,
user1
兩者user2
都是private
. 兩個使用者都通過各自的 Windows 機器訪問共享,首先創建各自的文件,然後刪除彼此的文件。在
smb.conf
this share中配置如下:[Together] path = /srv/together browseable = yes read only = no writable = yes create mask = 0755 directory mask = 0755 valid users = @private force group = private
我最好的猜測是該
valid users
參數比我想像的要強大得多,基本上將組的所有成員提升到所有者的狀態。是這樣嗎?**編輯:(**回應評論)
父目錄具有以下權限:
drwxrwx--- 19 root private 44 okt 8 00:58 together/
所以我想這就是刪除的理由。我想我需要在 linux 文件權限方面進行速成課程。我永遠不會想到刪除不僅僅是一種特殊的編輯……那麼這是否意味著如果使用者嘗試編輯文件,即使刪除工作正常,他們也無法做到?
粘性位
t
的提示也很有幫助。謝謝。至於擴展 ACL 支持:是的,它是打開的(顯然是預設情況下),但我似乎不太明白這對我的“問題”意味著什麼(如果我們假設一分鐘父目錄權限沒有解釋事情) . 擴展 ACL 是否必須打開或關閉才能創建我所看到的那種行為?
好的,我將在這裡嘗試總結一下,并快速解釋一下 Linux 權限是如何工作的(不包括 ACL)以及它們為什麼會這樣工作:
首先給出答案:要從目錄中刪除文件,您需要對目錄而不是文件本身的寫入權限。
解釋:
目錄只是一種特殊類型的文件,它包含有關文件及其 inode 編號的資訊(inode 基本上是文件的元數據,例如,文件的數據內容儲存在硬碟上的確切位置,文件的權限等。 ),簡而言之,它基本上是一個文本文件,其中包含文件列表。
例如,當您使用時,
ls
您基本上是從“目錄文件”中讀取列表(這就是為什麼您需要對目錄具有讀取權限才能列出其內容)。只要有一些“連結”/“列表條目”指向它,一個文件就存在(有一些例外,但這對於這篇文章來說太多了),也就是它在某個目錄中列出。如果您從列出的每個目錄中刪除文件的所有列表,則該文件(及其數據)將消失。這有點難以理解,但現在讓我們假設一個文件只存在一次。
我希望這能說明為什麼您需要對目錄而不是文件本身的寫入權限來刪除它,因為目錄只是一個包含其內容列表的“文本文件”。如果從列出的“目錄文件”中刪除文件的條目,則實際上刪除了該文件。
再說一遍,目錄只是一種特殊類型的文件,其權限的含義略有不同(如果你仔細想想,並不是真的,只針對 e x ecute 權限):
- 讀取(r 或 4) -> 列出目錄內容的名稱(例如,使用
ls
)- 寫入(w 或 2) -> 修改“目錄文件”,需要刪除該目錄中的文件,也需要在該目錄中創建文件(如果您將目錄視為文本文件,則更容易理解此概念)
- 執行(x 或 1) -> 切換到這個目錄並讀取目錄內文件的 inode(這是目錄和“普通”文件之間的最大區別)。沒有它,您將無法訪問此目錄中的任何文件,也無法進入其中,例如,如果您對無法訪問
cd
的目錄沒有 x 權限,即使您對. 基本上,x-flag 是目錄內 inode 的讀取權限。/test``/test/testfile.txt``testfile.txt
如果您對有關權限主題的更多資訊感興趣,請查看 Pollock 教授對 Unix 文件和目錄權限的介紹,它還簡要介紹了 ACL(這基本上是Windows 的做法,您為每個文件夾設置權限/除了分配一個使用者和一個組之外,每個使用者/組的文件):https ://wpollock.com/AUnix1/FilePermissions.htm
如果您正在學習 Linux 權限系統,除非您確實需要更具體的權限,否則我暫時不要使用 ACL。
哦,順便說一句:對該目錄中的文件的寫入權限授予您修改(寫入)該文件的權限。在您的範例中,user2無法寫入“測試文件 user1.txt”,即使他可以刪除它。
編輯:我還想添加一個關於 inode 以及它們如何與目錄互動等的解釋,但我決定這將在這篇文章中進行。如果您有興趣,那裡有很多關於該主題的重要資源,但如果您只需要設置您的 Samba,它真的不應該讓您太擔心。