我有几台 RHEL6 机器。其中一台正在将 nfs 挂载导出到其他机器。我在服务器上设置了 ACL(使用 设置setfacl -m
),但所有客户端都看不到它们。
这是我在 server1 上的导出:
/myexport server2.example.com(rw,async,no_root_squash)
这是我在 server2 上的 fstab:
server1.example.com:/myexport /mnt nfs4 noatime,async,lock 0 0
我尝试将 acl 添加到我的 fstab 挂载选项中,但没有成功。有人知道为什么我在客户端上看不到 ACL 吗?
答案1
ACL 在 NFS 上使用且有效。使用以下命令nfs4_getfacl
显示 NFSv4 安装上的 ACL:
$ nfs4_getfacl /tmp/test
A::OWNER@:rwatTnNcCy
A::[email protected]:rxtncy
A::[email protected]:rwadtTnNcCy
A:g:GROUP@:rtncy
D:g:GROUP@:waxTC
A::EVERYONE@:rtncy
D::EVERYONE@:waxTC
该 ACL 与 Linux ACL 相比为何如此不同?因为NFSv4 ACL和Linux 访问控制列表acl(5) 是完全不同的标准!Linux NFS 服务器将来回转换 ACL。
非常不幸的是,Linuxls
没有+
在客户端上显示具有 NFSv ACL 的文件......这具有误导性。
答案2
要将 POSIX ACL 与 NFS 结合使用,您必须使用 NFSv3。
NFSv4 ACL 与 POSIX ACL 有很大不同。前者使用非常具体的 nfs4_getacl 和 nfs4_setacl 进行设置,而后者使用标准 getfacl/setfacl 二进制文件进行配置。简而言之,NFSv4 ACL 与 POSIX ACL 无关(顺便说一句,NFSv4 ACL 更接近 Windows 环境中使用的 CIFS ACL)。