Zfs: NFS/POSIX ACL 支持

创建于 2011-03-23  ·  51评论  ·  资料来源: openzfs/zfs

有 POSIX ACL 支持会很好。
正如我所见,zfs 已经有 xattr 支持,而其他一些文件系统通过 xattr 提供了 ACL 支持。 我不知道内部原理,但这个任务可能很容易实现。

Feature

最有用的评论

Linux 风格的 Posix ACL 已作为 xattr 实现并合并到 master 中。 它们独立于本机 NFS ACL 存储,不会发生冲突。 添加了新的数据集属性acltype以启用此功能。 为了获得最佳性能,强烈建议您同时设置acltype=posixaclxattr=sa有关更多详细信息,请参阅更新的手册页:

       acltype=noacl | posixacl

           Controls  whether  ACLs  are  enabled and if so what type of ACL to
           use.  When a file system has the acltype property set to noacl (the
           default)  then  ACLs are disabled.  Setting the acltype property to
           posixacl indicates Posix ACLs should be used.  Posix ACLs are  spe-
           cific  to  Linux  and are not functional on other platforms.  Posix
           ACLs are stored as an xattr and therefore will  not  overwrite  any
           existing ZFS/NFSv4 ACLs which may be set.  Currently only posixacls
           are supported on Linux.

           To obtain the best performance  when  setting  posixacl  users  are
           strongly encouraged to set the xattr=sa property.  This will result
           in the Posix ACL being stored more efficiently on disk.  But  as  a
           consequence of this all new xattrs will only be accessable from ZFS
           implementations which support the xattr=sa property.  See the xattr
           property for more details.

所有51条评论

不幸的是,事情比最初看起来要棘手一些。

ZFS 在内部完全支持并强制执行 NFS 风格的 ACL。 不幸的是,在 Linux 下,现有工具只能操作 Posix 风格的 ACL。 已经做了一些工作以将 NFS ACL 模型以 Rich-ACL 的名义引入 Linux。 为了与新的 Rich-ACL 工具链集成,ZFS 需要提供一个虚拟的 system.richacl xattr 接口。 这个 xattr 不会像其他 xattr 一样存储,而是与 zfs_getacl() 和 zfs_setacl() 集成。 这个 xattr 钩子将负责将 vsecattr_t 与 xattr 的线性字节流相互转换。

通过添加一些钩子并利用现有的 Posix ACL 支持功能,可以轻松支持 Posix ACL。 但是,最好不要实施它们以避免 Posix 和 Rich ACL (NFS/ZFS) 之间的一致性问题。

谢谢你的描述。 如果有一些应用程序支持 POSIX ACL,我认为 POSIX ACL 也会有帮助。 我记得桑巴舞有类似的东西。 rsync 有 ACL 支持,但我不确定它是否只有 POSIX,因为 man 只说“ACL”。 不知道其他应用程序。
我只想说,即使存在其他 ACL,它们也不是无用的。 并且未来可能会考虑实施。

所需工作摘要

ZFS 在内部完全支持并强制执行 NFS 风格的 ACL。 不幸的是,在 Linux 下,现有工具只能操作 Posix 风格的 ACL。 已经做了一些工作以将 NFS ACL 模型以 Rich-ACLs (pdf) 的名义引入 Linux。 为了与新的 Rich-ACL 工具链集成,ZFS 需要提供一个虚拟的 system.richacl xattr 接口。 这个 xattr 不会像其他 xattr 一样存储,而是与 zfs_getacl() 和 zfs_setacl() 集成。 这个 xattr 钩子将负责将 vsecattr_t 与 xattr 的线性字节流相互转换。

通过添加一些钩子并利用现有的 Posix ACL 支持功能,可以轻松支持 Posix ACL。 但是,最好不要实施它们以避免 Posix 和 Rich ACL (NFS/ZFS) 之间的一致性问题。

关于必须强制执行哪个安全模型的挂载选项/文件系统属性呢? (也许另一个甚至完全隐藏在管理工具中,例如 setfacl/getfacl)。
在 Linux 世界中,Rich-ACL 几乎没有使用。 Posix ACL 的使用率更高。 在我的典型配置中,文件系统缺少 ACL 是一个问题。
我认为通过这种方式,我们可以在更短的时间内获得有效的 ACL 实现(Posix)。

