考虑到 MacOS 和 Synology(我的 NAS)的特殊特性,我花了一些时间在我的 MacOS、iOS 和 Linux 网络中设置基于 LDAP 的身份验证。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
一些背景:
s-sy-00.local
是我的主目录所在的 Synology NAS。/home
是 Synology 为 中定义的用户提供的主目录共享的 UNCusername=
。
当我使用 SSH 登录到远程机器时,问题就开始了。autofs
尝试挂载用户的主目录,但需要用户的密码。我可以将密码放入password=
该行中的参数中automountInformation
,或者我可以将用户名和密码放入与credentials=
参数一起传递的凭据文件中。这两种方法都会增加复杂性(automount
每个用户的条目)和重复(在两个不同的地方使用相同的用户名和密码:LDAP 和凭证文件或 LDAP 中的 theautomount
和 the posixUser
)。
有处理这个问题的标准方法吗?我的搜索引擎技能还没有出现任何东西。
在我看来,有三种可能的解决方案:
- 对其他人来说是显而易见的,但对我来说不是;
- 使用 SSH 密钥从 SSHFS 共享中为每个用户安装凭据文件(可能从 LDAP 动态生成);
- 使用 Kerberos 实现成熟的 SSO。
我更喜欢数字 1 :-) 我对 Kerberos 有反感:它似乎有点矫枉过正,而且肯定相对复杂。
任何人都可以提供一些智慧的话,让我在新的一年里有一个飞跃的开始吗?
好吧,只要您在 Linux 上并且如果您在初始登录时使用密码身份验证,那么您就可以拥有一个 PAM 模块,它将密码存储在内核密钥环中,mount.cifs 可以从中获取它。我不能 100% 确定 cifs-utils 当前是否带有一个,但它确实有一个
cifscreds
CLI 工具可以做到这一点。不过,就我个人而言,我只会设置 Kerberos 身份验证而不是 LDAP。(也就是说,让 LDAP 只做目录服务的工作。)总体而言,Kerberos 就像 LDAP:从外面看起来很复杂,但仔细观察会发现非常简单,除了数百万个怪癖、边缘情况和可追溯到 1980 年代的奇怪决定再次使其变得复杂。
它将比特定于 SMB 的 PAM hacks 更加通用——相同的票证可用于访问 SMB、NFS、LDAP、HTTP、SSH……您甚至可以将现有的 LDAP 服务器用作 KDC 数据库后端,获得免费复制,无需处理 kprop。
请注意,对于 mount.cifs, Kerberos 和 cifscreds都打算在通过
multiuser
选项挂载共享时使用,这为您提供类似 NFS 的行为 - 多个用户可以访问同一个 SMB 挂载,并且内核将自动使用每个 uid 的正确 SMB 凭据。至于 SSH 公钥身份验证,您可以自动执行的操作并不多——要么检索凭证文件并将其
cifscreds
与kinit
..虽然我认为@user1686 的答案是正确的,但我仍然想分享我找到的解决方法,并将使用它,直到我有时间转向 Kerberos 解决方案。
我在我调用的 NAS 上创建了一个用户
smbowner
并为其分配了密码。我授予smbowner
了 NAS 的管理员权限,这意味着它可以挂载 SMB 共享。我在需要挂载 SMB 共享的机器上创建了一个 Samba 凭据文件。我把它放进去
/etc/samba/credentials/s-sy-00
,它看起来像这样:请注意,凭证文件不包含域定义。
在其辩护中,可以说这个解决方案是有效的,尽管我不确定在比我更恶劣的环境中它有多安全。
它是如何工作的?
smbowner
有足够的权限在 NAS 上挂载任何共享。和uid=&
参数gid=&
确保本地用户可以访问共享。稍后我将尝试设置 NAS 上共享的权限。也许这会帮助别人。
史蒂夫