如何使用 LDAP 和 NFS 设置集中式主目录和用户身份验证?

如何使用 LDAP 和 NFS 设置集中式主目录和用户身份验证?

我正在尝试配置我的服务器以使用 LDAP 对用户进行身份验证,并将其主目录保存在同样位于服务器上的 NFS 目录上。

即:我在我的服务器上共享一个目录:

/nfsexport      10.0.2.0/24(rw,async,no_subtree_check,fsid=0,crossmnt)\
            *.em(rw,async,no_subtree_check,fsid=0,crossmnt)
/nfsexport/homes    10.0.2.0/24(rw,async,no_subtree_check)\
            *.em(rw,async,no_subtree_check)

通过编辑将其安装在我的客户端上/etc/fstab

server1:/homes      /home/users nfs4    bg  0   0

并附加在文件末尾/etc/pam.d/login/etc/pam.d/lightdm以下行:

session required pam_mkhomedir.so skel=/etc/skel umask=0022

现在应该在登录时在 下创建主目录/home/users/ldapuser。但我无法登录,并且服务器上没有创建主目录。我尝试了以下方法:

  1. 在本地而不是 NFS 上创建主目录。它有效,所有者和组是正确的。但它不是中心化的。
  2. /home/users将服务器上的权限更改为777。它也适用于NFS,但这不是最佳解决方案...我也尝试随后将权限更改为755,但用户无法在其主目录上写入,因为所有者和组设置为“nobody”和“nogroup”

那么如何让 openLDAP/home/users在首次登录时自动根据用户和组所有权创建主目录呢?或者至少在第一次登录后更改它,同时权限更改为777?

或者:是否有其他方法来实现集中式主目录和用户身份验证?

答案1

这是NFS协议中用户识别的问题。其工作原理取决于您使用的 NFS 版本。

在 NFSv3 中,用户名和密码不是协议的一部分;相反,UID 和 GID 号是。如果在a机上调用一个UID=1000的用户bart,在b机上调用一个相同uid的用户homer,则bart可以读取b机上用户创建的文件homer。这就是为什么在使用 NFS 时 UID 同步通常是一个好主意的原因之一。

然而,NFSv4 改变了这一切。在 NFSv4 中,用户和组不仅仅是 UID 号姓名通过电线发送。为了使其正常工作,NFSv4 协议显着改变了几件事:

  • 该协议要求所有用户名都存在于所有计算机上。也就是说,如果客户端有一个用户bart,则服务器必须还有一个用户bart(他们的 UID 可能不同)。如果其中任何一个缺少所述用户,那么事情将回落到nobody和/或nogroup用户和组。
  • 该协议有一个“域”的概念。默认情况下,它基于域名(即正在运行的计算机的 FQDN 减去主机名),但可以是任意字符串。域用于分隔具有不同用户组的计算机。如果客户端上的域与服务器上的域不匹配,则系统假定用户bart机器a上的用户完全是一个不同的 bart来自机器上的 b.

有关更多详细信息,请阅读rpc.idmapd(8)手册页(其中记录了 ID 映射协议的 Linux 实现)。

直到最近,如果您没有明确要求,大多数 Linux 发行版都默认使用 NFSv3。然而,几年来,默认设置已更改为 NFSv4。

为了让事情顺利进行,您有两种选择:

  1. 恢复到 NFSv3。您可以通过nfsvers=3安装选项来完成此操作。
  2. 找出为什么rpc.idmapd没有达到你预期的效果,然后进行修改,直到它达到预期效果。

显然,阻力最小的路径是 1。但是,与 NFSv3 的功能集相比,NFSv4 确实具有许多有用的功能,如果放弃它,您将失去这些功能。

答案2

您可以作为 LDAP 用户登录吗?您可以使用#ldapsearch -x 以及#ldapsearch -d1 进行检查。 “d”表示调试,“1”表示级别。

如果您无法得到任何响应,您可能需要将 IP 和名称添加到 /etc/hosts 文件中。另外,您可以确保 /etc/openldap/ldap.conf 文件正确并指向正确的证书目录。

连接到 LDAP 后,您可以利用 autofs 实用程序自动挂载用户主目录。

您必须修改 /etc/auto.master 文件并创建 /etc/auto.users

我认为这里一次一步地连接和验证 LDAP,然后采取后续步骤。

相关内容