我有一個 FreeNAS (FreeBSD) 系統,帶有由 ZFS 檔案系統支援的 CIFS 共用(稱為「庫」)。該共用是根據 FreeNAS GUI 設定的,以使用“Windows / Mac”ACL,我認為這意味著 NFSv4 ACL。
這就是我想要的基本 ACL:
nas# getfacl /mnt/big/library/test
# file: /mnt/big/library/test
# owner: DOMAIN\administrator
# group: DOMAIN\domain admins
owner@:rwxpDdaARWcCo-:fd----:allow
group@:rwxpDdaARWcCo-:fd----:allow
everyone@:r-x---a-R-c---:fd----:allow
在 Windows 7 GUI 中,“DOMAIN\administrator”和“DOMAIN\Domain Admins”顯示為“完全控制”,而“Everyone”則顯示為“讀取和執行”,繼承自共用的根目錄。 Windows 甚至可以正確地將所有者識別為「管理員」。
我有兩個我認為可能相關的問題。
首先,如果我在現有物件(檔案或目錄)上修改或建立 ACE,Windows 會將 ACE 替換owner@
為 for group:DOMAIN\administrator
,並且在新增的情況下,它會為group:DOMAIN\joe
使用者建立一個群組 ACE。我不太介意它認為用戶是一個群組(只要它有效),但是替換所有者 ACE 很痛苦,因為現在如果我更改物件的擁有者,ACE 仍然會存在於先前的物件中所有者。
第二個煩惱是建立新物件時,ACL 如下所示:
nas2# getfacl /mnt/big/library/test/New\ folder/
# file: /mnt/big/library/test/New folder/
# owner: DOMAIN\joe
# group: DOMAIN\domain users
owner@:rwxpDdaARWcCo-:fd----:allow
group@:rwxpDdaARWcCo-:fd----:allow
everyone@:r-x---a-R-c---:fd----:allow
儘管它似乎正確繼承了 ACE,但它沒有保留父目錄的擁有者或群組。有沒有辦法使用包含目錄的屬性來建立它?
看著setfacl 線上說明頁它指出:
-d The operations apply to the default ACL entries instead of access
ACL entries. Currently only directories may have default ACL's.
This option is not applicable to NFSv4 ACLs.
對我來說,這意味著 NFSv4 ACL 不支援預設 ACE,這似乎是我解決第二個問題所需要的。有人知道這是否正確?
答案1
所以我並沒有真正處理過這些問題,我可能是嚴重錯誤的,但這裡有一些可以解釋它的地方:
NFSv4 ACL 類似,但不完全的例如 Windows/CIFS/NTFS ACL。
例如,Windows ACL 格式根本不區分「使用者」或「群組」或「特殊」SID。由於 NAS 不知道您的 Windows 系統有哪些帳戶,因此它無法確定哪些 SID 是用戶,哪些是群組 - 它必須猜測。
然而,雖然 NFSv4 ACL 不支援 POSIX 風格的“預設 ACE”,但它們做支援 Windows/CIFS 風格的「可繼承」ACE;也就是說,每個條目可以是可繼承的,也可以是不可繼承的。
在 FreeBSD 中
getfacl
,您可以看到與「可透過檔案繼承」和「可透過目錄繼承」相對應的f
和標誌。d
還有一個「僅繼承」標誌
i
,它實際上與 POSIX ACL 中的「預設」ACE 完全相同 - 也就是說,ACE 僅被繼承,但不用於目錄本身。創建文件的時候是總是由創建它的用戶擁有。它是不可遺傳的。
如果 CIFS 伺服器執行 Windows Server,它可以選擇將內建的「管理員」群組設定為預設檔案擁有者(再次注意它如何讓擁有者成為使用者或群組,並且缺少「群組所有權」) ')。