如何设置具有凭证单实例存储和多种身份验证方法/接口的身份验证系统?

如何设置具有凭证单实例存储和多种身份验证方法/接口的身份验证系统?

背景:我有一组基于 Linux 的服务器(假设有几十台),它们托管在不同的位置。有些服务器是单独的卫星服务器,而其他服务器则托管在同一个数据中心。有些是物理硬件服务器,有些是虚拟专用服务器。这些服务器提供电子邮件、Web 应用程序托管、数据库和一些自定义应用程序的服务器端部分等服务。服务器本身已经拥有管理硬件的工具,操作系统级别的管理(管理员帐户、虚拟服务器管理等)也已处理完毕。

问题:到目前为止,在应用程序级别对不同服务的身份验证已经使用了许多解决方案。有时,这意味着必须将帐户密码存储在多个位置。更好的解决方案是使用集中管理的单一来源认证系统这将允许每个服务从其帐户的单个实例对用户进行身份验证,并允许对单个数据项进行操作,而不是确定在创建、更改和删除帐户时需要更新哪些位置。可以复制凭证数据以提供冗余。(请注意,此处的目标不同于单点登录:您必须分别对每个应用程序进行身份验证,但您的凭证存储在单个位置。请参阅这个问题

之前的几个问题建议使用 LDAP,并且还谈到了 Kerberos。这个问题询问 LDAP 安全性,并要求对 LDAP 和 Kerberos 进行比较。Kerberos 很好,但在这种情况下不需要单点登录功能,因此设置 Kerberos 可能有点过头,并会造成不必要的管理负担。这个问题将范围扩大到包括网络设备,重点更多地放在操作系统级别而不是应用程序级别。就我而言,只需要应用程序级别的身份验证。这也意味着必须支持的身份验证协议种类更多;PAM 是不够的。这个问题询问 LDAP 的替代方案,但答案无论如何都指向 LDAP,理由很充分。NIS 是另一个建议的解决方案,但它在这种情况下确实不适合,因为它只解决了密码(和其他)信息的分发,而不是存储、管理和身份验证方法。最后,这个问题看起来非常相似,但重点实际上是 VPN 身份验证。(还有一个类似的问题这里,但不够精确,无法适应 ServerFault。)

LDAP 是我目前使用的身份验证源之一。但是,并非所有应用程序都可以使用 LDAP。有些应用程序需要基于 HTTP 的接口,而其他应用程序则最适合使用 SQL 接口。例如,需要运行 OpenID 提供程序,而我需要为用户运行的一些自定义软件只能配置为通过 ODBC 进行身份验证。

另一个建议是 FreeIPAhttp://freeipa.org/但它也有 Kerberos 的额外负担,看起来更像是操作系统级别的解决方案。它已经开发了一段时间,但我并不完全相信它已经足够成熟,而且它可能还有太多不必要的功能,而仍然没有提供我真正需要的功能。

我想分开贮存身份验证数据(用户名和密码)认证服务。我会使用一个单一、明确定义且安全的位置来存储数据,并使用多个身份验证服务来使用存储位置通过各种协议/接口提供身份验证。至少需要一个 LDAP 和一个 SQL 接口,OpenID 提供程序也位列其中。我认为 LDAP 是存储的良好候选者,但我也愿意接受其他选择。最好是免费/开源软件。

问题:我应该选择什么软件来存储身份验证凭据,以及如何提供针对这些凭据进行身份验证的不同接口?

您有什么建议?

答案1

如果您使用 LDAP 作为凭证​​的后备存储,那么:

  • 您可以用于pam_ldap系统级身份验证。
  • 许多数据库可以直接通过 LDAP 进行身份验证(例如,PostgreSQL
  • 其他数据库可以使用PAM,以便它充当您到 LDAP 的桥梁。
  • 许多设备和网络应用程序已经知道如何与 LDAP 对话。
  • 有适用于 Apache 和其他 Web 服务器的 LDAP 模块。

这似乎涵盖了您的所有要求(如果没有,请给出一些明确的例子)。对于 OpenID,有许多解决方案,其中一些(例如 Atlassian人群) 可以针对 LDAP 和其他可使用 HTTP 基本身份验证的设备进行身份验证(这意味着您将受到 Apache 的 LDAP 模块的保护)。

顺便说一句,Kerberos 的好处不仅仅是单点登录。另一个好处是——如果使用得当——你的密码永远不会通过网络。这意味着被入侵的服务器无法窃取密码。这是一个很大的优势,但只有在 (a) 人们可以从本地端点获取 kerberos 令牌,并且 (b) 你的所有应用程序都支持 Kerberos 或 GS​​SAPI 身份验证时才真正有用。在异构环境中,你很少能真正满足这两个标准。

相关内容