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

Bri*_*ian 9 security linux ubuntu ldap authentication

我正在研究为用户提供跨多台计算机的单一身份的软件。也就是说,用户应该在每台计算机上拥有相同的权限,并且该用户应该可以访问他或她在每台计算机上的所有文件(漫游主目录)。这个总体思路似乎有很多解决方案,但我正在努力确定最适合我的解决方案。以下是一些详细信息以及要求:

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

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

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

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

lar*_*sks 7

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

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

这里开始,它很好地概述了身份验证授权之间的区别,这对于理解此类讨论很重要。

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

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

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

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

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

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

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

文件系统

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

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

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

对于小型部署,尽管存在局限性,但大多数人只使用 NFS。

有多种其他解决方案——我上面提到的集群文件系统,以及 AFS 和其他解决方案——但其中大部分需要您做一些工作才能让它们在您选择的任何发行版上运行。我最近听说了 GlusterFS 的好消息,所以如果我正在寻找 NFS 替代方案,那可能是我首先关注的地方。