Sun 企业鉴别机制指南

管理密钥表

提供某项服务的每个主机必须拥有一个本地文件,称为 密钥表 (密钥表的缩写), 其中包含用于适当服务的授权对象,称为 服务密钥。服务密钥被某项服务用来向 KDC 进行自我鉴别,且仅为 Kerberos 和服务自身所知晓。例如,如果您拥有一个 Kerberized NFS 服务器,则该服务器必须拥有一个包含其 nfs 服务授权对象的密钥表。

如要添加某项服务密钥到一个密钥表, 您就通过使用 kadminktadd 命令,将适当的服务授权对象添加到一个主机的密钥表。而且,因为您将添加某项服务授权对象正在到一个密钥表,该授权对象必须业已存在于 Kerberos 数据库,从而 kadmin 可以验证其存在。在主 KDC 上,默认情况是,密钥表文件位于 /etc/krb5/kadm5.keytab。在提供 Kerberized 服务的应用程序服务器上,默认情况是,密钥表文件位于 /etc/krb5/krb5.keytab

一个密钥表类似于一个用户的口令。为用户保护其口令很重要,应用程序服务器保护其密钥表同样很重要。您应当总是将密钥表存储在一个本地磁盘上,并使其只能为 root 读取,而您永远不应跨越一个不安全的网络发送一个密钥表。

还有一个特殊的实例,即将一个root 授权对象添加到一个主机的密钥表。基本上,如果您想要 SEAM 客户机上的一个用户借助 Kerberos 鉴别来自动装配 Kerberized NFS 文件系统,您就必须添加客户机的root 授权对象到客户机的密钥表。否则,每当用户想要装配一个 Kerberized NFS 文件系统时,用户就必须作为 root,借助 kinit 命令来为客户机的root 授权对象获得资格,即便是使用自动装配器。请参见"设置 Root 鉴别来装配 NFS 文件系统",了解详细的信息。


注意:

当设置一个主 KDC 时,您必须将 kadmindchangepw 授权对象添加到 kadm5.keytab 文件,因而 KDC 可以为管理员的 Kerberos 票券解密,以确定是否其应当给予其对来数据库的访问。


您可以用来管理密钥表的另一命令是 ktutil 命令。 ktutil 是一个交互式的命令行接口实用程序,使您没有 Kerberos 管理特权就可以管理一个本地主机的密钥表, 因为 ktutil 不象 kadmin 那样与 Kerberos 数据库交互作用。因此,在将一个授权对象添加到一个密钥表之后,您可以用 ktutil 来查看一个密钥表中的密钥列表,或暂时为某项服务禁用鉴别。

管理密钥表任务图

表 5-9 管理密钥表任务图

任务 

描述 

如要了解操作指示,请转到 ... 

添加某项服务授权对象到一个密钥表 

使用 kadminktadd 命令来添加某项服务授权对象到一个密钥表。

"如何添加某项服务授权对象到一个 keytab"

从一个密钥表去除某项服务授权对象 

使用 kadminktremove 命令来从一个密钥表去除某项服务。

"从一个密钥表如何去除某项服务授权对象"

显示一个密钥表中的密钥列表 (授权对象) 

使用 ktutil 命令来显示一个密钥表中的密钥列表。

"如何显示一个密钥表中的密钥列表 (授权对象)"

在一个主机上暂时为某项服务禁用鉴别 

本步骤是在一个主机上暂时为某项服务禁用鉴别的一个快捷方式,且不必拥有 kadmin 特权。在使用 ktutil 来从服务器的密钥表删除服务授权对象之前,请将原来的密钥表复制到一个临时位置。当您想要再次启用服务时,请将原来的密钥表复制回去。

"如何在一个主机上暂时为某项服务禁用鉴别"

