网络身份验证+漫游主目录 - 我应该研究使用哪种技术?

网络身份验证+漫游主目录 - 我应该研究使用哪种技术?

我正在研究一种软件,它能为用户在多台计算机上提供单一身份。也就是说,用户在每台计算机上应具有相同的权限,并且用户应有权访问每台计算机上的所有文件(漫游主目录)。对于这个一般想法似乎有很多解决方案,但我正在尝试确定最适合我的方法。以下是一些详细信息以及要求:

  1. 机器网络是运行 Ubuntu 的 Amazon EC2 实例。
    • 我们使用 SSH 访问机器。
    • 这个局域网上的某些机器可能有不同的用途,但我只讨论特定用途的机器(运行多租户平台)。
  2. 系统不一定有恒定数量的机器。
    • 我们可能需要永久或暂时改变正在运行的机器数量。这就是我研究集中式身份验证/存储的原因。
  3. 此效果的实现应该是安全的。
    • 我们不确定用户是否有直接的 shell 访问权限,但他们的软件可能会在我们的系统上运行(当然是在受限的 Linux 用户名下),这与直接 shell 访问一样好。
    • 为了安全起见,我们假设他们的软件可能是恶意的。

我听说过几种可以实现我的目标的技术/组合,但我不确定每种技术/组合的后果。

  • 一篇较早的 ServerFault 帖子推荐使用 NFS 和 NIS,但根据赛门铁克的这篇旧文章。文章建议转向 NIS+,但由于它已经过时,这篇维基百科文章引用了 Sun 放弃 NIS+ 的声明。推荐的替代品是我听说的另一件事……
  • LDAP。看起来 LDAP 可用于将用户信息保存在网络上的集中位置。仍需要使用 NFS 来满足“漫游主文件夹”要求,但我看到参考资料提到它们一起使用。由于 Symantec 文章指出了 NIS 和 NFS 都存在安全问题,是否有软件可以替代 NFS,或者我应该听从该文章的建议将其锁定?我倾向于使用 LDAP因为我们架构的另一个基本部分 RabbitMQ 有一个针对 LDAP 的身份验证/授权插件。系统上的用户将以受限的方式访问 RabbitMQ,因此如果可能的话,我希望将安全系统结合在一起。
  • Kerberos 是我听说过的另一种安全身份验证协议。几年前我在一门密码学课上学过一点,但记不太清楚了。我在网上看到有人建议可以结合使用LDAP 的几种用法。这有必要吗?没有 Kerberos 的 LDAP 有什么安全风险?我还记得卡内基梅隆大学开发的另一个软件中使用了 Kerberos...
  • Andrew 文件系统,简称 AFS。OpenAFS 可供使用,但其设置似乎有点复杂。在我的大学里,AFS 满足了这两个要求...我可以登录到任何机器,并且我的“AFS 文件夹”始终可用(至少在我获得 AFS 令牌时)。

除了建议我应该研究哪条路径之外,是否有人有特别有用的指南?正如粗体文本指出的那样,LDAP 看起来是最佳选择,但我对安全性方面的实施细节(Keberos?NFS?)特别感兴趣。

答案1

身份验证、授权和目录信息

这不是对您的问题的完整回答,但我认为它可能有助于解决您有关 NIS 与 LDAP 与 Kerberos 的问题。

从...开始,很好地概述了验证授权,理解这一点对于此类讨论来说很重要。

正如你所说,Kerberos 是只是身份验证协议。给定一组凭证(例如用户名和密码),它会告诉您它们是否有效。这就是它所做的一切。

相比之下,NIS 和 LDAP 都是目录服务。它们允许客户端查询用户信息(您的主目录是什么?您的用户 ID 是什么?)。两者都可以用作身份验证源,但存在不同程度的问题。

NIS 本身并不真正为您执行任何身份验证。相反,它会向客户端计算机公开密码哈希,而您的本地系统会像对本地帐户一样执行实际的身份验证步骤。这里的问题是,任何在您的 NIS 客户端上拥有帐户的人都可以获取您的所有密码哈希,然后在闲暇时对它们进行暴力攻击。

LDAP 更安全一些,因为身份验证步骤实际上是在服务器上执行的。您必须确保使用 SSL 或 TLS 加密 LDAP 会话,否则密码将以明文形式在线路上暴露,容易受到数据包嗅探。

非常常见的做法是使用 Kerberos 进行身份验证,然后使用 NIS 或 LDAP 进行授权(通常指“组成员身份”)和目录信息。我认为,一旦您删除了密码哈希(通过将身份验证移至 Kerberos),NIS 的安全性实际上并不低于 LDAP,并且具有在任何现代 Linux 发行版上“开箱即用”的优势。

另一方面,LDAP 通常具有更高的可扩展性,如果您有大量用户(或其他目录对象),则其扩展性会更好,可提供丰富的查询,并且通常更易于管理。LDAP 还受到各种应用程序的原生支持,而 NIS 与核心操作系统之间存在一种奇怪的乱伦关系,这可能是不受欢迎的。

如果您从头开始构建,我建议使用 Kerberos 进行身份验证并使用 LDAP 作为目录服务。

文件系统

NFS 有一个很大的优势:您已经拥有它,它被广泛部署,并且通常很稳定。 NFS 有两个主要缺点:

  • 它不能很好地扩展并行 i/o。如果您有大量机器访问同一个文件系统,您的单个 NFS 服务器可能很难跟上。这就是为什么较大的集群通常使用集群文件系统(如 Lustre、GlusterFS、GPFS、GFS 等),这些文件系统被设计为支持并行 i/o。

  • 它的安全模型很糟糕。通常,NFS 安全决策完全基于您的数字用户 ID。如果您在可以挂载 NFS 文件系统的系统上拥有 root 权限,则可以访问所有文件 - 因为您始终可以创建具有适当用户 ID 的本地用户。这不是严格确实如此,因为 NFSv3 和 NFSv4 都对 Kerberos 身份验证具有不同级别的支持,但我还没有遇到任何使用它的人......所以你的里程可能会有所不同。

对于小型部署,大多数人只是使用 NFS,尽管它有局限性。

还有许多其他解决方案——我上面提到的集群文件系统,以及 AFS 和其他解决方案——但其中大多数都需要您做一些工作才能在您选择的任何发行版上运行。我最近听说 GlusterFS 很好,所以如果我正在寻找 NFS 替代方案,这可能是我首先要考虑的地方。

答案2

这是部分答案。

新独立国家/新独立国家+
不要使用 NIS。使用带有 nis 模式的 LDAP。

OpenLDAP(在 Ubuntu 上又称为 slapd)
确保设置正确的 ACL 和 SSF(安全强度因素)。
如果不小心,很容易明文发送密码。
http://www.openldap.org/doc/

NFS
NFS 不是加密的。
它可以通过一些技巧包装在 SSL 中。
如果没有 Kerberos,则依赖 ip_addr 进行身份验证。
如果使用 Kerberos,则可能的SASL 用于加密所有内容。

凯尔伯罗斯
要求 OpenLDAP 具有 SASL 直通身份验证才能进行 LDAP 身份验证。(不难。)
应使用 DNS 条目。(不是必需的,但非常有用)。
可以使用 GSSAPI 代替 ssh-keys。(可以共存。)
KDC 机器应该与您的客户端机器分开。

开放AFS
使用 DES 加密。(不被认为是安全的。)
需要 kerberos 或它自己的旧版 authserver。
有它自己的文件系统 ACL。

相关内容