Windows

從 Windows 客戶端通過 ZFS SMB 對在 OpenIndiana 的主機上創建的文件進行寫入訪問

  • December 7, 2012

我有一個執行 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 沒有設置dD標誌,這意味著它不能被刪除/移動,儘管我仍然不明白為什麼本地使用者能夠在 SMB 無法刪除它時刪除它。
  • ACL 的設置方式不是為了繼承 ACL,即fd標誌。
  • ZFSaclinherit屬性應設置為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 客戶端能夠刪除本地創建的文件。

引用自:https://serverfault.com/questions/454313