我有一个通过NFS 为一些文件夹提供服务的服务器(Debian)和一个连接到 NFS 服务器(使用 NFSv4)并安装该导出文件夹的客户端(Debian)。到目前为止一切都很好,我可以连接和修改文件夹的内容。但是用户完全搞砸了。据我了解,这是由于 NFS 使用 UID 设置权限,并且由于来自客户端和服务器的用户的 UID不同,所以会发生这种情况,这仍然是意料之中的。但据我了解,通过启用 NFSv4,IDMAPD 应该启动并使用用户名而不是 UID。用户确实存在于服务器和客户端上一方面,他们只是有不同的UID。但无论出于何种原因,IDMAPD 不起作用或似乎没有做任何事情。
所以这是我到目前为止所做的:
在服务器端:
- 安装 nfs-kernel-server
- 使用正确的导出设置填充 /etc/exports --> /rfolder ip/24(rw,sync,no_subtree_check,no_root_squash)
- 并将 /etc/default/nfs-common 更改为NEED_IDMAPD=yes
在客户端
- 安装 nfs-common
- 并将 /etc/default/nfs-common 更改为NEED_IDMAPD=yes
- 并使用“ mount -t nfs4 ip:/rfolder /media/lfolder ”挂载文件夹
重新启动并重新启动了几次,但仍然没有。当我从服务器创建一个包含用户A的文件夹时,在客户端上我看到文件夹所有者是某个用户X。当我使用用户A从客户端创建文件时,在服务器端它说它来自某个用户Y。
我用 HTOP 检查了 rpc.idmap 进程正在服务器上运行,确实如此。尽管在客户端上它似乎没有运行。通过尝试在客户端上手动启动服务,我收到一条错误消息,指出 IDMAP 需要运行 nfs-kernel-server 依赖项。所以我将它安装在Client端,现在我在Client和Server上都运行了 rpc.idmap 进程。两个都重启了,问题依旧。
知道这里有什么问题吗?或者如何正确配置它?
sec=sys
在使用默认 AUTH_SYS 身份验证(挂载选项)而不是 Kerberos的挂载上使用 NFSv4 id 映射时,有几件事需要注意。注意:使用
AUTH_SYS
idmapping 仅转换用户/组名称。仍然会根据本地 UID/GID 值检查权限。获得使用用户名的权限的唯一方法是使用 Kerberos。在最近的内核中,只有服务器使用 rpc.idmapd(记录在 中
man rpc.idmapd
)。使用 idmap 时,用户名以user@domain格式传输。除非在 中配置了域名/etc/idmapd.conf
,否则 idmapd 使用系统的 DNS 域名。为了使 idmap 正确映射用户,客户端和服务器上的域名需要相同。其次,内核默认禁用 NFSv4
sec=sys
挂载的 id 映射。将参数设置为 false 启用挂载的 id 映射。nfs4_disable_idmapping
sec=sys
在服务器上:
和客户端:
您需要
nfsidmap -c
在客户端上清除 idmap 缓存,以使更改在已挂载的 NFSv4 文件系统上可见。要使这些更改永久生效,请在以下位置创建配置文件
/etc/modprobe.d/
,在服务器(
modprobe.d/nfsd.conf
) 上:在客户 ( )上
modprobe.d/nfs.conf
:这是众所周知的和记录在案的行为。如果您在服务器端和客户端有不同的用户共享相同
uid
的文件,则文件将显示为具有不同的所有者。除了共享文件之外,建议注意在共享相同文件系统的所有机器中映射具有相同 id 的用户。
您可以手动进行,一些最低限度的自动化/脚本系统,或者更好,或者设置集中式身份验证,例如,使用 LDAP。请参阅使用 OpenLDAP 的集中式身份验证