应该如何为每台客户端机器设置客户端密钥表文件以访问网络服务?我的工作示例是 NFSv4,它要求每个客户端在客户端计算机(以及 NFS 服务器主机)上本地有一个 Kerberos 密钥表。
在需要访问 NFS 主机的所有客户端计算机之间共享通用密钥表文件(用于 NFS 目的)中的相同密钥会导致什么问题(如果有)?
如果从 #1 的结果来看,我们确实需要在每个客户端的不同 keytab 中使用单独的密钥,那么为每个客户端自动创建 keytab 是一种有效且更重要的是安全的方法几千台机器?我不想在每个盒子上生成和导出密钥!
通用密钥表根本没有用 - Kerberos 服务原则与主机名相关联。因此,通用密钥表根本行不通。您不一定需要特定于 NFS 的密钥 - 取决于您使用的操作系统版本。我们可以用来
HOST/full.qualified.hostname
在 RHEL 6+ 上验证 NFS。所以是的,您确实需要在每台机器上都有一个密钥表。我知道这很可怕,但事情就是这样。
请记住,在 Windows 域中,您必须在“域加入”过程中有效地执行相同的操作 - 其中一项主要操作是在 Windows 客户端上创建密钥表。
我们已经开始了集成域的道路——将我们的 Linux 客户端绑定到 Windows AD。使用这种方法,您可以
net
在 Linux 上使用该命令,例如net ads join
,我认为这是 SAMBA 的一部分。您可以在其中嵌入用户名和密码,并通过您已有的任何现有自动化机制运行它。(net ads keytab create
也确实......好吧,正如它在锡上所说的那样。)如果您不使用广告,那么恐怕我不知道。我会想象存在类似的东西来生成密钥表。
我已经编写了代码来解决您的问题,但它并不适用于所有人。问题是您必须想办法将信任扩展到不受信任的硬件。每个站点都会有稍微不同的方式来做到这一点。
我使用我们的配置管理安装的 ssh 密钥将信任扩展到不受信任的机器。
我写的代码在
https://github.com/bbense/aeakos
但它实际上更多的是如何解决自动安装 keytab 的难题。
至于为客户端使用通用密钥表,它可以用于某些基于 kerberos 的服务,但我从未见过用于 kerberos 的 NFS。通常,您希望每台机器上至少有一个 host/foo.com 以充分利用 kerberos 可以提供的功能。如果你不能这样做,那么部署 kerberos 就没有什么意义了。
理论上,如果您希望每台机器都可以访问相同的服务器/文件,那么通用客户端密钥表应该可以工作。在实践中,您必须对 nfs 服务器如何使用 kerberos 身份验证来实现授权进行全面分析,以确保一切正常。
成功使用 kerberos 的一部分是记住它只进行身份验证,授权始终特定于应用程序。我对 NFSV4 所做的一切都表明它期望每个客户端主机都有一个唯一的 kerberos id,但我没有证据表明它需要一个。