https://www.kernel.org/doc/Documentation/filesystems/nfs/idmapper.txt状态:
The file /etc/request-key.conf will need to be modified so /sbin/request-key can
direct the upcall. The following line should be added:
#OP TYPE DESCRIPTION CALLOUT INFO PROGRAM ARG1 ARG2 ARG3 ...
#====== ======= =============== =============== ===============================
create id_resolver * * /usr/sbin/nfs.idmap %k %d 600
This will direct all id_resolver requests to the program /usr/sbin/nfs.idmap.
从 Ubuntu 12.04 开始,request-key.conf 中不存在此条目。我看到了关于此问题的几种不同的相互矛盾的报告:
- nfs.idmap upcall 已过时,应使用 rpc.idmapd 代替
- rpc.idmapd 已过时,应使用 nfs.idmap 代替
- 内核会自动在两者之间进行选择(它更喜欢哪一个?)
有人可以解释一下这个问题吗?
谢谢。
答案1
通过一些调试可以清楚地看出,Ubuntu 在出厂时就使用了 rpc.idmap(至少到 12.04 为止)。
考古学:您需要一个编译了 nfsidmap 机制的内核(选项是“新”idmap - 因此我假设它是 rpc.idmap 的替代品)才能使 nfsidmap 调用正常工作。此外,http://www.mjmwired.net/kernel/Documentation/filesystems/nfs/idmapper.txt包含内核文档(撰写时为 3.5),其中建议首先调用 rpcidmap,我认为这表明方法的偏好(您的文档似乎是旧副本)。
实用信息:nfsidmapp 是更广泛的请求密钥安全系统的一部分,该系统是内核中相对较新的添加项(“相对较”是指它已经存在一年多了,但相对于 Ubuntu 发布周期来说,这相当短)。Ubuntu 似乎尚未支持整个机制。
nfs-utils 包包含 rpc.idmap 和 nfsidmap 二进制文件,当然 nfsidmap 的文档写得就像“你正在使用的这个东西,它是这样工作的”。所以不幸的是,命令的文档没有给你任何关于实际设置哪个的线索。
(据我所知,rpc.idmap 不会在“open”调用中转换 ID,只会在“stat”和类似调用中转换,这会导致一些奇怪的情况:您无法写入 stat 所称您拥有的文件,但可以写入无人拥有的文件...我不知道 nfsidmap 是否会改变这种行为。)