Sun 企业鉴别机制指南

第 6 章 使用 SEAM

本章旨在用于业已安装有 SEAM 的系统,且人员不限。解释如何使用 SEAM 所提供的 " Kerberized" 命令: ftp, rcp, rlogin, rsh,和 telnet。您在阅读本文中关于这些命令的内容之前,就应当已对其十分熟悉 (在其非 Kerberized 版本中)。您将发现 Kerberized 和非 Kerberized 的版本实质上是一样的。实际上,在许多情况下,您均可以使用这些命令,而不知晓或关心它们是 Kerberized。而差别在于对那些利用 Kerberos 的特性的使用上 (例如,您使用 rlogin 时转发一个票券)。

因为本章旨在针对一般读者,包括有关票券的信息: 获得、查看和销毁。还包括有关选择或更改 Kerberos 口令的信息。

如要了解对 SEAM 的一个总览,请参见第 1 章,SEAM 介绍

这是本章中所涉及的主题的一个列表:

票券管理

本节解释如何获得、查看和销毁票券。如要了解对票券的介绍,请参见"SEAM 如何工作"

您必须为票券操心吗?

随着 SEAM 的安装, Kerberos 就被内置于 login 命令,而您登录时就会自动获得票券。 Kerberized 命令 rsh, rcp, telnet,和 rlogin 通常被设置为将您的票券的副本转发给其它的机器,因而您不必明确地要求得到票券就可以获得对这些机器的访问。 (有可能您的 SEAM 配置不包括这一自动转发功能,但这是默认行为。) 请参见"Kerberized 命令总览""转发票券借助-f-F",了解更多有关转发票券的信息。

大多数的 Kerberized 命令还在其退出时,自动销毁您的票券。然而,为安全起见,当您使用完毕时,您可能会需要借助 kdestroy,明确地销毁您的 Kerberos 票券。请参见"如何销毁票券",了解更多有关 kdestroy 的信息。

如要了解有关票券期限的信息,请参见"票券期限"

如何创建一个票券

当您登录时,通常会自动创建一个票券,而您无须采取任何特殊动作。然而,在下列情况下,您可能会需要创建一个票券:

如要创建一个票券,请使用 kinit 命令。


% /usr/krb5/bin/kinit  

kinit 提示您提供您的口令。如要了解 kinit 命令的完整句法,请参见kinit(1) 手册页。

示例 - 创建一个票券

该示例显示的是用户, jennifer, 在其自己的系统上创建一个票券:


% kinit
jennifer@ENG.ACME.COM 的口令: <录入口令> 

这里,用户 david 借助 -l 选项,创建了一个有效期为三个小时的票券:


% kinit -l 3h david@ACME.ORG
 david@ACME.ORG的口令:<录入口令> 

该示例显示的是 david 为其自己创建一个可转发票券 (借助 -f)。借助该可转发票券,他就可以登录到第二个系统 (举例而言) ,然后 telnet 到第三个系统。


% kinit -f david@ACME.ORG
david@ACME.ORG 的口令:<录入口令> 

如要了解更多有关转发票券如何工作的信息,请参见"转发票券借助-f-F""票券的类型"

如何查看票券

并非所有的票券均一个样。例如,一个票券可能是 可转发 的; 而另一个可能是 超期 的; 而第三个可能是两者兼而有之。您可以通过使用带 -f 选项的 klist 命令,查看您所拥有的票券的种类及其属性:


% /usr/krb5/bin/klist -f

下列符号指示与每个票券相关联的属性,这些属性可以通过 klist 加以显示:

可转发 

已转发 

可代理 

代理 

可超期 

超期 

可续延 

初始 

无效 

"票券的类型" 描述一个票券可以拥有的各种各样的属性。

示例 - 查看票券

该示例显示的是用户 jennifer 拥有一个 initial 票券,属于 可转发 (F) 和 超期 (d), 但是尚未得到证实 (i):


%/usr/krb5/bin/klist  -f
票券高速缓存: /tmp/krb5cc_74287
默认的授权对象: jenniferm@ENG.ACME.COM

