我如何设置一个身份validation系统,具有凭证的单个实例存储以及多个身份validation方法/接口?

背景:我有一系列基于Linux的服务器(比如几十个),这些服务器位于不同的位置。 一些服务器是独立的卫星,而另一些服务器则在同一个数据中心中。 一些是物理硬件服务器,另一些是虚拟专用服务器。 服务器提供电子邮件,Web应用程序托pipe,数据库以及某些自定义应用程序的服务器端部分。 服务器本身已经有pipe理硬件的工具,操作系统级的pipe理(pipe理员账号,虚拟服务器pipe理等)也被照顾到了。

问题:到目前为止,在应用程序级别对不同服务的身份validation使用了许多解决scheme。 有时,这意味着帐户密码必须存储在多个位置。 一个更好的解决scheme是拥有一个集中pipe理的单一源authentication系统,允许每个服务从一个帐户的单一实例authentication一个用户,并允许在单个数据项上进行操作,而不是确定哪个位置需要在创build,更改和删除帐户时进行更新。 凭证数据可以被复制以提供冗余。 (请注意,此处的目标与单一login不同:您必须分别对每个应用程序进行身份validation,但您的凭据存储在一个位置。请参阅此问题 。

以前的几个问题都提到了LDAP,并且还谈到了Kerberos。 这个问题询问了LDAP的安全性,并要求比较LDAP和Kerberos。 Kerberos很好,但是在这种情况下不需要单点loginfunction,所以设置Kerberos可能会过度,导致不必要的pipe理负担。 这个问题扩大了范围,包括networking设备,重点是在操作系统级别比应用程序级别。 在我的情况下,它只是需要的应用程序级authentication。 这也意味着需要支持的各种authentication协议有较大的变化。 PAM是不够的。 这个问题要求替代LDAP,但答案指向LDAP,无论如何,有充分的理由。 NIS是另一个提出的解决scheme,但在这种情况下,它确实不适合,因为它只是解决了密码(和其他)信息的分发,而不是存储,pipe理和身份validation方法。 最后, 这个问题似乎很相似,但重点是真正的VPNvalidation。 (这里也有一个类似的问题,但不够精确,不适合ServerFault。)

LDAP是我目前使用的validation来源之一。 但是,并非所有应用程序都可以使用LDAP。 有些需要一个基于HTTP的接口,而另外一些需要使用SQL接口。 例如,需要运行OpenID提供程序,并且我需要为用户运行的一些自定义软件只能configuration为通过ODBC进行身份validation。

另一个build议是FreeIPA http://freeipa.org/ ,但它也有额外的Kerberos负担,看起来更像是OS级别的解决scheme。 它已经发展了一段时间了,但我并不完全相信它已经够成熟了,它也可能有太多的不可思议的特征,但是还没有提供我真正需要的特征。

我想分离validation数据(用户名和密码)与validation服务的存储 。 我将使用一个定义明确的安全位置来存储数据,以及使用存储位置使用各种协议/接口提供身份validation的多个身份validation服务。 至less需要一个LDAP和一个SQL接口,一个OpenID提供者也在列表上。 我认为LDAP是存储的好select,但是我也愿意接受其他的select。 最好是免费/开源软件。

问题:我应该select哪种软件来存储身份validation凭证,以及如何提供不同的接口来对这些凭证进行身份validation?

你有什么build议?

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

  • 您可以使用pam_ldap进行系统级authentication。
  • 许多数据库可以直接对LDAP进行身份validation(例如Postgresql )
  • 其他数据库可以使用PAM ,因此可以充当您通往LDAP的桥梁。
  • 许多设备和Web应用程序已经知道如何与LDAP通话。
  • 有Apache和其他Web服务器的LDAP模块。

这似乎涵盖了你的所有要求(如果没有,请给出一些明确的例子)。 对于OpenID,有很多解决scheme,其中一些解决scheme(例如Atlassian Crowd )可以对LDAP进行身份validation,还有一些解决scheme可以使用HTTP基本身份validation(这意味着您将被LDAP的LDAP模块覆盖)。

顺便说一句,Kerberos的好处不仅仅是单点login。 另一个好处是,如果使用得当,密码永远不会遍历networking。 这意味着受损的服务器无法获取密码。 这是一个很大的优势,但只有在以下情况下才有用:(a)人们可以从本地端点获取kerberos令牌;(b)您的所有应用程序均支持Kerberos或GSSAPI身份validation。 在异质环境中,你实际上可以同时满足这两个标准的情况是非常罕见的。