Kerberos 服务的工作原理
下面概述了 Kerberos 验证系统。有关更详细的说明,请参见。
从用户的角度来看,启动 Kerberos 会话后,Kerberos 服务通常不可见。一些命令(如 rsh 或 ftp)也是如此。初始化 Kerberos 会话通常仅包括登录和提供 Kerberos 口令。
Kerberos 系统的工作围绕票证的概念展开。票证是一组标识用户或服务(如 NFS 服务)的电子信息。正如您的驾驶证可标识您的身份并表明您的驾驶级别一样,票证也可标识您的身份以及您的网络访问特权。执行基于 Kerberos 的事务时(例如,远程登录到另一台计算机),您将透明地向密钥分发中心 (Key Distribution Center, KDC) 发送票证请求。KDC 将访问数据库以验证您的身份,然后返回授予您访问其他计算机的权限的票证。“透明”意味着您无需显式请求票证。请求是在执行 rlogin 命令过程中进行的。因为只有通过验证的客户机可以获取特定服务的票证,所以其他客户机不能以虚假身份使用 rlogin。
票证具有与之关联的特定属性。例如,票证可以是可转发的,这意味着它可以在其他计算机上使用,而不必进行新的验证。票证也可以是以后生效的,这意味着它要到指定时间后才会生效。票证的使用方式(例如,如何指定允许哪些用户获取哪些类型的票证)由策略设置。策略在安装或管理 Kerberos 服务时确定。
注 - 您可能会经常看到术语凭证和票证。在更为广泛的 Kerberos 范围内,两者通常可互换使用。但是,从技术上讲,凭证指的是票证和会话的会话密钥。中对此区别进行了更详细的说明。
以下各节将进一步说明 Kerberos 验证过程。
初始验证:票证授予票证
Kerberos 验证分为两个阶段:允许进行后续验证的初始验证以及所有后续验证自身。
下图显示了如何进行初始验证。
图 19-1 Kerberos 会话的初始验证
-
客户机(用户或 NFS 等服务)通过从密钥分发中心 (Key Distribution Center, KDC) 请求票证授予票证 (ticket-granting ticket, TGT) 开始 Kerberos 会话。此请求通常在登录时自动完成。
要获取特定服务的其他票证,需要票证授予票证。票证授予票证类似于护照。与护照一样,票证授予票证可标识您的身份并允许您获取多个“签证”,此处的 “签证”(票证)不是用于外国,而是用于远程计算机或网络服务。与护照和签证一样,票证授予票证和其他各种票证具有有限的生命周期。区别在于基于 Kerberos 的命令会通知您拥有护照并为您取得签证。您不必亲自执行该事务。
与票证授予票证类似的另一种情况是可以在四个不同的滑雪场使用的三天滑雪入场卷。只要入场券未过期,您就可以在决定要去的任意一个滑雪场出示入场 卷,并获取该滑雪场提供的缆车票。获取缆车票后,即可在该滑雪场随意滑雪。如果第二天去另一个滑雪场,您需要再次出示入场卷,并获取新滑雪场的另一张缆车 票。区别在于基于 Kerberos 的命令会通知您拥有周末滑雪入场卷,并会为您取得缆车票。因此,您不必亲自执行该事务。
-
KDC 可创建票证授予票证,并采用加密形式将其发送回客户机。客户机使用其口令来解密票证授予票证。
-
拥有有效的票证授予票证后,只要该票证授予票证未过期,客户机便可以请求所有类型的网络操作(如 rlogin 或 telnet)的票证。此票证的有效期通常为几个小时。每次客户机执行唯一的网络操作时,都将从 KDC 请求该操作的票证。
后续 Kerberos 验证
客户机收到初始验证后,每个后续验证都按下图所示的模式进行。
图 19-2 使用 Kerberos 验证获取对服务的访问权
-
客户机通过向 KDC 发送其票证授予票证作为其身份证明,从 KDC 请求特定服务(例如,远程登录到另一台计算机)的票证。
-
KDC 将该特定服务的票证发送到客户机。
例如,假设用户 joe 要访问已通过要求的 krb5 验证共享的 NFS 文件系统。由于该用户已经通过了验证(即,该用户已经拥有票证授予票证),因此当其尝试访问文件时,NFS 客户机系统将自动透明地从 KDC 获取 NFS 服务的票证。
例如,假设用户 joe 在服务器 boston 上使用 rlogin。由于该用户已经通过了验证(即,该用户已经拥有票证授予票证),所以在运行 rlogin 命令时,该用户将自动透明地获取票证。该用户使用此票证可随时远程登录到 boston,直到票证到期为止。如果 joe 要远程登录到计算机 denver,则需要按照步骤 1 获取另一个票证。
-
客户机将票证发送到服务器。
使用 NFS 服务时,NFS 客户机会自动透明地将 NFS 服务的票证发送到 NFS 服务器。
-
服务器允许此客户机进行访问。
从这些步骤来看,服务器似乎并未与 KDC 通信。但服务器实际上与 KDC 进行了通信,并向 KDC 注册了其自身,正如第一台客户机所执行的操作。为简单起见,该部分已省略。
Kerberos 远程应用程序
用户(如 joe)可以使用的基于 Kerberos 的(即 "Kerberized")命令包括:
-
ftp
-
rcp
-
rlogin
-
rsh
-
ssh
-
telnet
这些应用程序与同名的 Solaris 应用程序相同。但是,它们已扩展为使用 Kerberos 主体来验证事务,因此会提供基于 Kerberos 的安全性。有关主体的信息,请参见。
中将进一步介绍这些命令。
Kerberos 主体
Kerberos 服务中的客户机由其主体标识。主体是 KDC 可以为其分配票证的唯一标识。主体可以是用户(如 joe)或服务(如 nfs 或 telnet)。
根据约定,主体名称分为三个部分:主名称、实例和领域。例如,典型的 Kerberos 主体可以是 joe/admin@ENG.EXAMPLE.COM。在此示例中:
-
joe 是主名称。主名称可以是用户名(如此处所示)或服务(如 nfs)。主名称还可以是单词 host,这表示此主体是设置用于提供各种网络服务(如 ftp、rcp 和 rlogin 等)的服务主体。
-
admin 是实例。对于用户主体,实例是可选的;但对于服务主体,实例则是必需的。例如,如果用户 joe 有时充当系统管理员,则他可以使用 joe/admin 将其自身与其平时的用户身份区分开来。同样,如果 joe 在两台不同的主机上拥有帐户,则他可以使用两个具有不同实例的主体名称,例如 joe/denver.example.com 和 joe/boston.example.com。请注意,Kerberos 服务会将 joe 和 joe/admin 视为两个完全不同的主体。
对于服务主体,实例是全限定主机名。例如,bigmachine.eng.example.com 就是这种实例。此示例的主名称/实例可以为 ftp/bigmachine.eng.example.com 或 host/bigmachine.eng.example.com。
-
ENG.EXAMPLE.COM 是 Kerberos 领域。领域将在中介绍。
以下都是有效的主体名称:
-
joe
-
joe/admin
-
joe/admin@ENG.EXAMPLE.COM
-
nfs/host.eng.example.com@ENG.EXAMPLE.COM
-
host/eng.example.com@ENG.EXAMPLE.COM
Kerberos 领域
领域是定义属于同一主 KDC 的一组系统的逻辑网络,类似于域。 显示了各领域相互之间的关系。有些领域是层次化的,其中,一个领域是另一个领域的超集。另外一些领域是非层次化(或“直接”)的,必须定义两个领域之间的 映射。Kerberos 服务的一种功能是它允许进行跨领域验证。每个领域只需在其 KDC 中有对应于另一个领域的主体项即可。此 Kerberos 功能称为跨领域验证。
图 19-3 Kerberos 领域
Kerberos 服务器
每个领域都必须包括一台用于维护主体数据库主副本的服务器。此服务器称为主 KDC 服务器。此外,每个领域还应至少包含一台从 KDC 服务器,该服务器包含主体数据库的多个副本。主 KDC 服务器和从 KDC 服务器都可创建用于建立验证的票证。
领域还可以包含 Kerberos 应用服务器。该服务器提供对基于 Kerberos 的服务(如 ftp、telnet、rsh 和 NFS)的访问。如果安装了 SEAM 1.0 或 1.0.1,则领域可能会包括 Kerberos 网络应用服务器,但此软件不随这些发行版一起提供。
下图显示了一个假设的领域可能包含的内容。
图 19-4 典型的 Kerberos 领域