有效期开始于                 到期                 服务授权对象
99 年 3 月 09 日 15:09:51  99 年 3 月 09 日 21:09:51  nfs/ACME.SUN.COM@ACME.SUN.COM
         续延到 99年 3 月 10 日 15:12:51, 标志: Fdi

下面的示例显示的是用户 david 拥有两个票券,其从另一主机 已转发 (f) 到他的主机。票券还属于 (re)可转发 (F):


% klist  -f
票券高速缓存: /tmp/krb5cc_74287
默认的授权对象: david@ACME.SUN.COM

有效期开始于                 到期                 服务授权对象
99 年 3 月 07 日 06:09:51  99 年 3 月 09 日 23:33:51host/ACME.COM@ACME.COM
         续延到 99 年 3 月 10 日 17:09:51, 标志: fF

有效期开始于                 到期                 服务授权对象
99 年 3 月 08 日 08:09:51  99 年 3 月 09 日12:54:51  nfs/ACME.COM@ACME.COM
         续延到 99 年 3 月10 日 15:22:51, 标志: fF

如何销毁票券

通常在命令退出时,其所创建的票券会自动被销毁; 然而,为安全起见,当您使用完毕时,您可能会需要明确地销毁您的 Kerberos 票券。票券可能会被偷,而如果发生此类情形,拥有票券的人可以加以使用,一直到其到期 (尽管被偷票券必须经过解密)。

如要销毁您的票券,请使用 kdestroy 命令。


% /usr/krb5/bin/kdestroy

kdestroy 销毁 所有 您的票券。您无法将其用来有选择地销毁一个具体票券。

如果您将要离开您的系统,而又担心一个侵入者使用您的许可,则您应当使用 kdestroy,或者使用一个屏幕保护器将屏幕锁定。


注意:

用以确保票券总是得到销毁的一个方法就是,将 kdestroy 命令添加到您的主目录中的 .logout 文件。

如果是 PAM 模块得到配置的情形 (默认和通常情形), 则在注销时,票券自动得到销毁,因而不必将对 kdestroy 的调用添加到您的 .login 文件。然而,如果 PAM 模块尚未得到配置,或者如果您不知道是否业已得到配置,则您可能会需要将 kdestroy 添加到您的 .login文件,以确保当您退出您的系统时,票券得到销毁。


口令管理

随着 SEAM 的安装,现在您就拥有两个口令: 您的常规 Solaris 口令,和一个 Kerberos 口令。您可以让两个口令一样,也可以让它们不一样。

非 Kerberized 命令,诸如 login,通常通过 PAM 来设置为与 Kerberos 和 UNIX 两者进行鉴别。如果您拥有不同的口令,则您必须提供两个口令才能得到适当的鉴别,进行登录。然而,如果两者口令相同,则您为 UNIX 录入的第一个口令也为 Kerberos 所接受。

不幸的是,为两者使用同一口令可能折衷安全。即,如果某人发现您的 Kerberos 口令,则您的 UNIX 口令不再是一个秘密。然而,为 UNIX 和 Kerberos 使用同一口令,依旧比一个没有 Kerberos 的站点更为安全,因为 Kerberos 环境中的口令并非跨越网络发送。通常,您的站点将拥有一个策略来帮助您确定您的选项。

您的 Kerberos 口令是 Kerberos 用来验证您的身份的唯一方法。如果某人发现您的 Kerberos 口令, 则 Kerberos 安全变得没有意义,因为此人可以假扮您- 发送来自于"您"的电子邮件,阅读、编辑或删除您的文件,或者以您的身份登录到其它的主机 - 而没有人能够加以区别。出于该原因,您选择一个好的口令并为之保守秘密,这一点至关重要。如果您必须给予他人对您的帐户的访问,则您可以通过 Kerberos 办到,且不透露您的口令 (请参见"授予对您的帐户的访问")。您 永远 都不应当将您的口令透露给其他任何人,即使是您的系统管理员。另外,您应当频繁地更改您的口令,特别是每当您相信某人可能业已发现时。

有关选择口令的忠告

您的口令可以包括您可以键入的几乎任何字符 (主要的例外是控制键和回车键)。一个好的口令便于您记住,但别人又无法轻易猜出。不良口令的示例包括:

