![Openldap 和 nfserver 都可以工作,尽管除非我先使用新的 ldapusers 登录到 nfserver,否则无法创建 /home/user](https://linux22.com/image/767400/Openldap%20%E5%92%8C%20nfserver%20%E9%83%BD%E5%8F%AF%E4%BB%A5%E5%B7%A5%E4%BD%9C%EF%BC%8C%E5%B0%BD%E7%AE%A1%E9%99%A4%E9%9D%9E%E6%88%91%E5%85%88%E4%BD%BF%E7%94%A8%E6%96%B0%E7%9A%84%20ldapusers%20%E7%99%BB%E5%BD%95%E5%88%B0%20nfserver%EF%BC%8C%E5%90%A6%E5%88%99%E6%97%A0%E6%B3%95%E5%88%9B%E5%BB%BA%20%2Fhome%2Fuser.png)
我有一个在 cent os 7 上设置的 openldap 服务器。我将它与我所有其他从 nfs 服务器为其 /home 安装 nfs 挂载的虚拟机混合使用。
我刚刚发现,如果我创建一个新的 ldap 用户并尝试登录到某个 VM,它会允许我登录,但说明它无法创建 /home/user 并且无法将 chngdir 更改为它。
但我还了解到,如果我首先 ssh user@mynfsserver,它会登录,创建适当的 /home/user,然后我可以使用我的 ldapuser ssh 到任何其他 VM,并且它运行良好,不再抱怨无法为该用户在主目录中创建文件夹。
我在每个 VM 上使用带有 home.map 文件的 autofs,它看起来具有正确的权限:
* -fstype=nfs,rw,nosuid,soft 10.10.1.139:/home/&
因此,这感觉像是某种权限问题,用户使用新创建的 ldap 凭据登录虚拟机时会出错。但如果同一个用户登录 10.10.1.139(映射 home 的 nfs 服务器),那么他们似乎可以登录虚拟机,而不会再出现无法创建 /home/user 的错误。
我的 openldap 服务器是否必须以某种方式了解 nfs 服务器?
除了必须先登录 nfs 服务器这一小麻烦之外,我可以转到另一台虚拟机,触摸该主文件夹中的文件,然后它就会出现在我登录的任何其他虚拟机上。因此,它的工作效率大概为 95%,只是必须先使用 ldap 用户登录 nfserver,才能在其他虚拟机上先创建 /home/user,这有点烦人。
答案1
新主目录的自动创建由 root 完成,但默认情况下,root 会映射到 nfs 挂载上的匿名用户,因此无法在所有 nfs 客户端上创建主目录。在 nfs 服务器上no_root_squash
添加行以禁用此功能并运行以使更改生效。因此,根据您的评论,它应该如下所示:/etc/exports
sudo exportfs -ra
/home 10.10.1.0/24(rw,no_root_squash)
这将允许所有客户端以 root 身份访问已挂载的 nfs 文件系统。
然而,这有一些含义。来自 exportfs 手册页:
用户 ID 映射
nfsd 根据每个 NFS RPC 请求中提供的 uid 和 gid 对服务器计算机上的文件进行访问控制。用户期望的正常行为是,她可以像在普通文件系统上一样访问服务器上的文件。这要求在客户端和服务器计算机上使用相同的 uid 和 gid。这并不总是正确的,也不总是理想的。
通常,当访问 NFS 服务器上的文件时,不希望客户端计算机上的 root 用户也被视为 root。为此,uid 0 通常被映射到不同的 id:所谓的匿名或 nobody uid。此操作模式(称为“root squashing”)是默认模式,可以使用 no_root_squash 关闭。
默认情况下,exportfs 会选择 65534 的 uid 和 gid 来进行压缩访问。这些值也可以通过 anonuid 和 anongid 选项覆盖。最后,您可以通过指定 all_squash 选项将所有用户请求映射到匿名 uid。