我的问题与这个 Windows 问题,但涉及 NFS4 (Linux) 和我们正在使用的底层 ZFS (OpenIndiana)。我们通过 NFS4 和 CIFS 分别向 Linux 和 Windows 用户共享此 ZFS。如果两个用户组都能从 ACL 中受益,那就太好了,但缺少的一块拼图如下:
每个用户都有一个主页,他可以在其中设置一个顶级继承的 ACL。他以后可以反复细化所包含文件/文件夹的权限。随着时间的推移,有时需要再次概括权限,以避免增加 ACL 条目的污染。如果需要,您可以调整每个文件的 ACL 以获得所需的权限,但这违背了继承 ACL 的目的。那么,如何才能实现 ACL完全清除就像上面链接的问题一样?
我没有找到任何关于空白继承 ACL 应该是什么样子的信息。这个用例似乎根本不存在。事实上,solaris修改模式手册页明确指出
A- Removes all ACEs for current
ACL on file and replaces
current ACL with new ACL that
represents only the current
mode of the file.
即,我们得到三个新的 ACL 条目,其中填充了代表权限位的内容,这对于清理来说是毫无用处的。
如果我尝试手动删除每个 ACE,在最后一个 ACE 上我得到
chmod A0- <file>
chmod: ERROR: Can't remove all ACL entries from a file
顺便说一句,这让我思考:为什么不呢?事实上,我真的希望整个文件特定的 ACL 都消失。
Linux 也是如此,它枚举以 1(!) 开头的 ACE,并且不太用心地描述它的困境
nfs4_setacl -x 1 <file>
Failed setxattr operation: Unknown error 524
那么,Solaris/NFS 下的 ACL 背后的想法是什么?它们永远不能被清除吗?为什么 ACL 设置命令的递归选项会污染所有子项,而不是设置单个 ACL 并让子项继承?这真的是设计者的意图吗?我可以使用 Windows 客户端完美地清理 ACL,但我是否应该告诉 Linux 用户他们必须切换操作系统才能合并权限?
答案1
使用“chmod A- file”,您可以完全清除 ZFS 文件系统上存储的文件的所有 ACL。之后仍显示的是根据文件权限计算出的“假”ACL。如果您还想删除它们,除了前一个命令外,您还可以运行“chmod 0 file”。