一个好的口令至少为八个字符长。而且,一个口令应当包括混合字符,诸如大写和小写字母,数字以及标点符号。下列口令示例,如果没有出现在本手册中,就应当属于好的口令:


小心:小心:

不要使用这些示例。侵入者将最先尝试出现在手册中的口令。


更改您的口令

有两个方法您可以用来更改您的 Kerberos 口令:

您更改您的口令之后,让更改通过一个系统得到传播 (特别是跨越一个大型网络),需要花费一些时间。这取决于您的系统是如何设置的,可能会是从几分钟到一个小时或更长时间不等。如果您必须在更改您的口令之后不久就获得新的 Kerberos 票券,则请首先尝试新的口令。如果新的口令无效,则请再次尝试使用旧的口令。

Kerberos V5 允许系统管理员就所允许的口令,为每个用户设定范畴。此类范畴是通过为每个用户设定的 策略 加以定义的 (或通过一个默认的策略)- 请参见"管理策略",了解更多有关策略的信息。例如,假设 jennifer 的策略 (称之为 jenpol) 要求口令为至少八个字母长且包括至少两种字符的混合体。因而 kpasswd 将拒绝把 "sloth" 用作口令的企图:


% kpasswd
kpasswd: 更改 jennifer@ENG.ACME.COM 的口令。
旧的口令:<jennifer 录入其现有的口令> 
kpasswd: jennifer@ENG.ACME.COM 的口令由策略 jenpol 进行控制,
要求来自至少 2 个类的至少 8 个字符, (五类为小写,大写,数字,标点符号,以及所有其它的字符)。
新的口令: <jennifer 录入 'sloth'>
新的口令 (再次):<jennifer 重新录入 'sloth'>kpasswd: 新的口令太短。
请选择一个至少 4 个字符长的口令。

这里, jennifer 使用 "slothrop49" 作为一个口令。'slothrop49' 符合范畴,因为其为八个以上字母长且包含两个不同种类的字符 (数字和小写字母):


% kpasswd
kpasswd: 更改 jennifer@ENG.ACME.COM 的口令。
旧的口令:<jennifer 录入其现有的口令> 
kpasswd: jennifer@ENG.ACME.COM 的口令由策略 jenpol 进行控制,
要求来自至少 2 个类的至少 8 个字符, (五类为小写,大写,数字,标点符号,以及所有其它的字符)。
新的口令:<jennifer 录入 'slothrop49'>
新的口令 (再次):<jennifer 重新录入 'slothrop49'> 
Kerbero口令得到更改。

示例 - 更改您的口令

下列示例显示 david 借助 passwd,对其 UNIX 和 Kerberos 口令两者进行更改。


% passwd	
passwd:  更改 david 的口令
录入登录(NIS+) 口令:            <录入当前的 UNIX 口令>
新的口令:                      <录入新的 UNIX 口令>	
重新录入口令:                   <确认新的 UNIX 口令>	
旧的 KRB5 口令:                <录入当前的 Kerberos 口令>
新的KRB5 口令:                 <录入新的 Kerberos 口令>
重新录入新的 KRB5 口令:          <确认新的 Kerberos 口令>

在上面的示例中, passwd 询问 UNIX 和 Kerberos 口令两者; 然而,如果 try_first_pass 在 PAM 模块中得到设定,则 Kerberos 口令自动设定为与 UNIX 口令相同。(这是默认的配置。) 在这种情形下,david 必须使用 kpasswd,将其 Kerberos 口令设定为其它一些内容,如下所示。

该示例显示其借助 kpasswd,只更改其 Kerberos 口令:


% kpasswd
kpasswd: 更改的口令 david@ENG.ACME.COM.
旧的口令:                   <录入当前的 Kerberos 口令>
新的口令:                   <录入新的 Kerberos 口令>
新的口令 (再次):             <确认新的 Kerberos 口令> 
 Kerberos 口令得到更改。

在本示例中, david 变更 Kerberos 授权对象 david/admin 的口令 (而这并非一个有效的 UNIX 用户)。如要做到这一点,他必须使用 kpasswd


