Rocky Linux 8.9 上的 Kerberos 环境中的 NFS 和 ACL

Rocky Linux 8.9 上的 Kerberos 环境中的 NFS 和 ACL

我们正在运行 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

几个问题:

  1. 由于客户端和服务器都是 Linux/POSIX,我是否正确理解我应该使用getfaclsetfacl不是它们的 nfs4_ 等效项?
  2. 我需要 idmapd 吗?我有一个名为 nfs-idmapd 的服务正在成功运行。
  3. 我读到过一些文章说安装时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

更多信息请参见:https://access.redhat.com/solutions/3426621

相关内容