試著了解 Samba 如何處理 UNIX 權限

試著了解 Samba 如何處理 UNIX 權限

我正在使用 Linux、ZFS 和 Samba 建立備份伺服器。除我之外的所有用戶端都將使用 Windows 10,因此我的重點是正確支援 Windows 10,但這並不意味著 Linux 端的權限應該被允許不安全(即全域可讀和可寫入)。

在錯誤地刪除所有檔案上的 POSIX ACL 後,認為它們最初設定為允許群組訪問,Windows 端檔案的所有權限都被破壞了。

這是透過檢查手冊中的每個選項並重做配置來解決的,我弄清楚了要設定哪些選項才能獲得我想要的行為,即單獨設定 Windows 端的權限,同時保持 UNIX 權限的安全,但是有關於Samba 如何處理UNIX 權限,我還有兩件事不懂。

設定acl_xattr:ignore system acls = no會導致 UNIX 權限成為 Windows ACL 中的條目(CREATOR、GROUP 和 EVERYONE 條目),這是我不希望的,但是當設定為 時yes,所有者、群組和權限似乎仍然會影響 Windows 端的權限,它們仍然由Samba 強制執行。如果某個目錄具有root:backup 0660權限,則隨機使用者Domain User將無權存取該目錄,即使 Windows ACL 具有Domain Users.將群組從 變更backupuserswhereusers對應到 NT 組Domain Users,然後它將起作用。很明顯,UNIX 權限仍然被強制執行。

是否有一個設定可以使 Windows ACL 否決其餘的,即如果 Windows ACL 允許Domain Users,那麼無論 UNIX 權限如何規定,它們都將被允許?或者我可以使用 UNIX 權限來停用 Samba 嗎?

另一個問題是Samba 如何儲存UNIX 權限。在我的新配置中inherit owner = yes。這似乎在 Windows 和 UNIX 上都按預期工作,除非我嘗試將 UNIX 群組更改為其他群組。最初,setgid 位元是在john其群組的共享上設定的,認為inherit owner只影響所有者,而不影響群組。但是,當從共用中刪除 setgid 位元並將群組變更為users遞歸時,inherit owner = yes仍會使用該群組建立從 Windows 10 用戶端建立的新檔案和目錄john。目錄樹中沒有任何地方有群組john留下的目錄,我嘗試重新啟動我的 Windows 用戶端和 Samba 伺服器以防萬一,但這並沒有改變任何東西。

Samba 是否將 UNIX 權限儲存在其他地方,因此我直接從檔案系統更改 UNIX 群組不會影響 Samba 追蹤的群組?或者 Samba 仍然使用這個舊群組來儲存新檔案和目錄的原因可能是什麼?

您可以在下方找到 Samba 版本 4.7.6 配置的潛在相關選項。如果需要更多信息,請告訴我。

[global]
access based share enum = yes
acl group control = no
acl map full control = yes
acl_xattr:ignore system acls = yes
acl_xattr:default acl style = windows
create mask = 0775
directory mask = 0775
dos filemode = yes
dos filetime resolution = no
dos filetimes = yes
ea support = no
force create mode = 0600
force directory mode = 0600
force unknown acl user = no
guest account = nobody
guest ok = no
guest only = no
inherit acls = no
inherit owner = unix only
inherit permissions = no
invalid users = root
map acl inherit = yes
map archive = no
map hidden = no
map readonly = no
map system = no
map to guest = never
nt acl support = yes
obey pam restrictions = no
read only = yes
restrict anonymous = 2
security = user
server role = active directory domain controller
store dos attributes = yes
unix extensions = yes
vfs objects = dfs_samba4 acl_xattr shadow_copy2

[backups]
create mask = 0660
directory mask = 0770
ea support = yes
path = /mnt/pool/backups
read only = no

答案1

Samba 是否將 UNIX 權限儲存在其他地方,因此我直接從檔案系統更改 UNIX 群組不會影響 Samba 追蹤的群組?或者 Samba 仍然使用這個舊群組來儲存新檔案和目錄的原因可能是什麼?

我只能找到第二個問題的答案。在我的實驗過程中,inherit owner我一度想知道作為 NT ACL 的一部分存儲的值是什麼,因此我檢查了一個目錄,samba-tool ntacl get /path/to/dir令我驚訝的是,我看到舊的 GID 作為group_sid.而且由於我在檔案系統中的其他任何地方不再有對舊 GID 的任何其他引用,這似乎是 Samba 保留舊 UNIX 群組的可能原因,特別是因為每當我將繼承所有者設為或unix onlyno,它就不會有舊的 UNIX 群組。顯然,設定inherit owneryes(即unix and windows)會導致 Samba 將 UNIX 群組設定為儲存在 NT ACL 中的群組。

我仍然希望第一個問題的答案,但我找到了一個解決方法將 NT 組對應Domain Users到我首選的 UNIX 組並透過 POSIX ACL 將其他人的權限設定為 0:setfacl -Rm d:o:---,o:--- /my/share

相關內容