networkingauthentication+漫游主目录 – 我应该使用哪种技术?

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

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

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

  • 一个较旧的ServerFault文章推荐使用NFS和NIS,但根据赛门铁克的这篇旧文章,这个组合存在安全问题。 这篇文章build议移植到NIS +,但是由于这篇文章比较陈旧,所以这篇维基百科文章引用了一些陈述,表明Sun将会从NIS +中走出来。 推荐的replace是我听说过的另一件事…
  • LDAP。 它看起来像LDAP可以用来将用户信息保存在networking上的一个集中位置。 NFS仍然需要用来覆盖“漫游家庭文件夹”的要求,但我看到他们一起使用的引用。 由于赛门铁克的文章指出了NIS和NFS的安全问题,有没有软件可以取代NFS,还是应该留意这篇文章的build议,以便将其locking? 我倾向于使用LDAP,因为我们体系结构的另一个基本部分RabbitMQ具有LDAP的身份validation/授权插件。 RabbitMQ将以受限制的方式访问系统上的用户,所以我想尽可能将安全系统连接在一起。
  • Kerberos是我听说过的另一个安全authentication协议。 几年前我在一个密码学课上了解了一些,但是不记得太多。 我在网上看到了一些build议,可以通过几种方式 LDAP结合使用 。 这是必要的吗? 没有Kerberos的LDAP有哪些安全风险? 我还记得在卡内基梅隆大学开发的另一个软件中使用了Kerberos。
  • 安德鲁文件系统,或AFS。 OpenAFS可以使用,虽然它的设置似乎有点复杂。 在我的大学,AFS提供了两个要求…我可以login到任何机器,并且我的“AFS文件夹”始终可用(至less在获得AFS令牌时)。

除了build议我应该研究哪条路,有没有人有任何指导,特别有用? 正如大胆的文字指出的那样,LDAP看起来是最好的select,但是我对安全性方面的实现细节(Keberos?NFS?)特别感兴趣。

身份validation,授权和目录信息

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

从这里开始,它提供了authentication授权之间差异的一个很好的概述,这对于理解这种讨论很重要。

正如你所说,Kerberos 只是一个authentication协议。 给定一组凭据 – 例如用户名和密码 – 它会告诉你他们是否有效。 这就是它所做的一切。

相反,NIS和LDAP都是目录服务。 它们允许客户端查询他们的用户信息(你的主目录是什么?你的用户名是什么?)。 两者都可以用作不同程度的问题的authentication来源。

NIS并不真正为您执行任何身份validation。 相反,它会向客户端机器公开密码散列,而本地系统以与本地帐户相同的方式执行实际的authentication步骤。 这里的问题是,任何一个在你的NIS客户端上拥有一个帐户的人都可以获取你所有的密码哈希值,然后在他们的闲暇时间对其进行powershell攻击。

由于身份validation步骤实际上是在服务器上执行的,因此LDAP更安全一些。 您必须确保您使用SSL或TLS来encryption您的LDAP会话,否则密码将以明文forms暴露在networking中,并且容易受到数据包嗅探的影响。

使用Kerberos进行身份validation非常普遍,然后使用NIS或LDAP进行授权(通常这意味着“组成员资格”)和目录信息。 我认为,NIS一旦删除了密码哈希(通过将身份validation移动到Kerberos)并不比LDAP安全,并且具有在任何现代Linux发行版中“开箱即用”的优点。

另一方面,LDAP通常更具可扩展性,如果拥有大量用户(或其他目录对象),可提供更丰富的查询,并且通常更易于pipe理,则可扩展性更好。 LDAP在各种应用程序中也是本地支持的,而NIS与核心操作系统有着不可思议的乱伦关系,这可能是不可取的。

如果你从头开始构build,我会build议使用Kerberos进行身份validation,使用LDAP来进行目录服务。

文件系统

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

  • 并行I / O不能很好地扩展。 如果你有大量的机器碰到相同的文件系统,你的单一NFS服务器可能会很难保持。 这就是为什么较大的集群通常使用集群文件系统(如Lustre,GlusterFS,GPFS,GFS等),其目的是支持并行I / O。

  • 它有一个不好的安全模型。 通常,NFS安全决定完全基于您的数字用户标识。 如果您的系统上安装了可以挂载NFS文件系统的root用户,则可以访问所有文件 – 因为您始终可以使用适当的用户标识创build本地用户。 这是不正确的,因为NFSv3和NFSv4都有不同级别的Kerberos身份validation支持,但我还没有遇到任何人使用这个…所以你的milage可能会有所不同。

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

还有很多其他的解决scheme – 上面提到的集群文件系统,以及AFS和其他的 – 但是其中大部分都需要你做一些工作,让它们在你select的任何发行版上运行。 我最近听说过有关GlusterFS的好处,所以如果我正在寻找一个可能是我看起来第一个的NFS备选scheme。

这是一个部分的答案。

NIS / NIS +
不要使用NIS。 使用LDAP和nis架构。

OpenLDAP (在Ubuntu上也称为slapd)
一定要设置适当的ACL和SSF(安全强度因素)。
如果你不小心,发送密码很容易。
http://www.openldap.org/doc/

NFS
NFS不是encryption的。
它可以用一些骗局包装在ssl中。
没有Kerberos是依靠ip_addr进行身份validation。
使用Kerberos有可能使用SASL来encryption所有的东西。

Kerberos的
要求OpenLDAP具有用于LDAP身份validation的SASL传递身份validation。 (不难。)
应该使用DNS条目。 (不要求,但非常有用)。
GSSAPI可以用来代替ssh-keys。 (可以共存)
KDC机器应该与客户机器分开。

的OpenAFS
用DESencryption。 (不被认为是安全的)
需要kerberos或它自己的传统authserver。
有它自己的文件系统ACL。