本章提供一个对 SEAM 产品的介绍。
SEAM (Sun 企业鉴别机制) 是一个客户机/服务器体系结构,提供强健的用户鉴别,以及数据完整性和隐私,从而提供安全的跨越网络事务。 鉴别 保证一个网络事务的发送方和接收方两者的身份都是真实的; SEAM 还可以验证正在来回传递的数据的有效性 (完整性) 并在传输过程中予以加密 (隐私)。使用 SEAM, 您就可以安全地登录到其它的机器,执行命令,交换数据,以及传送文件。 另外,SEAM 提供 授权 服务,允许管理员限定访问来服务和机器; 而且,作为一个 SEAM 用户,您可以调控他人对您的帐户的访问。
SEAM 是一个单次登录 系统,即每个对话您只需向 SEAM 鉴别您自己一次,该对话过程中所有后续的事务均自动得到安全保障。在 SEAM 业已对您进行鉴别之后,您就无需在每次使用基于 SEAM 的命令时均鉴别您自己了,诸如 ftp 或 rsh, 或访问一个 NFS 文件系统上的数据。这意味着,您不必每次使用服务时均跨越网络发送您的口令了,而口令在此时可能会遭到截获。
SEAM 是基于麻省理工学院 (MIT) 所开发的 Kerberos V5 网络鉴别协议。因此,使用过 Kerberos V5 的人应当会感到 SEAM 很熟悉。因为 Kerberos V5 是用于网络安全的一个 事实上 的工业标准, SEAM 促进与其它系统的互操作性。换言之,因为 SEAM 与使用 Kerberos V5 的一起工作,即使是跨越异机种网络,它也提供有安全事务。而且, SEAM 在域之间和单独一个域内,均提供鉴别和安全。
因为 SEAM 是基于 Kerberos V5 的,并且是为与之互操作而设计的,本手册经常或多或少交替地使用术语 " Kerberos" 和 "SEAM" - 例如, " Kerberos 区域" 或 "基于 SEAM 的实用程序。" (而且, " Kerberos" 和 " Kerberos V5" 也交替使用。) 本手册在必要时对此加以区分。
SEAM 允许运行 Solaris 应用程序方面有灵活性。您可以将 SEAM 配置为允许基于 SEAM 的和非基于 SEAM 的网络服务请求,诸如 NFS 服务, telnet和 ftp。这意味着,当前的 Solaris 应用程序依旧可以工作,即使其正在并未安装 SEAM 的机器上运行。当然,您还可以将 SEAM 配置为只允许基于 SEAM 的网络请求。
另外,如果开发有其它的安全机制,应用程序就不必非使用 SEAM 不可。因为 SEAM 是为模块化集成进类属安全服务 API 而设计的,利用 GSS-API 的应用程序可以运用最符合其需要的任何安全机制。
下列是 SEAM 鉴别系统的一个一般总览。如要了解更加详细的描述,请参见 "鉴别系统如何工作"。
从用户的立场来看,在 SEAM 对话得到启动之后, SEAM 通常是不可见的。 rsh 或 ftp,此类命令的工作方式与往常十分相近。初始化一个 SEAM 对话经常只是登录和提供一个 Kerberos 口令。
SEAM 系统是围绕着票券的概念演变而来的。票券是一套电子信息,用作识别用户或某项服务,诸如 NFS 服务。您的驾驶执照用以识别您并指示您拥有何种驾驶许可,与此相同,票券用以识别您和您的网络访问特权。当您进行一个基于 SEAM 的事务时 - 例如,如果您rlogin 到另一机器 - 您透明地向一个密钥分配中心, 或 KDC 发送一个票券请求,它们访问一个数据库,以鉴别您的身份。 KDC 返回一个票券,授予您访问其它机器的许可。 "透明地" 意思是指您不必明确请求一个票券; 这是作为 rlogin 命令的一部分而发生的。因为只有得到鉴别的客户机可以获得一个针对某个具体服务的票券,另一客户机无法以一个假装的身份使用 rlogin。
票券拥有某些与其相关联的属性。例如,一个票券可以是可转发 (即无需一个新的鉴别步骤就可以在另一机器上使用), 或 超期 (直到一个指定的时间才生效)。票券如何使用 - 例如,允许哪些用户获得哪些类型的票券 - 是由安装或管理 SEAM 时所确定的策略设定的。
您将频繁见到术语资格和票券。在更广泛的 Kerberos 世界中,这些术语经常是可以互相换用的。然而从技术上讲,资格是票券加上用于该对话的对话密钥。这一区别在 "借助 SEAM,获得对一个服务的访问" 有更加详细的解释。
下列各节简要解释 SEAM 鉴别步骤。
Kerberos 鉴别拥有两个阶段: 初始鉴别,允许所有后续的鉴别,以及后续的鉴别本身。
图形 1-1 显示初始鉴别是如何发生的:
一个客户机 (某个用户,或某项服务,诸如 NFS) 通过从密钥分配中心请求一个 具有票券授予权的票券 (TGT), 开始一个 SEAM 对话。这经常是在登录时自动完成的。
要获得用于具体服务的其它的票券,需要有一个具有票券授予权的票券。打个比方,请将具有票券授予权的票券想象为类似于护照。具有票券授予权的票券类似于一个护照,识别您并允许您获得无数的 "签证" - 这里的 "签证" (票券) 并非用于进入外国,而是用于远程机器或网络服务。具有票券授予权的票券及其它的各种各样票券类似于护照和签证,拥有有限的期限。其区别在于," Kerberized" 命令注意到您拥有一个护照,且为您获得签证- 您不必自己进行事务。
KDC 创建一个具有票券授予权的票券,并以加密的形式将其发回到客户机。客户机使用客户机的口令为该具有票券授予权的票券解密。
现在客户机持有一个有效的具有票券授予权的票券,就可以请求用于所有类型的网络操作的票券,诸如 rlogin 或 telnet, 只要具有票券授予权的票券最还有效。这通常是几个小时。每当客户机进行一个独特的网络操作时,其就从 KDC 为该操作请求一个票券。
在客户机业已收到初始鉴别之后,每个单个的鉴别就遵循 图形 1-2 中所显示的样式:
客户机为一个具体服务从 KDC 请求一个票券 (比如,为了 rlogin 到另一机器), 向 KDC 发送其具有票券授予权的票券,以证实其身份。
KDC 将用于具体服务的票券发送给客户机。
例如,假设用户 joe 在服务器 boston 上使用 rlogin。因为他业已得到鉴别 (即,他业已拥有一个具有票券授予权的票券), 就作为 rlogin 命令的一部分,自动而透明地获得一个票券。该票券允许他任意 rlogin 到 boston,直到到期。 如果 joe 想要 rlogin 到机器 denver, 他就获得另一票券,就象步骤 1 中那样。
客户机发送票券给服务器。
服务器允许客户机访问。
观察这些步骤,您可能业已注意到服务器似乎没有与 KDC 进行通信。但并非如此; 它借助 KDC 进行自我注册,就象第一个客户机那样。为简单明了起见,我们将这一部分省略掉了。
用户 (诸如 joe) 可以使用的基于 SEAM 的(或 " Kerberized") 命令有哪些? 有下列这些:
ftp
rcp
rlogin
rsh
telnet
这些应用程序与同名的 Solaris 应用程序相同,但其使用 Kerberos 授权对象来鉴别事务,从而提供基于 Kerberos 的安全。(请参见 "授权对象",了解有关授权对象的信息。)
下列命令在 "SEAM 命令" 中有进一步的论述。
SEAM 中的客户机是通过其 授权对象 来得以识别的。授权对象是一个独特的身份, KDC 可以向其分派票券。授权对象可以是一个用户,诸如 joe, 也可以是某项服务,诸如 nfs 或 telnet。
依照惯例,一个授权对象名称分为三个部分: primary、实例和 区域。例如,一个典型的 SEAM 授权对象有如 joe/admin@ENG.ACME.COM, 其中:
joe 是主干。这可以是一个用户名,如此处所示,也可以是某项服务,诸如 nfs。它还可以是单词 host, 指示这是一项服务授权对象,其业已设置为提供各种各样的网络服务 (ftp、rcp、rlogin, 等等)。
admin 是实例。如果是用户授权对象的情形,则实例是可选的,但对于服务授权对象却是必需的。例如: 如果用户 joe 有时作为一个系统管理员,他就可以使用 joe/admin 来将其自身从其通常的用户身份区分开。同样道理,如果joe在两个不同的服务器上拥有帐户,则其可以借助不同的实例,使用两个授权对象名称 (例如,joe/denver.acme.com 和 joe/boston.acme.com)。请注意, SEAM 将 joe 和 joe/admin 作为两个完全不同的授权对象。
如果是服务授权对象的情形,则实例就是完全合格的主机名。 bigmachine.eng.acme.com 就是此类实例的一个示例,因而举例而言, primary/instance 可能会是 ftp/bigmachine.eng.acme.com 或 host/bigmachine.eng.acme.com。
ENG.ACME.COM 是 SEAM 区域。区域在 "区域" 中有论述。
下列是所有有效的授权对象名称:
joe
joe/admin
joe/admin@ENG.ACME.COM
ftp/host.eng.acme.com@ENG.ACME.COM
host/eng.acme.com@ENG.ACME.COM
区域是一个逻辑网络,类似于一个域, 对同一 主 KDC 下的一组系统进行定义 (请参见下文)。 图形 1-3显示区域可以彼此联系。某些区域是分级的 (一个是另一个的超级)。否则区域就是非分级,而两个区域之间的映射必须得到定义。SEAM 的一个特性就是区域跨进行鉴别; 每个区域只需在其 KDC 中有一个针对另一区域的授权对象条目。
每个区域必须包括一个对授权对象数据库的主副本进行维护的服务器。这被称为 主 KDC 服务器。另外,每个区域应当至少包含一个 从 KDC 服务器, 其中包含授权对象数据库的复制副本。主和从 KDC 服务器两者均可以创建用于建立鉴别的票券。
区域还可以包括两个附加类型的 SEAM 服务器。 SEAM 网络 应用程序服务器 是一个向 Kerberized 应用程序 (诸如 ftp、telnet 和 rsh) 提供访问的服务器。区域还可以包括 NFS 服务器, 它借助 Kerberos 鉴别提供 NFS 服务。
图形 1-4 显示一个假想的区域可能会包含的内容。
作为对提供用户安全鉴别的补充, SEAM 还提供有两个安全服务:
完整性。正如鉴别用于确保网络上的一个客户机正是其所声称的身份,完整性用于确保其所发送的数据有效且在传输过程中未遭到篡改。这是通过数据的加密校验和来完成的。完整性还包括用户鉴别。
隐私。隐私使安全向前迈进了一步。其不但包括验证所传输的数据的完整性,而且在传输之前为数据加密,从而使之受到保护,以防偷听者。它也对用户进行鉴别。
由于美国的输出限制,隐私服务可能并非所有的 SEAM 用户均可用。
目前,在构成 SEAM 之一部分的各种各样的 Kerberized 应用程序中, 只有 ftp 命令允许用户在运行时 ("实时") 对安全服务进行更改。开发者可以将其基于 RPC 的应用程序设计为可以通过使用 RPCSEC_GSS 编程接口来选择某一安全服务。
类似于 MIT 所散发的 Kerberos V5, SEAM 包括:
密钥分配中心 (KDC) (主):
Kerberos 数据库管理守候程序 - kadmind
Kerberos 票券处理守候程序 - krb5kdc
从 KDC
数据库管理程序 - kadmin 和 kadmin.local
数据库传播软件 - kprop
用于获得、查看和销毁票券的用户程序 - kinit、klist、kdestroy - 以及用于更改您的 SEAM 口令的用户程序 - kpasswd
应用程序 - ftp、rcp、 rlogin、rsh和 telnet - 以及用于这些应用程序的守候程序 - ftpd、rlogind、rshd 和 telnetd
管理实用程序 - ktutil、kdb5_util
多个库
另外, SEAM 产品还包括下列:
SEAM 管理工具 (gkadmin) - 允许您管理 KDC。这一基于 Java(TM) 的 GUI,允许管理员进行通常通过 kadmin 命令进行的任务。
可插鉴别模块 (PAM) - 允许应用程序使用各种各样的鉴别机制; PAM 可以用于使登录和注销对用户来讲是透明的。
实用程序 (gsscred) 和守候程序 (gssd) - 这些程序帮助将 UNIXTM UID 映射到授权对象名称; 因为 SEAM NFS 服务器使用 UNIX ID 而不是授权对象名称来识别用户,这些 ID 一起存储为一个不同的格式。
GSS_API 框架结构 - 类属安全服务应用程序编程接口 (GSS-API) 允许应用程序使用多重安全机制,且在每次添加一个新的机制时,不必重新编译应用程序。因为 GSS-API 与机器无关,适用于因特网上的应用程序。 GSS-API 向应用程序提供包含完整性和隐私安全服务,以及鉴别的能力。
RPCSEC_GSS 应用程序编程接口 (API) - 允许 NFS 服务使用 Kerberos 鉴别。 RPCSEC_GSS 是一个新的安全风格,提供与所使用的机制无关的安全服务; RPCSEC_GSS 居于 GSS-API 层的 "顶部"。任何可插的基于 GSS_API 的安全机制均可以为使用 RPCSEC_GSS 的应用程序所用。
预配置步骤 - 允许您为安装和配置 SEAM 设定参数,从而使 SEAM 安装自动化; 这对多重安装特别有用。
核心修改 - 提供更快的性能表现。