如何添加某项服务授权对象到一个 keytab

  1. 请确保授权对象业已存在于 Kerberos 数据库。

    请参见"如何查看授权对象的列表",了解更多的信息。

  2. 在需要将一个授权对象添加到其密钥表的主机上,变为超级用户。

  3. 启动 kadmin 命令。


    # /usr/krb5/sbin/kadmin
    
  4. 通过使用 ktadd 命令,添加一个授权对象到一个密钥表。


    kadmin: ktadd [-k keytab] [-q] [授权对象 | -glob principal_exp]

    -k keytab

    指定密钥表文件。默认情况是,/etc/krb5/krb5.keytab 被使用。

    -q

    显示不太冗余的信息。 

    授权对象

    要添加到密钥表的授权对象。您可以添加下列服务授权对象: host, root, nfs, 和 ftp

    -glob principal_exp

    与授权对象表达式匹配的所有的授权对象均被添加到密钥表。用于授权对象表达式的规则与 kadminlist_principals 命令相同。

  5. 退出 kadmin 命令。


    kadmin: 退出
    

示例-添加某项服务授权对象到一个 keytab

下列示例添加 kadmin/adminkadmin/changepw 授权对象到一个主 KDC 的密钥表。针对该示例,密钥表文件必须是在 kdc.conf 文件中所指定的一个文件。


kdc1 # /usr/krb5/bin/kadmin.local 
kadmin.local:ktadd -k /etc/krb5/kadm5.keytab kadmin/admin kadmin/changepw
授权对象 kadmin/admin@ACME.COM 的条目, kvno 为 3, 加密类型为 DES-CBC-CRC
 被添加到密钥表 WRFILE:/etc/krb5/kadm5.keytab。
授权对象 kadmin/changepw@ACME.COM 的条目,kvno 为 3, 加密类型为 DES-CBC-CRC 
 被添加到密钥表 WRFILE:/etc/krb5/kadm5.keytab。 
kadmin.local: 退出

下列示例添加 denverhost授权对象到 denver 的密钥表文件,因而 denver 的网络服务可以通过 KDC 加以鉴别。


denver # /usr/krb5/bin/kadmin
kadmin: ktadd host/denver@acme.com@ACME.COM
kadmin: 授权对象 host/denver@acme.com@ACME.COM 的条目,
 kvno 为 2,
  加密类型为 DES-CBC-CRC 被添加到密钥表 WRFILE:/etc/krb5/krb5.keytab。kadmin: 退出

从一个密钥表如何去除某项服务授权对象

  1. 在带有某项必须从其密钥表去除的服务授权对象的主机上,变为超级用户。

  2. 启动 kadmin 命令。


    # /usr/krb5/bin/kadmin
    
  3. 可选。如要显示密钥表中的当前的授权对象的列表 (密钥), 请使用 ktutil 命令。

    请参见"如何显示一个密钥表中的密钥列表 (授权对象)",了解详细的操作指示。

  4. 通过使用 ktremove 命令,从一个密钥表去除一个授权对象。


    kadmin: ktremove [-k keytab] [-q] 授权对象 [kvno | 所有 | 旧的 ]

    -k keytab

    指定密钥表文件。默认情况是,/etc/krb5/krb5.keytab 被使用。

    -q

    显示不太冗余的信息。 

    授权对象

    要从密钥表去除的授权对象。 

    kvno

    为所指定的其 kvno (密钥版本号码) 与 kvno 相匹配的授权对象去除所有条目。

    all

    为所指定的授权对象去除所有条目。 

    old

    为所指定的授权对象去除所有条目,带有最高 kvno 的授权对象除外。 

  5. 退出 kadmin 命令。


    kadmin: 退出
    

示例-从一个密钥表去除某项服务授权对象

下列示例从 denver 的密钥表文件去除 denverhost 授权对象。


denver # /usr/krb5/bin/kadmin
kadmin: ktremove  host/denver.acme.com@ACME.COM
kadmin: 授权对象 host/denver.acme.com@ACME.COM 的条目,
 kvno 为 3
   已从密钥表去除 WRFILE:/etc/krb5/krb5.keytab。 
