我们正在运行 Rocky Linux 8.9(因此,本质上是 RHEL 8.9)商店,我的任务是调查通过 NFS 安装的文件系统上的 ACL。我们也在使用 FreeIPA/IdM。
我已经设置了一台测试机器,将其注册到 IdM,导出了一个 NFS 共享,并在本地安装了它,但 ACL 部分似乎有所缺失:
[root@example ~]# cat /etc/exports
/export/ *(rw,acl,no_root_squash)
[root@example ~]# mount | grep /export
localhost:/export on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp6,timeo=600,retrans=2,sec=sys,clientaddr=::1,local_lock=none,addr=::1)
[root@example ~]# cd /mnt/
[root@example mnt]# touch testfile
[root@example mnt]# getfacl testfile
# file: testfile
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@example mnt]# setfacl -m u:user:r testfile
setfacl: testfile: Operation not supported
几个问题:
- 由于客户端和服务器都是 Linux/POSIX,我是否正确理解我应该使用
getfacl
而setfacl
不是它们的 nfs4_ 等效项? - 我需要 idmapd 吗?我有一个名为 nfs-idmapd 的服务正在成功运行。
- 我读到过一些文章说安装时
sec=sys
应该用 来代替。seckrb5
更新:
我做了进一步调查,并取得了一些小突破:nfsv4_set*acl
只要使用数字 UID 或 GID,就可以在 NFS 共享上正常工作。与 IdM/Kerberos 的耦合才是问题所在。
答案1
RHEL 8.4 添加了对 NFS v4.2 上的 POSIX ACL 的支持。这记录在https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/8.4_release_notes/index#enhancement_file-systems-and-storage在本节末尾(错误https://bugzilla.redhat.com/show_bug.cgi?id=1888214):
通过 NFSv4.2 协议支持用户扩展属性
此更新添加了 NFSv4.2 客户端和服务器端对用户扩展属性的支持 (RFC 8276)。
这包括以下协议扩展:
新操作:
- GETXATTR——获取文件的扩展属性
- SETXATTR——设置文件的扩展属性
- LISTXATTRS——列出文件的扩展属性
- REMOVEXATTR——删除文件的扩展属性
新的错误代码:
- NFS4ERR_NOXATTR-xattr 不存在
- NFS4ERR_XATTR2BIG-xattr 值太大
新属性:
- xattr_support - 用于确定是否支持 xattrs 的 Per-fs 只读属性。设置为 True 时,对象的文件系统支持扩展属性。
答案2
常规set/getfacl
使用扩展属性,这确实是 NFSv4.2 的一部分,如 @abbra 的回答中所述https://serverfault.com/a/1158690/127530. 但是,xattr 不支持 ACL。
要通过 NFSv4 使用 ACL,您应该使用nfs4_set/getfacl
作为软件包一部分的命令nfs4-acl-tools
。
答案3
Rocky Linux(和 Alma Linux)是 CentOS 的延续,CentOS 是从 Red Hat Enterprise Linux 分叉而来的,其中 ACL 不适用于 NFSv4。您的 Rocky Linux 8 系统也是如此,RHEL、Rocky、Alma 9 也是如此。
https://access.redhat.com/solutions/23230
可以通过nfs4-acl-tools
软件包安装以类似方式工作的实用程序。这些命令称为nfs4_setfacl
“nfs4_getfacl”,允许为组设置 ACL。我使用了下面的 GID。
df -h | grep export
192.168.1.100:/mnt/export 3.6T 3.1T 401G 89% /mnt/export
[root@rocky-linux export]# touch zfile
[root@rocky-linux export]# nfs4_getfacl zfile
# file: zfile
A::OWNER@:rwatTcCy
A::GROUP@:rtcy
A::EVERYONE@:rtcy
[root@rocky-linux export]# nfs4_setfacl -a A:g:1004:rw zfile
[root@rocky-linux export]# nfs4_getfacl zfile
# file: zfile
A::OWNER@:rwatTcCy
A::GROUP@:rtcy
A:g:1004:rtcy
A::EVERYONE@:rtcy