我也希望看到 POSIX ACL 支持集成到 Linux 上的 ZFS 中。 Linux 是 POSIX,在 RichACL 成为主流(或至少在内核中)之前,我认为 Linux 上 ZFS 中的 POSIX 集成是有意义的。

我很想看到这个! 对我们来说几乎是一个表演者,但决定在没有几个月的情况下生活。

当 ACL 被干净地处理时,我们应该确保合并以下补丁以重新生成 aclmode 属性。 已对 Illumos 和 FreeBSD 实现进行了此更改。

问题 #742:恢复 ZFS“aclmode”属性
https://www.illumos.org/issues/742
https://github.com/illumos/illumos-gate/commit/a3c49ce110f325a563c245bedc4d533adddb7211

可以映射 Posix < - > NFSv4 ACL。
IETF 有一个关于该映射的草案:http://tools.ietf.org/id/draft-ietf-nfsv4-acl-mapping-03.txt
但它只明确指定 Posix => NFSv4(单向)。

我认为映射方法理论上是最好的一种,但它比其他方法更容易出错,因为 1:1 映射是不可能的。
总会有一些极端情况,在这种情况下,用户被拒绝(或更糟的是,给予)不应被拒绝(或更糟,给予)的特权。
至少它应该带有“大脂肪警告”。
但是拥有_安全_功能_必须_近似它应该做什么是不明智的。
建议:关于“模棱两可”的 NFSv4 acl 不允许任何访问并在内核日志上打印错误。
该提案的问题:无法手动更正快照。
设置它们应该不是问题,因为它可以简单地视为 Posix ACL 的“奇数”磁盘格式。
NFSv4 ACL 的更多可配置继承产生了另一组需要解决的问题。

我认为这个实现的第一步应该能够:

  • 编写 POSIX ACL,读取并执行它所写的内容。
  • 将它们作为 NFSv4 ACL 写入磁盘,以便其他实现也可以按预期读取和强制执行它们。
  • 使用由其他实现编写的非平凡可映射的 NFSv4 ACL 会失败。
    ** 拒绝对该项目的任何访问。
    ** 不允许用户在具有“特定”继承标志的目录中创建文件
    ** 可能在每个文件系统的基础上使用最安全的默认值配置“失败行为”。 (还有快照??)

在后续步骤中,映射逻辑 NFSv4 => Posix 可以进行调整,并使其更具可定制性。

有什么更好的想法吗?

这对我来说似乎是一个合理的起点,只是一些评论。

虽然完美的 1:1 映射是不可能的,但实际上并没有那么糟糕。 正如您指出的那样,有一个明确指定的 IETF Posix -> NFSv4 映射,可用于在磁盘上设置正确的 ACL。 一旦将磁盘上设置为 SA,现有的 zfs 实现就应该开始独立于 VFS 中的通用 Linux ACL 挂钩来强制执行它们。

然后,您当然需要实施一些合理的 NFSv4 -> Posix 映射来读取 ACL。 然而,这的合理实现已经存在。 例如,Linux nfs 内核服务器被迫将其所有 NFSv4 ACL 存储为 Posix ACL,这是一种有损操作。 顺便说一句,从长远来看,公开原始 nfsv4/zfs ACL 对 nfs 内核服务器来说是一件好事。 您可能会避免无意义的 NFSv4 -> Posix -> NFSv4 转换。

最后,我们希望有一个测试套件来验证我们做对了。 毕竟这是一项安全功能。 令人高兴的是,我的理解是已经存在几个好的测试套件。

Aneesh kumar 和 Andreas Gruenbacher 在 Greg Banks 之前完成的工作中有一项关于 Richacls 的工作。 已为 3.1 主线合并提交补丁,但由于一些更改需要时间并将在下一个版本中合并。
补丁链接: - https://lkml.org/lkml/2011/10/18/279

一旦进入主线,我们就可以利用它们来支持 ZFS 的 nfsv4acls。

一旦进入主线,我们就可以利用它们来支持 ZFS 的 nfsv4acls。