kadmin: 退出

如何显示一个密钥表中的密钥列表 (授权对象)

  1. 借助密钥表,在主机上变为超级用户。


    注意:

    尽管您可以创建其它用户所拥有的密钥表,但密钥表的默认的位置要求有 root 所有权。


  2. 启动 ktutil 命令。


    # /usr/krb5/bin/ktutil
    
  3. 通过使用 read_kt命令,将密钥表读入密钥列表缓冲区。


    ktutil: read_kt  keytab
    
  4. 通过使用 list 命令,显示密钥列表缓冲区。


    ktutil: 列表
    

    当前的密钥列表缓冲区显示出来。

  5. 退出 ktutil 命令。


    ktutil: 退出
    

示例-显示一个密钥表中的密钥列表 (授权对象)

下列示例显示 denver 主机上 /etc/krb5/krb5.keytab 文件中的密钥列表。


denver # /usr/krb5/bin/ktutil
    ktutil: read_kt /etc/krb5/krb5.keytab 
    ktutil: list
slot KVNO Principal ---- ---- ---------------------------------------   
   1    5 host/denver@ACME.COM
     ktutil: 退出

如何在一个主机上暂时为某项服务禁用鉴别

您有时可能需要在一个网络应用程序服务器上暂时为某项服务,诸如 rloginftp, 禁用鉴别机制。例如,在进行维护过程中,您可能想要阻止用户登录到一个系统。 ktutil 命令通过从服务器的密钥表去除服务授权对象,使您可以做到这一点,而无需 kadmin 特权。如要再次启用鉴别,所有需要您做的就是将您所保存的原来的密钥表复制回到其原来的位置。


注意:

大多数的服务默认设置为要求鉴别起作用。如果并非如此,则服务将依旧起作用,即使您为服务禁用鉴别。


  1. 借助密钥表,在主机上变为超级用户。


    注意:

    尽管您可以创建其它用户所拥有的密钥表,但密钥表的默认的位置要求有 root 所有权。


  2. 将当前的密钥表保存到一个临时文件。

  3. 启动 ktutil 命令。


    # /usr/krb5/bin/ktutil
    
  4. 通过使用 read_kt命令,将密钥表读入密钥列表缓冲区。


    ktutil: read_kt  keytab
    
  5. 通过使用 list 命令,显示密钥列表缓冲区。


    ktutil: 列表
    

    当前的密钥列表缓冲区显示出来。请注意您想禁用的服务的槽口号码。

  6. 如要暂时禁用一个主机的服务,请通过使用 delete_entry 命令,从密钥列表缓冲区去除具体服务授权对象。


    ktutil: delete_entry slot_number
    

    slot_number

    想要删除的服务授权对象的槽口号码,这是通过 list 命令加以显示的。

  7. 通过使用 write_kt命令,将密钥列表缓冲区写到密钥表。


    ktutil: write_kt  keytab
    
  8. 退出 ktutil 命令。


    ktutil: 退出
    
  9. 当您想要再次启用服务时,请将临时 (原来的) keytab 复制回到其原来的位置。

示例-在一个服务器上暂时禁用某项服务

下列示例暂时禁用denver 服务器上的 host 服务。如要在 denver 上恢复启用服务器服务,您要将 krb5.keytab.temp 文件复制到 /etc/krb5/krb5.keytab 文件。


denver # cp /etc/krb5/krb5.keytab /etc/krb5/krb5.keytab.temp
denver # /usr/krb5/bin/ktutil
    ktutil:read_kt /etc/krb5/krb5.keytab
    ktutil:list
slot KVNO Principal ---- ---- ---------------------------------------
    1    8 root/denver@ACME.COM
    2    5 host/denver@ACME.COM 
    ktutil:delete_entry 2
    ktutil:list
slot KVNO Principal ---- ---- --------------------------------------
    1    8 root/denver@ACME.COM 
    ktutil:write_kt /etc/krb5/krb5.keytab 
    ktutil:退出