我正在尝试配置我的服务器以使用 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
。但我无法登录,并且服务器上没有创建主目录。我尝试了以下方法:
- 在本地而不是 NFS 上创建主目录。它有效,所有者和组是正确的。但它不是中心化的。
/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。
为了让事情顺利进行,您有两种选择:
- 恢复到 NFSv3。您可以通过
nfsvers=3
安装选项来完成此操作。 - 找出为什么
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,然后采取后续步骤。