那么 POSIX ACL 呢? Brian 说用usinx xattr 实现它们并不难。 这也可以由某人完成吗? :)

ZFS 支持 nfsv4acls,所以恕我直言,我们应该首先支持 nfsv4acls,看看是否真的需要 posix acls。 如果是,那么我们可以找出定义它们之间映射的方法。

我看不出有任何理由不能同时完成。 Maxximino 目前正致力于通过有据可查的翻译来支持 system.posixacl xattr 接口。 在system.richacl xattr接口集成且有真实工具链的情况下,可以支持添加。

“目前正在工作”作为与学术和工作相关的任务允许我,但“空闲”时间的优先级很高。
我已经查看了 IllumOs CDDL 许可代码,并找到了一些执行 NFSv4 <-> posix acl 转换的代码。 从正确性的角度来看,它应该是一个坚实的基础。 根据要求提供详细信息。

我知道solaris 只提供了两个chmod 副本来管理ACL。 不幸的是,这非常笨拙和笨拙。 我建议我们使用辅助程序 setzacl、getzacl 或类似程序在 linux 上的 zfs 上提供 ACL 查看和修改工具。 最好创建的接口类似于(或兼容)solaris chmod,可能会有所改进,但在 zfs linux 实现中标准化,并且最好能够使用“nfs4”acls 处理未来的文件系统。 (如果有人能解释为什么它们被称为 nfs4 ACL,那也会有很大帮助!)

我想补充一点,Samba 用户可能喜欢坚持使用 nfs4 ACL,尤其是因为它们最接近匹配 Windows NTFS ACL 的特性。 当您想在 Active Directory 环境中将 Samba 用作用户主文件夹和配置文件文件夹的服务器时,这一点很重要,在该环境中,较新版本的 Windows 会检查特定的 ACL。 此外,在 Sun 时代,Windows 互操作是 ZFS 的设计目标之一,所以很遗憾看到它消失......

也就是说,我完全理解 POSIX 合规性的驱动力。

aarcane - 有关 NFSv4 ACL 的历史,请参阅http://wiki.linux-nfs.org/wiki/index.php/ACLs

我目前正在试验 Samba 4 DC 和 ZFS CIFS 共享; 基本系统是 ubuntu 12.04。

XP Pro SP3 客户端可以查看和管理 Active Directory(用户和计算机),并对从 EXT4 共享的文件夹正确设置 NTFS 权限。

一旦您通过 XP gui 更改其权限,从 ZFS 共享的文件夹将通过 CIFS 变得无法浏览(尽管您仍然可以按预期从服务器的命令行访问它们)。

我认为这是上面线程中概述的问题的结果? 任何解决方法的想法将不胜感激。

通过 Samba 4 启用完整的 NTFS ACL 管理对 ZFS 来说是一个巨大的好处。

您能否发布有关您的问题的更多详细信息? 确切的 Samba4 版本,您使用的是哪个文件服务器(smbd 或 ntvfs)以及任何相关设置? (例如,您使用的是 vfs_acl_xattr 还是类似的东西?)
如果相同的 Samba4 配置在没有“acl”选项的情况下安装在 extY 上,也许会打开另一个问题。

关于通过 Samba 操作真正的 NFSv4(类似 NTFS)的 ACL,只有在内核中合并了“Rich ACL”补丁之后,才能以一种干净的方式进行操作。

谢谢马克西米诺。
我正在使用 Samba 4.0.0 alpha19。
我只是尝试使用 ntvfs(sudo /usr/local/samba/sbin/samba -i -M single)来服务器文件 - 它提供来自 ext4 的 netlogon 和 sysvol 共享以及来自一对镜像驱动器的 zfs 共享 aclinherit=直通集。
没有使用 vfs_acl_xattr 模块。

“关于通过 Samba 操作真正的 NFSv4(类似 NTFS)ACL,只有在内核中合并了“Rich ACL”补丁后,才能以干净的方式完成。”

据我所知,官方的richacls补丁只支持EXT4——你是说如果我使用opensuse(默认包含richacls)或将richacls补丁到ubuntu/debian中,zfs+samba4+ntfs acls应该“开始工作“?

