我正在尝试导出/挂载一个根本没有 ACL 的 NFS 卷(POSIX 或 NFS),但是失败了。
技术背景:双方最新的当前 debian,ext4 卷。
目标:我在服务器上使用 POSIX ACL 强制执行严格访问,并且用户可以(将)使用 NFS 访问另一台计算机上的卷。但任何拥有目录/文件的用户都可以更改 ACL,这在这里并不好。因此,我想阻止用户更改 ACL,而简单地删除 get/setfacl 命令并不是一个好方法。删除服务器端卷上的 ACL 支持并不好……
我的问题是:是否可以在不删除服务器端卷上的 ACL 的情况下阻止 NFS 挂载的 ACL?如果可以,如何执行?
我使用 no_acl / noacl 进行了测试,但没有成功:我的导出是在 NFSv3 版本中完成的,带有“no_acl”选项。在 /etc/exports 中:
/exports ip-of-client-during-tests(rw,sync,no_acl,no_subtree_check,fsid=0)
/exports/data ip-of-client-during-tests(rw,sync,no_acl,no_subtree_check)
所有服务都已重新加载/重新启动。然后我使用“noacl”选项(无论什么)将其安装在客户端上:
mount -t nfs -o noacl,vers=3 my-server:/exports/data/ /var/data/
/proc/mounts 中给出了:
server-name:/exports/data/ /var/data nfs rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,noacl,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=server-ip,mountvers=3,mountport=53844,mountproto=udp,local_lock=none,addr=server-ip 0 0
而且我能够在客户端上使用 get/setfacl 对我拥有的目录/文件获取/设置 ACL,并且更改在服务器文件系统上可见。我也尝试使用 NFSv4,没有变化。顺便说一句,在服务器上,我在 /proc/fs/nfs/exports 中看不到“no_acl”选项:
/exports/data client-ip(rw,root_squash,sync,wdelay,no_subtree_check,uuid=0bac8439:e7e2488e:817358d2:f2c94b85,sec=1)
即使使用 exportfs -v 可以看到:
/exports/data client-ip(rw,wdelay,root_squash,no_subtree_check,no_acl,sec=sys,rw,root_squash,no_all_squash)
答案1
您可以通过编译不带该选项的内核来禁用服务器端支持CONFIG_NFSD_V3_ACL
。