% kpasswd david/admink
kpasswd:  更改 david/admin 的口令。
旧的口令:                    <录入当前的 Kerberos 口令>	
新的口令:                    <录入新的 Kerberos 口令>
新的口令 (再次):              <确认新的 Kerberos 口令>  
Kerberos 口令得到更改。

授予对您的帐户的访问

如果您必须给予某人访问,使其可以登录到您的帐户 (以您的身份), 您借助 Kerberos, 而不透露您的口令就可以办到,通过在您的主目录中放置一个 .k5login 文件。 .k5login 文件是一个或多个 Kerberos 授权对象的一个列表,与您想向其授予访问的每个人相对应。(每个授权对象必须在单独一行上。)

假设用户 david 在其主目录保留有一个 .k5login 文件,该文件看似如下:


jennifer@ENG.ACME.COM
 joe@ACME.ORG  

该文件允许用户 jenniferjoe 假借 david的身份,条件是他们业已在其各自的区域内,拥有 Kerberos 票券。例如, jennifer 可以 rlogindavid的机器 (boston), 以他的身份,而不必给出他的口令:

图形 6-1 使用.k5login 文件

Graphic

(在 david的主目录是由 NFS 使用 Kerberos V5 协议,从另一 (第三个) 机器进行装配的情形下, jennifer 必须拥有一个可转发票券,以便可以访问他的主目录。请参见"如何创建一个票券",了解关于使用可转发票券的一个示例。)

如果您将跨越网络登录到其它的机器,则您将需要在这些机器上的 .k5login 文件中包含您自己的 Kerberos 授权对象。

使用一个 .k5login 文件要比给出您的口令安全得多:

使用 .k5login 文件的一个常见的方法就是将其放在 root 的主目录,将对该机器的 root 访问给予所列出的 Kerberos 授权对象。这允许系统管理员在本地变为 root,或者以 root 的身份远程进行登录,而不必给出 root 口令,且任何人都不必跨越网络键入 root 口令。

示例 - 使用.k5login 文件

假设 jennifer 决定作为 root 登录到机器 boston.acme.com。因为她在 boston.acme.comroot的主目录中的 .k5login 中,拥有一个针对她的授权对象名称的条目,她又不必键入她的口令了:


% rlogin boston.acme.com -l root -x
这一 rlogin 对话正在将 DES 加密用于所有的数据传输。
最近登录: Thu Jun 20 16:20:50 从 daffodil
SunOS 发行版 5.7 (类属) #2:Tue Nov 14 18:09:31 EST 1998   boston[root]% 

SEAM 命令

Kerberos V5 是一个 单次登录 系统。这意味着您只需键入您的口令一次, Kerberos V5 程序就会为您进行鉴别 (以及可选的加密), 因为 Kerberos 业已内置于现有的常用网络套件中的每个程序。 Kerberos V5 应用程序包括现有 UNIX 网络程序的版本外加 Kerberos 特性。

例如,当您使用一个 Kerberized 程序来连接到一个远程主机时,程序、 KDC 以及远程主机就进行一整套快速的协商。当这些协商完成时,您的程序就业已代表您向远程主机证明了您的身份,而远程主机业已授予您访问。

请注意, Kerberized 命令首先试图与 Kerberos 进行鉴别。如果 Kerberos 鉴别失败,就发生一个错误,或者试图进行 UNIX 鉴别,具体取决于命令所使用的选项。请参考 Kerberos 命令手册页中 Kerberos Security 一节,了解更多的详细的信息。

Kerberized 命令总览

Kerberized 网络服务是那些用于连接到因特网上某个地方的另一机器的程序。这些程序位于 /usr/krb5/bin; 请设定您的 PATH 变量,让这些程序出现在非 Kerberos 版本之前。这些程序是:

这些程序拥有相对应的非 Kerberos 对等程序的所有原来的特性。它们还拥有附加的特性,用于透明地使用您的 Kerberos 票券来与远程主机协商鉴别 (以及可选的加密)。在大多数的情况下,您只会注意到您不必再键入您的口令就可以使用这些程序,因为 Kerberos 会为您提供对您的身份的证明。

Kerberos V5 网络程序允许您选择:


注意:

本节假设您业已熟悉这些程序的非 Kerberos 版本,并着重讨论 Kerberos V5 包所添加的 Kerberos 功能。如要了解对本文所述命令的详细的描述,请参见其手册页。


下列 Kerberos 选项业已被添加到 ftp, rcp, rlogin, rsh,和 telnet:

-a

试图使用您现有的票券自动进行登录。使用 getlogin() 所返回的用户名,除非这与当前的用户 ID 不同。 (请参见telnet(1) 手册页,了解有关细节。)

-f

将一个不可重新转发 票券转发到一个远程主机。该选项与 -F 相互排斥 (请参见下文); 它们无法一起用在同一命令中。

如果您有理由相信您将需要向某一第三个主机上的其它的基于 Kerberos 的服务鉴别您自己的话,您将需要转发一个票券 - 例如,如果您想 rlogin 到另一机器,然后再从该机器 rlogin 到某一第三个机器。

如果您在远程主机上的主目录是由 NFS 使用 Kerberos V5 进行装配的,则您绝对应当使用一个可转发票券; 否则,您将无法访问您的主目录。(即,假设您起初登录到系统 1。从系统 1 您 rlogin 到您的主机器,系统 2, 该系统从系统 3 装配您的主目录。除非您业已在 rlogin 使用了 -f-F 选项,否则您将无法到达您的主目录,因为您的票券无法被转发到系统 3。)

默认情况是, kinit 获得可转发的具有票券授予权的票券 (TGT); 然而,您的 SEAM 配置可能在这方面有所不同。

如要了解更多有关转发票券的信息,请参见"转发票券借助-f-F"

-F

将您的具有票券授予权的票券的一个 可重新转发 副本转发到一个远程系统。这类似于 -f (请参见上文), 但是其允许对其它另一 (比如,第四个或第五个) 机器的访问。因而 -F 选项可以被看成是 -f 选项的一个超级。 -F 选项与 -f 选项互相排斥; 它们无法一起用在同一命令中。

如要了解更多有关转发票券的信息,请参见"转发票券借助-f-F"

-k realm

请求用于所指定 区域 内的远程主机的票券,而不是使用 krb5.conf 文件来确定区域自身。

-K

使用您的票券来向远程主机进行鉴别,但不自动进行登录。

-m 机制

指定使用 GSS-API 安全机制,正如 /etc/gss/mech 文件中所列。 Kerberos_v5 的默认值。

-x

为本对话加密。

-X auth_type

禁用 auth_type 类型的鉴别。

表 6-1,显示哪些命令拥有具体的选项 ("X" 指示该命令拥有该选项)。

表 6-1 用于网络命令的 Kerberos 选项

 

ftp

rcp

rlogin

rsh

telnet

-a

 

 

 

 

-f

 

-F

 

 

-k

 

-K

 

 

 

 

-m

 

 

 

 

-x

 

-X

 

 

 

 

另外, ftp 允许在其提示处,为对话设定保护级:

清除

将保护级设定为 "清除" (无保护)。这是默认的。

私有

将保护级设定为 "私有。" 通过加密,数据传输受到机密和完整性保护。然而,隐私服务可能并非对所有 SEAM 用户均可用。

安全

将保护级设定为 "安全"。 通过加密校验和,数据传输受到完整性保护。

您还可以在 ftp 提示处设定保护级,方法是通过录入 保护,后面跟有上文所示的任意保护级 (清除, 私有,或 安全)。

转发票券借助-f-F

"Kerberized 命令总览", 中所述,有些命令允许您借助 -f-F 选项转发票券。转发票券允许您 "链化" 您的网络事务; 例如,您可以 rlogin 到一个机器,然后从该机器 rlogin 到另一机器。 -f 选项允许您转发一个票券,而 -F 选项允许您重新转发一个已转发票券。

图形 6-2 中,用户 david 借助 kinit,获得一个不可转发的具有票券授予权的票券 (TGT)。 (它是不可转发的,因为他没有指定 -f 选项。) 在情景 1 中,他能够 rlogin 到机器 B, 但是他无法继续下去。在情景 2 中,rlogin -f 命令失败,因为他正试图转发一个不可转发的票券。

图形 6-2 使用不可转发票券

Graphic