我已经重现了你的问题。
您没有明确使用 vfs_acl_xattr,但 Samba4 正在“默默地”做同样的事情。 它将他的 ACL 保存到名为“security.NTACL”的 xattr 中(您可以使用 getfattr -n security.NTACL $FILENAME; 看到它,并使用 setfattr -x security.NTACL $FILENAME 删除)。
该属性仅由 Samba 考虑,zfs/linux 内核中的任何内容均不考虑。 由于一个简单的 perl 程序将 /dev/urandom 中的值保存到 zfs 中的 xattrs 中,可以将它们读回原封不动的,我真的认为这是一个 Samba4 问题。
该问题可能仅在 zfs 上显示,因为在其他 fs 上,它可以将他的 ACL 映射到 Posix ACL 而不是使用 xattrs。

不,仅仅用丰富的 acl 补丁修补内核是不够的。 当这些补丁登陆主线时,就可以开始在 zfs 中集成丰富的 acl 支持。

我只是在 Suse 上构建 Samba 4; 我想我正要从不同的角度重现你的复制品。
救了我的痛苦。

也许一个合理的(短期)解决方法是通过稳定的 Samba 3 环境从 zfs 提供文件,例如在不同的 Linux-VServer 中对 Samba 4 DC 进行身份验证?

从中期来看,将基于 ZFS 的 CIFS 共享与 Samba 4 AD 相结合,所有这些都基于具有出色通用硬件支持的 Linux 操作系统_在同一台机器上_的实用性不容小觑。 小型企业/非营利应用程序是巨大的。

感谢迄今为止所做的所有工作。

我偶然发现了以下线程:
https://lists.samba.org/archive/samba/2012-August/168660.html

总结一下,Samba 4 有一个名为 vfs_zfsacl 的 acl 模块,它在 Solaris 上使用,以便 Samba 可以使用本机 ZFS acl。 zfsonlinux 可以使用这个模块吗? Linux 上的用户空间是否可以使用必要的 API?

@kisg这是个好问题,这是我第一次听说 Samba 的 vfs_zfsacl 模块。 有些人需要做一些跑腿的工作来确定他们期望什么界面。 根据它是什么,我们可能能够提供它。 尽管如果不进行转换,您仍然会遇到无法在 Linux 机器上管理 ACL 的问题。

我快速查看了来源。
您可以在此处找到 vfs_zfsacl.c 的 Samba v4-0-stable 分支版本: git.samba.org

它只是将内部 Samba 表示转换为原生 SunOS NFSv4 acl/facl API。 该 API 也在 FreeBSD 上使用围绕其自己的 NFSv4 acl 实现的瘦用户空间包装器实现。

基于这个分析,我们不能在 Linux 上重用这个实现。 相反,如果 zfsonlinux 的 richacl 集成完成,我们可以使用 librichacl 库为 Samba 创建一个类似的简单(希望少于 1000 行)vfs_richacl 模块。

从我粗略地看一下richacl内核补丁,似乎zfsonlinux集成甚至可以在不实际修补内核的情况下完成,只需将richacl代码的所需部分(数据结构和xattr转换)拉入内核版本的zfs树中原生不支持。 这对我们很重要,因为我们(我的公司)想要运行标准的 Ubuntu LTS 内核,并且只将 zfsonlinux 作为一个额外的模块。

但是,我不确定 Richacl 是否仍在维护(它的存储库并未真正保持最新),并有望包含到 vanilla 内核中。

我联系了 Richacl 补丁集的作者。 他向我指出了以下实验性的 Richacl vfs 模块: v4acls-experimental/samba.git

因此,除了 zfs 本身的 Richacl 支持之外,几乎所有部分都已就位(或至少以实验形式存在)。

也许从 samba 方面将 libsunacl.c 移植到 linux 就足够了?

http://sourceforge.net/projects/libsunacl/

但据我所知,zfsonlinux 上仍然缺少“aclmode”。

我什至不知道为什么我们还没有某种形式的 acl 支持。 为什么有
zfs acls 没开机? 我知道 chmod 和 ls 的代码
存在。现在应该已经提供了 getfacl 样式的 getzacl。我敢肯定
不过,缺少 acl 是有充分理由的。
2013 年 2 月 15 日下午 2:07,“franx”通知@github.com 写道:

也许从 samba 方面将 libsunacl.c 移植到 linux 就足够了?

http://sourceforge.net/projects/libsunacl/

但据我所知,zfsonlinux 上仍然缺少“aclmode”。


直接回复本邮件或在 Gi tHub上查看

支持 zfs acl
测试:
在启用 acl 挂载选项的其他文件系统上的 smb 共享上创建文件,在 Windows 上设置 ACL。

使用 aclinherit=passthrough 在 zfsonlinux 卷上移动该文件
acl 是保留的..

Wath atm 没有解决方案是在 samba 中完成。

在这种配置下,acl_xattr 或 acl_tdb 都不能正常工作,在 bsd 上它们使用 vfs_zfsacl

通过 libsunacl 看起来像来自 zfs2bsd 的翻译器

我的问题可能很愚蠢,但我想清楚了解我们是否有 acl 支持。 我创建了 VBox ubuntu 最小服务器 12.04 LTS,然后安装了 ubuntu-zfs,创建了 pool w 命令

'mypool' 的历史:
2013-05-05.15:12:49 zpool create -f mypool /dev/disk/by-id/ata-VBOX_HARDDISK_VB88a04e0d-d8d1e7a4

“坦克”的历史:
2013-04-30.13:44:54 zpool 创建坦克 /root/vol1
2013-05-01.00:13:33 zfs set aclinherit=passthrough tank
2013-05-05.13:50:14 zfs 设置 dedup=on tank

tank 确实支持 setfacl 没有问题
mypool 不支持,并表示不支持操作。

我想在 samba 中使用 zfs,我需要控制多个用户对文件夹的访问。 像那样
root@server :~# setfacl -mg:用户:--- test4v007/

我想为 ZFS 实现 Richacls 补丁,但由于我对 ZFS 完全没有经验,如果 ZFSonLinux 开发人员之一可以提供一些帮助(主要是一些提示和讨论的形式),那将会很好。

我想给它一个冲击...

@behlendorf - 现在你已经有了一个稳定的文件系统版本,我们是否有一个确定的时间表来完成这项工作? 我知道你已经完成了里程碑 0.8,但按照目前的发布速度,这似乎还需要几年的时间 - 我们可以以任何方式将其提前吗?

我们希望继续使用 Samba 为我们的配置文件存储 NAS 服务器部署工作,但没有 ACL 可能意味着我们必须坚持使用 FreeBSD,我们真的不想这样做,因为我们所有的经验基础都是使用 Linux。

我希望,这不是完全离题。
你试过 Debian kFreebsd 吗?

它几乎就像一种Linux..

@sopmot - 你知道,我之前看过它并认为它没有做好生产准备,但我快速阅读了它,看起来它可能比 ZoL 更适合我们需要的战斗准备,如果我们马上就做。

太好了,谢谢你让我走上正轨 - 为粗鲁道歉。

我一直在看 kfreebsd,它缺少 iscsi、nfsv4 和一个
相当于kvm虚拟化。 我很认真地将它用于 root
直到这些缺点变得明显
2013 年 5 月 19 日上午 9:50,“Tamas Papp”通知@ github.com 写道:

我希望,这不是完全离题。
你试过 Debian kFreebsd 吗?

它几乎就像一种Linux..


直接回复本邮件或在Gi tHub上查看
.

