從 Windows 客戶端通過 ZFS SMB 對在 OpenIndiana 的主機上創建的文件進行寫入訪問
我有一個執行 ZFS 的 OpenIndiana 伺服器,它使用
nobody
使用者和組共享。我不完全了解 Solaris ACL 權限,但我知道 Linux 風格的權限。客戶端是 Windows 8,伺服器是 OpenIndiana 是 oi_148。我無法弄清楚如何使 Windows 客戶端的寫權限正常工作。它可以創建新文件,但不能修改由 OpenIndiana 中的 shell 創建的文件。
當一個文件( )作為bash
"local file"
中的使用者在本地創建,另一個文件( )通過 SMB 遠端創建(同樣)時,它們的權限完全不同:nobody``"smb file"``nobody
# ls -V -rw-r--r-- 1 nobody nobody 0 Dec 2 12:24 local file owner@:rw-p--aARWcCos:-------:allow group@:r-----a-R-c--s:-------:allow everyone@:r-----a-R-c--s:-------:allow -rwx------+ 1 nobody nobody 0 Dec 2 12:24 smb file user:nobody:rwxpdDaARWcCos:-------:allow group:2147483648:rwxpdDaARWcCos:-------:allow
在 bash 中,我可以寫入 .
smb file
,但反之亦然,Windows 客戶端無法寫入local file
. 這讓我感到困惑,因為它似乎應該允許 SMB 客戶端寫入local file
,因為nobody
它是所有者並且它w
在 ACL 中有一個。
sharesmb
設置相當無聊,儘管我希望在這裡可以設置一些類似於 umask 的東西:sharesmb name=shared,guestok=true
我怎樣才能使這兩者一起工作並擁有一個對稱的權限系統,其中 SMB 和本地使用者都產生相同的權限?
是否可以在文件系統的根目錄設置某種 ACL,以允許以類似方式創建所有文件?
我的設置存在一些問題:
- 本地使用者創建的 ACL 沒有設置
d
和D
標誌,這意味著它不能被刪除/移動,儘管我仍然不明白為什麼本地使用者能夠在 SMB 無法刪除它時刪除它。- ACL 的設置方式不是為了繼承 ACL,即
fd
標誌。- ZFS
aclinherit
屬性應設置為passthrough
而不是restricted
.例如:
# chmod A=owner@:rwxpdDaARWcCos:fd:allow /z/shared # zfs set aclinherit=passthrough z/shared
從 SMB 和本地創建文件後:
$ ls -V total 2 -rwx------+ 1 nobody nobody 0 Dec 8 00:17 local owner@:rwxpdDaARWcCos:------I:allow -rwx------+ 1 nobody nobody 0 Dec 8 00:17 smb owner@:rwxpdDaARWcCos:------I:allow
請注意,
I
這表明 ACL 是繼承的。ZFS 設置在ZFS 管理指南中進行了描述:
受限– 對於新對象,在繼承 ACL 條目時會刪除 write_owner 和 write_acl 權限。
passthrough – 當屬性值設置為 passthrough 時,將使用由可繼承 ACE 確定的模式創建文件。如果不存在影響模式的可繼承 ACE,則根據應用程序請求的模式設置模式。
現在 SMB 客戶端能夠刪除本地創建的文件。