您好,我有一個問題,我似乎找不到相關答案。情況是我設定了 samba 伺服器並嘗試從 Windows 電腦建立檔案和資料夾。一切都按預期進行,但有一個小問題,即 samba 從檔案中的群組和其他檔案中刪除了 x 位元。一個簡單的範例程式碼:
drwx--x--x. 4 root root 4096 Dec 13 20:01 smb
drwxrwx--x. 2 root amikon 4096 Dec 15 22:17 pokus
[pokus]
path = /smb/pokus
public = no
writable = yes
valid users = @amikon
[root@wserver pokus]# ls -l
drwxr-xr-x. 2 vanek amikon 4096 Dec 21 10:14 dir
-rwxr--r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
從我所做的許多實驗中,我了解到,在從 Windows samba 建立條目(檔案或目錄)時,會根據來自 Windows 電腦的預設遮罩和權限執行邏輯 AND。透過使用創建遮罩和強制創建模式(以及目錄的其他設定),此行為或多或少會產生影響 - 按預期工作,完全沒有問題。
我發現丟失 0011 的問題仍然存在,無論使用建立遮罩 755 - x 位元仍然從檔案中刪除。唯一的選擇是使用強制創建模式 755。
我測試了其他建立遮罩選項,似乎每次都會刪除檔案中的 0011。 755、777、333 ... 所以看起來可能是某種保護機制從群組中刪除 x 以及其他阻止腳本執行的機制,除了所有者之外沒有人?
但我的問題是關於上面的例子。為什麼結果是 d755 但-744?失去0011的魔力到底發生在哪裡?
非常感謝任何提示。
答案1
失去 0011 的魔力之所以會發生,是因為它是預設的 Samba 行為。
從文件中摘錄:
建立遮罩:此參數的預設值從 UNIX 模式中刪除群組和其他寫入和執行位
預設值:建立遮罩 = 0744
連結在這裡 :http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html
搜尋create mask (S)
在本文檔中,Samba 團隊沒有解釋為什麼他們選擇實現這種預設行為,但對我來說,很容易想到安全機制(正如您所提到的)。
您可以使用該inherit permissions = yes
指令使新檔案繼承其父資料夾權限,但這不會影響 x 位元。所以,在你的情況下,這將呈現:
-rwxrw-r--. 1 vanek amikon 0 Dec 21 10:14 file.txt
另外,正如您所說,要改變這種行為,您必須明確定義自己的遮罩。現在,「創建」和「強制創建」之間的主要區別在於:
create mask
取消權限(AND 遮罩)force create mode
之後添加它們(OR 掩碼)
也create mask
無法處理團體和其他人的x位。
因此,您可能需要處理這兩個指令才能實現某些目標。
讓我們嘗試一些範例:
1)如果您只想要組和其他組的x位,則必須組合:
create mask = 0700 #Remove r bit from group and others
force create mode = 0711 #Add x bit only to group and others
結果 : -rwx--x--x 1 kris kris 0 Dec 21 14:20 file.txt
2) 如果您想要群組和其他群組的 r 和 x 位,請刪除create mask
指令(因為預設值已經是 0744)並新增:
;create mask = 0700 #remove r bit from group and others (commented)
force create mode = 0711 #Add x bit only to group and others
結果 : -rwxr-xr-x 1 kris kris 0 Dec 21 14:17 file.txt
等等...
希望它對您了解 Samba 行為有所幫助。