我也很想看到这个问题。 不幸的是,这些天我的时间很紧(加上我对低级/内核的东西一无所知),所以我无能为力:(虽然我只是在寻找一种好方法来帮助自己对某些目录中的新文件强制执行某些权限;我经常将文件放在一个公开可用的文件夹中,如果它们可以以宽松的权限自动设置就好了,因为我真的不想将我的 umask 设置为这样对于我创建的大多数文件都是自由的,这些文件最终位于我的主文件夹中。在 OSOL/FreeBSD 中,我会使用 NFSv4 ACL 来执行此操作,但如果有人有任何想法,我愿意接受更好的解决方案。我唯一能想到的另一件事of 正在运行一个 cronjob,它每隔半小时或其他时间递归地在相关目录上设置 perms,但这太不雅了!这样的混乱 :(

仅供参考,所以人们不会像我一样犯同样的错误 - Debian kFreeBSD 非常适合 ZFS 支持,但是 ACL 仍然无法从用户空间工作,您只会得到“未实现的功能” - 请参阅 Debian 错误: http:// bugs.debian.org/cgi-bin/bugreport.cgi?bug=607573

@iamacarpet一旦需要此功能的人有时间处理它,它就会发生。 目前,该项目的主要驱动因素对 ACL 的使用并不多,因此它们位于优先级列表的底部。 但是没有什么可以阻止需要这种支持的人加入并更快地做到这一点。 对不起,但这只是现实情况。

你好,

我们在备份设备中使用 zfsonlinux,我们认为 ACL 对于集成目的很重要。 需要一些常见操作,例如从 Windows 计算机更改 ZFS 共享卷中的权限。

ACL 还在路线图中吗?

谢谢。

@n1mh预定版本为 0.8.0。

感谢@maxximino已经实现了对 Posix ACL 的支持。 我已经用接近最终版本的补丁打开了拉取请求 #1809,准备进行更广泛的测试。 它干净利落地通过了 Posix 测试套件的 ACL 部分,我们不知道任何悬而未决的问题。

对于那些想要此功能的人来说,如果您可以使用实际工作负载测试提议的补丁,那将非常有帮助。 请验证它在您的环境中的行为是否符合您的预期。 Posix ACL 默认禁用,但可以通过设置数据集的 _acltype_ 属性启用。

zfs set acltype=posixacl pool/dataset

Linux 风格的 Posix ACL 已作为 xattr 实现并合并到 master 中。 它们独立于本机 NFS ACL 存储,不会发生冲突。 添加了新的数据集属性acltype以启用此功能。 为了获得最佳性能,强烈建议您同时设置acltype=posixaclxattr=sa有关更多详细信息,请参阅更新的手册页:

       acltype=noacl | posixacl

           Controls  whether  ACLs  are  enabled and if so what type of ACL to
           use.  When a file system has the acltype property set to noacl (the
           default)  then  ACLs are disabled.  Setting the acltype property to
           posixacl indicates Posix ACLs should be used.  Posix ACLs are  spe-
           cific  to  Linux  and are not functional on other platforms.  Posix
           ACLs are stored as an xattr and therefore will  not  overwrite  any
           existing ZFS/NFSv4 ACLs which may be set.  Currently only posixacls
           are supported on Linux.

           To obtain the best performance  when  setting  posixacl  users  are
           strongly encouraged to set the xattr=sa property.  This will result
           in the Posix ACL being stored more efficiently on disk.  But  as  a
           consequence of this all new xattrs will only be accessable from ZFS
           implementations which support the xattr=sa property.  See the xattr
           property for more details.

项目 acltype=nfs4 是否也应该被识别和处理
noacl,但为了兼容性而接受?
2013 年 10 月 29 日下午 3:05,“Brian Behlendorf”通知@github.com
写道:

Linux 风格的 Posix ACL 已作为 xattr 实现并合并到
掌握。 它们独立于本机 NFS ACL 存储,并且不会
冲突。 添加了新的数据集属性 _acltype_ 以启用
这个功能。 为了获得最佳性能,强烈建议您
设置 _acltype=posixacl_ 和 _xattr=sa_。 有关更多详细信息,请参阅
更新的手册页:

   acltype=noacl | posixacl

       Controls  whether  ACLs  are  enabled and if so what type of ACL to
       use.  When a file system has the acltype property set to noacl (the
       default)  then  ACLs are disabled.  Setting the acltype property to
       posixacl indicates Posix ACLs should be used.  Posix ACLs are  spe-
       cific  to  Linux  and are not functional on other platforms.  Posix
       ACLs are stored as an xattr and therefore will  not  overwrite  any
       existing ZFS/NFSv4 ACLs which may be set.  Currently only posixacls
       are supported on Linux.

       To obtain the best performance  when  setting  posixacl  users  are
       strongly encouraged to set the xattr=sa property.  This will result
       in the Posix ACL being stored more efficiently on disk.  But  as  a
       consequence of this all new xattrs will only be accessable from ZFS
       implementations which support the xattr=sa property.  See the xattr
       property for more details.


直接回复本邮件或在Gi tHub上查看
.

为什么这是关闭的? acltype nfs4 _远_ 比非标准的完全过时的受限 POSIX 草案 ACL 更重要。 NFS ACL 是其他平台上 ZFS 的默认设置,并且更加灵活。 它们还允许在 NFSv4 和 SMB 上无缝导出,因为 ACL 实际上很好地映射到 NFS 和 NT ACL。 POSIX 草案 ACL 两者都做不好。

POSIX 草案 ACL 也不能很好地处理继承,只为新文件提供默认值。NFSv4 ACL 是唯一的前进方式。

@synnack支持 NFS ACL 的主要问题实际上并不在 ZFS 方面。 我们保留了所有这些功能,并在内部使用。 问题在于围绕 POSIX 而不是 NFS ACL 构建的 Linux 实用程序(getfattr、setfattr 等)。 过去曾尝试将 NFS ACL 引入 Linux,但据我所知,没有一次取得广泛成功。 除非事情最近发生了变化,否则这是最大的障碍。

当然,但是看看 Andreas Gruenbacher 和 Aneesh Kumar 在 OpenSuSE 的工作,他们已经发布了 Richacl 补丁......现在就包含在 LKML 上......

除了 Richacls 不是 NFSv4 ACL,它们是(有点疯狂)将 NFSv4 模式与 POSIX ACL 合并的结果,专为 ext4 设计并保留了 POSIX ACL IIRC 的所有最糟糕的部分。

我们需要的是 NFSv4 ACL 的适当接口,以便支持它们的文件系统可以设置它们。 请注意,Linux 支持(至少部分)至少另一种类型的 ACL - AFS ACL。 所以支持多种方案的可能性并不疯狂,尽管我想我们可能需要一个类似 Solaris 的 API 来最好地支持它......

当然,如果 Richacls 可以解决所有超出 NFSv4 的部分,并假设用户空间不会让你失望(你好,POSIX ACL 掩码位!),并假设它们实际上实现了所有 NFSv4 规范。老实说,这是很多假设。

我实际上建议以这种速度添加适用于 ZFS 上的文件的 IOCTL

是的,我不确定这些人对合并在丰富 ACL 中的 POSIX 草案 ACL 内容有什么看法。

@贝伦多夫

问题在于围绕 POSIX 而不是 NFS ACL 构建的 Linux 实用程序(getfattr、setfattr 等)。 过去曾尝试将 NFS ACL 引入 Linux,但据我所知,没有一次取得广泛成功。 除非事情最近发生了变化,否则这是最大的障碍。

我看到发行版正在使用“nfs4-acl-tools”包进行 NFS4 acl 管理。 它使用 nfs4_getfacl、nfs4_setfacl 和 nfs4_editfacl。 当我对 zfs 运行这些时,我目前得到“不支持请求属性的操作”。 在我看来,这就是 linux 执行 NFS4 的方式。 现在我们只需要一种让工具和 zfs 相互了解的方法。

@ghfields感谢您的评论,我已经有几年没有研究过 nfs4 acls,但看起来他们在用户空间组件方面取得了非常好的进展。 基于对 nfs4-acl-tools 源代码的粗略阅读,看起来预期的用户/内核接口是通过名为system.nfs4_acl的 xattr 来实现的,其中包含原始 xdr 编码的 acl。

使这项工作可能只需要为system.nfs4_acl xattr 添加 xattr 处理程序,它在 ZFS 内部存储的 nfs4 acl 和实用程序期望的它的表示之间进行转换。 由于 NFSv4 是唯一的使用者,因此内核不提供我们可以使用的任何通用功能,因此我们需要编写函数来执行此编码/解码。

从表面上看,让这项工作看起来很有可能。 我认为如果开发人员想要解决此功能会很棒。

由于在实施 POSIX acls 时此问题已关闭,是否应该专门为 NFS4 acls 创建一个新问题? 还是应该重开这个?

@ghfields你能为此开一个新问题吗? 这将使跟踪更容易。

此页面是否有帮助?
0 / 5 - 0 等级