(实际情况是, SEAM 配置文件被设置为 kinit默认获得可转发票券。然而,您的配置可能与此不同。出于解释的需要,我们假设 kinit 获得可转发 TGT,除非其被调用时带有 kinit -f。另外请注意, kinit 没有 -F 选项; TGT 不是可转发的,就是不可转发的。)

图形 6-3 中,david 借助 kinit -f,获得了可转发 TGT。在情景 3 中,他能够到达机器 C,因为他将一个可转发票券用于 rlogin。在情景 4 中,第二次 rlogin 失败,因为票券是不可重新转发的。通过换用 -F 选项,如情景 5,第二次 rlogin 成功,并且票券可以继续重新转发到机器 D。

图形 6-3 使用可转发票券

Graphic

示例 - 使用 Kerberized 命令

下列示例帮助了解用于 Kerberized 命令的选项是如何工作的。

示例 - 将-a, -f, 和-x 选项用于telnet

在本示例中,用户 david业已登录,并且想 telnet 到机器 denver.acme.com。他使用 -f 选项来转发他现有的票券,使用 -x 选项来为对话加密,并使用 -a 选项来自动进行登录。因为他不打算使用某一第三个主机的服务,他可以将 -F 换用为 -f


% telnet -a -f -x denver.acme.com  尝试 128.0.0.5...
 连接到 denver.acme.com。逃逸字符为 '^]'. 
 [ Kerberos V5 将您接受为 "david@eng.acme.com" ] 
 [ Kerberos V5 已接受已转发的资格 ] 
 SunOS 5.7: Tue May 21 00:31:42 EDT 1998  欢迎使用 SunOS  %

请注意, david的机器使用 Kerberos 来向 denver.acme.com 鉴别他自己,并作为自己自动进行登录。他拥有一个经过加密的对话,他的票券的一个副本业已在等候他,他永远不必键入他的口令。如果他使用的是一个非 Kerberos 版本的 telnet 的话,他就会被提示录入他的口令,且该口令未经加密就会跨越网络得到发送 -如果有一个侵入者此时正在观察网络数据,该侵入者就会知道 david的口令。

如果您转发您的 Kerberos 票券,telnet (以及本文中所论述的其它的命令) 就在退出时将其销毁。

示例 - 使用rlogin 带有 -F 选项

这里,用户 jennifer 想要登录到她自己的机器,boston.acme.com。她借助 -F 转发她现有的票券,并借助 -x 为对话加密。她选择的是 -F 而不是 -f,因为在她登录到 boston 之后,她可能需要进行其它的网络事务,而这又需要票券得到重新转发。另外,因为她是在转发她现有的票券,她不必键入她的口令。


% rlogin boston.acme.com -F -x
这一 rlogin 对话将 DES 加密用于所有传输。
最近登录 Mon May 19 15:19:49 从 daffodil 
SunOS 发行版 5.7 (类属) #2 Tue Nov 14 18:09:3 EST 1998  %

示例 - 在ftp 中设定保护级

现在假设 joe 想要使用 ftp 来从机器 denver.acme.com 的目录 ~joe/MAIL 获得他的邮件,且要为对话加密。交换过程会看似如下:


% ftp -f denver.acme.com
连接到 denver.acme.com
220 denver.acme.org FTP 服务器 (版本 6.0) 已准备好。
334 使用鉴别类型 GSSAPI; ADAT 必须跟从
已接受为鉴别类型的 GSSAPI
GSSAPI 鉴别成功名称 (daffodil.acme.org:joe)
232 GSSAPI 用户 joe@MELPOMENE.ACME.COM 被授权为 joe
230 用户 joe 已登录。
远程系统类型为 UNIX。
使用 BINARY 模式来传送文件。
ftp>保护私有
200保护级设定为私有
ftp>cd ~joe/MAIL
250 CWD 命令成功。
ftp>get RMAIL
227 进入 Passive 模式 (128,0,0,5,16,49)
150 为 RMAIL 打开 BINARY 模式数据连接 (158336 字节)。
226 传送完成。在 1.9 秒内接收到了 158336 个字节 (1.4e+02千字节/秒)
ftp>quit
%

为了为对话加密,joe 将保护级设定为 私有