使用 LDAP:如何使用 SSH 登录,并使用 autofs 挂载 Samba 主目录?

使用 LDAP:如何使用 SSH 登录,并使用 autofs 挂载 Samba 主目录?

我花了一些时间在我的 MacOS、iOS 和 Linux 网络中设置基于 LDAP 的身份验证,考虑到 MacOS 和 Synology(我的 NAS)的特殊怪癖。SSH 登录(SSH 密钥等)可以正常工作,Samba 共享挂载也可以正常工作。这一切都相当繁琐,现在我对 LDAP 的了解比我预想的要多。

然而...

当我达到(至少在理论上)可以登录到我网络中的任何机器的程度时,我认为如果用户也可以在任何地方访问相同的主目录,那就太好了。没问题:autofs,也可以从 LDAP 进行管理!或者我是这么认为的……

我正在尝试类似下面的方法来设置 Samba 主目录autofs

cn=*,ou=auto.home,cn=automount,cn=etc,dc=home,dc=arpa
cn: *
objectClass: automount
objectClass: top
automountInformation: -fstype=cifs,vers=3.0,domain=HOME,rw,username=&,uid=&,gid=& ://s-sy-00.local/home

背景信息:

  1. s-sy-00.local是我的 Synology NAS,主目录将存放于此。
  2. /home是 Synology 为 中定义的用户提供的主目录共享的 UNC username=

当我使用 SSH 登录到远程计算机时,问题就开始了。autofs尝试挂载用户的主目录,但需要用户的密码。我可以将密码放入行password=中的参数中automountInformation,也可以将用户名和密码放入随参数一起传递的凭证文件中credentials=。这两种方法都会导致复杂性增加(automount每个用户一个条目)和重复(在两个不同的地方使用相同的用户名和密码:LDAP 和凭证文件或LDAP 中的automount和)。posixUser

有没有标准的方法来处理这个问题?我的搜索引擎技能还没有找到任何东西。

在我看来,有三种可能的解决方案:

  1. 对其他人来说都是显而易见的,但对我来说却不是;
  2. 使用 SSH 密钥从 SSHFS 共享中挂载每个用户的凭证文件(可能是从 LDAP 动态生成的);
  3. 使用 Kerberos 实现完整的 SSO。

我更喜欢 1 号 :-) 我对 Kerberos 有点反感:它似乎有点过度,而且肯定相对复杂。

谁能给我一些智慧之言,让我在新的一年里有一个良好的开端?

答案1

好吧,只要你使用 Linux 并且使用密码初始登录时进行身份验证,那么您可以使用 PAM 模块将密码存储在内核密钥环中,mount.cifs 可以从中获取密码。我不能 100% 确定 cifs-utils 目前是否附带该模块,但它确实有一个cifscredsCLI 工具可以执行相同的操作。

不过,我个人还是会设置 Kerberos 身份验证而不是 LDAP。(也就是说,让 LDAP 只做目录服务的工作。)总的来说,Kerberos 就像 LDAP:从外面看起来很复杂,但仔细观察就会发现它非常简单,除了 1980 年代的无数怪癖、边缘情况和奇怪的决定让它再次变得复杂。

它将比 SMB 特定的 PAM 黑客更加通用 - 相同的票证可用于访问 SMB、NFS、LDAP、HTTP、SSH……您甚至可以重用现有的 LDAP 服务器作为 KDC 数据库后端,免费获得复制,而无需处理 kprop。

请注意,使用 mount.cifs,两个都Kerberos 和 cifscreds 旨在用于使用该multiuser选项挂载共享时,这会为您提供类似 NFS 的行为 - 多个用户可以访问相同的 SMB 挂载,并且内核将自动为每个 uid 使用正确的 SMB 凭据。

至于 SSH 公钥认证,您可以自动执行的操作并不多 - 要么检索凭证文件并将其与一起使用cifscreds,要么检索凭证文件并将其与kinit...一起使用,我再次认为后者更加通用。

答案2

虽然我认为@user1686 的答案是正确的,但我仍然想分享我找到的解决方法,并将使用它,直到我有时间转向 Kerberos 解决方案。

  1. 我在 NAS 上创建了一个用户,smbowner并为其分配了密码。我授予了smbownerNAS 管理员权限,这意味着它可以挂载 SMB 共享。

  2. 我在需要挂载 SMB 共享的机器上创建了一个 Samba 凭证文件。我将其放入其中/etc/samba/credentials/s-sy-00,它看起来像这样:

username=smbowner
password=whatever

请注意,凭证文件不包含域定义。

  1. 我将 LDAP 条目更改为以下内容:
cn=*,ou=auto.home,cn=automount,cn=etc,dc=home,dc=arpa
cn: *
objectClass: automount
objectClass: top
automountInformation: -fstype=cifs,vers=3.0,domain=HOME,rw,credentials=/etc/samba/credentials/s-sy-00,uid=&,gid=& ://s-sy-00.local/&

为了辩护,可以说这个解决方案是有效的,尽管我不确定它在比我的更恶劣的环境中有多安全。

它是如何工作的?smbowner具有足够的权限来安装 NAS 上的任何共享。uid=&gid=&参数确保本地用户可以访问共享。稍后我将尝试设置 NAS 上共享的权限。

也许这会对其他人有所帮助。

史蒂夫

相关内容