我无法理解 LDAP 和 Kerberos 之间的关系(概念上)。
我理解 LDAP 是一种目录服务,而 Kerberos 是一种身份验证服务。
我们还知道 LDAP 也能够存储密码,但 LDAP 的设计初衷是成为可公开访问的目录,不适合存储敏感信息。这就是为什么我们更愿意将身份验证委托给其他服务(如 Kerberos)。
现在我不明白的是这两个问题:
- 当用户尝试登录时,客户端会将请求发送到哪台服务器?我的直觉告诉我它一定是 Kerberos 服务器。如果是,那么 LDAP 服务器在哪里?
- 系统管理员在哪里设置权限?在这种情况下,我的直觉告诉我是 LDAP。我可以想象每个系统和/或服务可能都有一个条目,并且用户将通过组成员身份或直接获得对它们的访问权限。如果是,这是否意味着 LDAP 服务器(通过 phpLDAPadmin 等界面)将在 Kerberos 服务器中相应地设置组和用户?
我特别困惑,因为我在两个文档中都看到了 LDAP 和 Kerberos 之间的联系。LDAP 谈到将身份验证委托给 Kerberos这里,Kerberos 讨论了使用 LDAP 作为后端这里。
我读过的所有文档都像是拼图碎片,我无法将它们拼凑在一起。如果有人能解释一下如何拼凑,我将不胜感激。
答案1
哦,好久不见了。看看我还能记得什么。
是的,这肯定会让人感到困惑,因为您可以使用 Kerberos 进行 LDAP 身份验证,也可以让 Kerberos 使用 LDAP 作为后端。虽然它们不是一回事,但当您尝试搜索时,通常很难区分正在讨论哪一个。我只能谈论使用 Kerberos 进行身份验证的 LDAP,因为我没有反过来的经验。
- 您的直觉是正确的,它使用 Kerberos 服务器。据我了解,客户端从 Kerberos 服务器为 LDAP 服务器请求 TGT(使用服务主体名称“ldap/[电子邮件保护]“或类似内容)。然后客户端可以使用它来登录 LDAP 服务器,因为它能够验证票证。客户端密码本身永远不会发送到 LDAP 服务器。
- 我认为如果您使用 LDAP 作为 Kerberos 的后端,情况就是这样。您可以在此处使用 LDAP 目录来保存各种事物的属性和值。当然,您不需要有使用 LDAP 作为 Kerberos 的后端。
当他们开始谈论 SASL 时,事情变得更加复杂,因为很难分辨他们谈论的是 LDAP 前端还是后端的 SASL。换句话说,客户端是否使用它来向 LDAP 进行身份验证?还是 LDAP 使用它来将密码传递给另一个身份验证源?只是需要注意的警告。
另外:可以使用 LDAP 进行简单绑定,将密码发送到 LDAP 服务器,然后将密码传递给另一个身份验证源(如 Kerberos)。如果您正在执行类似操作,这很好,因为密码本身不存储在 LDAP 中,但由于简单绑定是明文,因此您需要确保在客户端和 LDAP 服务器之间使用 TLS。
希望这能有所帮助。听起来你基本上已经明白了。
答案2
在这两种情况下,你的直觉都是正确的。让我们逐一回答你的两个问题。
- 这里,kerberos 服务是验证系统。客户端将从 kerberos 服务器收到加密票证(当然是在身份验证成功后),然后将其提交给服务器以表明他们已通过身份验证。
- 这里,ldap 服务是授权系统。用户信息存储在目录中(例如 UID / GID 等)。本质上,这替换了 /etc/passwd 中的信息。ldap 服务器不会更新 kerberos 服务器中的任何信息。
答案3
这确实取决于您的设置。我已经为此苦苦思索了一段时间,但我并不是专家。
对于系统管理员来说,LDAP 和 Kerberos 之间的关系可能很简单,就像一台机器同时使用它们一样。您的设置可能很简单,只需通过 nsswitch.conf(以及 archlinux repo 中的 nss-pam-ldapd 等插件)使用 LDAP 作为 /etc/passwd 和 /etc/group 的来源,将 LDAP 中的 userPassword 属性保留为感叹号或星号(表示没有密码,无法登录)。
Kerberos KDC 为您想要的任何机器提供密码验证,其中系统登录集成将根据其提供的服务而有所不同。例如,如果它是一台只需要通过 ssh 访问的远程机器,LDAP 仍会提供与其他地方相同的信息,但 Kerberos 只需要 ssh 配置文件中的几行。在另一个需要完整登录集成的系统上,这可能会成为一个巨大的麻烦,因为它需要对 PAM 配置进行许多更改。这在 RHEL 客户端中使用 authconfig 很容易,但除非您熟悉 PAM,否则在其他地方这将是一个巨大的麻烦。不过,让它与 PAM 一起工作的好处是,大多数程序(如 ssh)都可以使用 PAM,所以您不必再担心 ssh 配置了。
换句话说,如果 KDC 宕机,系统将永远不会接受您的密码,无论是否正确(但它会因为 LDAP 知道您是用户),如果 LDAP 服务器宕机,系统将认为您的用户名不存在。