我正在使用 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
.將群組從 變更backup
為users
whereusers
對應到 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 only
時no
,它就不會有舊的 UNIX 群組。顯然,設定inherit owner
為yes
(即unix and windows
)會導致 Samba 將 UNIX 群組設定為儲存在 NT ACL 中的群組。
我仍然希望第一個問題的答案,但我找到了一個解決方法將 NT 組對應Domain Users
到我首選的 UNIX 組並透過 POSIX ACL 將其他人的權限設定為 0:setfacl -Rm d:o:---,o:--- /my/share
。