如何让 Windows 正确修改 CIFS/ZFS ACL

如何让 Windows 正确修改 CIFS/ZFS ACL

我有一个 FreeNAS (FreeBSD) 系统,带有一个 CIFS 共享(称为“库”),由 ZFS 文件系统支持。该共享根据 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 会用owner@一个 ACE 替换该 ACE 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,则可以选择将内置的“管理员”组设为默认文件所有者(再次注意它如何让所有者成为用户或组,并且缺乏“组所有权”)。

相关内容