我们正在运行 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
andsetfacl
而不是 nfs4_ 等效项,这是否正确理解? - 我需要 idmapd 吗?我有一个名为 nfs-idmapd 的服务成功运行。
- 我读到安装时
sec=sys
应该替换的地方。seckrb5
更新:
我进行了更多研究,并取得了一个小小的突破:nfsv4_set*acl
只要使用数字 UID 或 GID,NFS 共享就可以正常工作。造成问题的是 IdM/Kerberos 的耦合。
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 协议支持用户扩展属性
此更新添加了对用户扩展属性 (RFC 8276) 的 NFSv4.2 客户端和服务器端支持。
这包括以下协议扩展:
新业务:
新的错误代码:
新属性:
常规使用扩展属性,这确实是 NFSv4.2 的一部分,如 @abbra https://serverfault.com/a/1158690/127530
set/getfacl
的答案中所述。但是,xattr 支持不是 ACL。要通过 NFSv4 使用 ACL,您应该使用软件包
nfs4_set/getfacl
中的命令nfs4-acl-tools
。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。更多信息如下:https://access.redhat.com/solutions/3426621