Sun 企业鉴别机制指南

管理 Kerberos 数据库

Kerberos 数据库是 Kerberos 的主干,必须加以妥善维护。本节提供一些关于如何管理 Kerberos 数据库的过程,诸如备份和重贮数据库,设置并行传播,以及管理贮藏文件。起始设置数据库的步骤可以"如何配置一个主 KDC" 中找到。

备份和传播 Kerberos 数据库

将 Kerberos 数据库从主 KDC 传播到从 KDC 是其中一个最为重要的配置任务。如果传播发生得不够经常,主 KDC 和从 KDC 就会失去同步,因而如果主 KDC 关闭,从 KDC 将没有最新的数据库信息。另外,如果出于负载平衡的目的,一个从 KDC 业已配置为一个主 KDC,则将该从 KDC 用作主 KDC 的客户机将没有最新的信息。因此,基于您更改 Kerberos 数据库的频繁程度,确保传播发生得足够经常是十分重要的。

您在配置主 KDC 时,请将一个 cron 任务中的 kprop_script 设置为自动将 Kerberos 数据库备份到 /var/krb5/slave_datatrans 转储文件并将其传播到从 KDC。但是,与任何文件一样, Kerberos 数据库可能会毁坏。如果这在其中一个从 KDC 上发生,则您可能会根本注意不到,因为数据库的下一次自动传播会安装一个刷新副本。然而,如果这是发生在主 KDC 上,则在下一次传播过程中,已毁坏数据库被传播到所有的从 KDC。并且,已毁坏的备份复写主 KDC 上的前一未毁坏的备份文件。

因为在这种情况下没有任何 "安全"的备份副本,您还应当设置一个 cron 任务来周期性地将 slave_datatransdump 文件复制到另一位置,或者通过使用kdb5_utildump 命令,创建另一独立的备份副本。然后,如果您的数据库被毁坏,您就可以通过使用 kdb5_utilload 命令,重贮主 KDC 上的最近的备份。

另外需要注意的重要一点就是,因为数据库转储文件包含授权对象密钥,您必须保护该文件,使其免受未授权用户的访问 (默认情况是,只有作为 root 才有对数据库转储文件的读取/写入许可)。这包括只能使用 kprop 命令来传播数据库转储文件,以便为所传播的数据加密。另外, kprop 只将数据传播到从 KDC,这就将偶然把发送数据库转储到未授权的主机的可能性降至最低。


小心:小心:

如果 Kerberos 数据库是在其业已传播之后得到更新的,且此后在下一次传播之前数据库遭到毁坏,则从 KDC 将不包含更新: 更新将丢失。因为这一情况,如果您在一次正常计划的传播之前,将重要的更新添加到数据库,则您应当手动传播数据库,以避免数据损失。


kpropd.acl 文件

KDC 上的 kpropd.acl 文件提供了主机授权对象名称的一个列表,每行一个名称,指定 KDC 可以通过传播机制从其收到一个经过更新的数据库的系统。如果主 KDC 被用来传播所有的从 KDC,则每个从 KDC 上的 kpropd.acl 文件只需要包含主 KDC 的主机授权对象名称。

然而,本指南中的 SEAM 安装和后续的配置步骤指示您将同一 kpropd.acl 文件添加到主 KDC 和从 KDC。该文件包含所有的 KDC 主机授权对象名称。该配置允许您从任意的 KDC 进行传播,以防备传播 KDC 暂时变为不可用。而且,在所有的 KDC 上保留一个相同的副本,使得维护起来较为容易。

kprop_script 命令

kprop_script 命令使用 kprop 命令将 Kerberos 数据库传播到其它的 KDC。 (如果 kprop_script 是在一个从 KDC 上运行的,则其将从 KDC 的副本 Kerberos 数据库传播到其它的 KDC。) kprop_script 接受主机名的一个列表作为变元,其间用空格隔开,表示所要传播的 KDC。

kprop_script 运行时,将 Kerberos 数据库的一个备份创建到 /var/krb5/slave_datatrans 文件,并将该文件复制到所指定的 KDC。 Kerberos 数据库被锁定,直到传播结束。

如何备份 Kerberos 数据库

  1. 在主 KDC 上变为超级用户。

  2. 通过使用 kdb5_utildump 命令,备份 Kerberos 数据库。


    # /usr/krb5/sbin/kdb5_util dump [-verbose] [-d dbname] [filename [principals...]]

    -verbose

    打印每个正要备份的授权对象和策略的名称。 

    dbname

    要备份的数据库的名称。请注意, ".db" 被追加到所指定的任意数据库名称,且可以为文件指定一个绝对路径。如果未指定 -d 选项,则默认的数据库名称就是 /var/krb5/principal,而其实际上变为 /var/krb5/principal.db

    filename

    用来备份数据库的文件。可以为文件指定一个绝对路径。如果您不指定一个文件,则将数据库转储到标准的输出。 

    principal

    要备份的一个或多个授权对象的一个列表 (用一个空格隔开)。您必须使用完全合格的授权对象名称。如果您不指定授权对象,则整个数据库得到备份。  

示例-备份 Kerberos 数据库

下列示例将 Kerberos 数据库备份到一个称为 dumpfile 的文件。因为指定了 -verbose 选项,随着得到备份,每个授权对象被打印出来。


# kbd5_util dump -verbose dumpfile 
kadmin/kdc1.eng.acme.com@ENG.ACME.COM 
krbtgt/eng.acme.com@ENG.ACME.COM 
kadmin/history@ENG.ACME.COM 
pak/admin@ENG.ACME.COM 
pak@ENG.ACME.COM
changepw/kdc1.eng.acme.com@ENG.ACME.COM
#

下列示例从 Kerberos 数据库备份 pakpak/admin 授权对象。


# kdb5_util dump -verbose dumpfile pak/admin@ENG.ACME.COM pak@ENG.ACME.COM
pak/admin@ENG.ACME.COM
pak@ENG.ACME.COM
#

如何重贮 Kerberos 数据库

  1. 在主 KDC 上变为超级用户。

  2. 通过使用 kdb_utilload 命令,重贮 Kerberos 数据库。


    # /usr/krb5/sbin/kdb5_util load [-verbose] [-d dbname] [-update] [filename] 

    -verbose

    打印每个正要重贮的授权对象和策略的名称。 

    dbname

    要重贮的数据库的名称。请注意, ".db" 被追加到所指定的任意数据库名称,且可以为文件指定一个绝对路径。如果未指定 -d 选项,则默认的数据库名称就是 /var/krb5/principal,而其实际上变为 /var/krb5/principal.db

    -update

    更新现有的数据库;否则就创建一个新的数据库而复写现有的数据库。 

    filename

    用来从其重贮数据库的文件。可以为文件指定一个绝对路径。 

示例-重贮 Kerberos 数据库

下列示例从 dumpfile 文件,重贮称为 database1.db 的数据库到当前的目录。因为 -update 选项未指定,通过重贮创建了一个新的数据库。


# kdb5_util load -d database1 dumpfile

如何手动将 Kerberos 数据库传播到从 KDC

本过程显示您如何使用 kprop 命令来传播 Kerberos 数据库。如果您需要在周期性的 cron 任务以外使一个从 KDC 与主 KDC 同步,就可以使用该命令。而且,与 kprop_script 有所不同,您可以使用 kprop 来传播当前的数据库备份,而无须首先制作数据库的一个新的备份。

  1. 在主 KDC 上变为超级用户。

  2. (可选) 通过使用 kdb5_util 命令来备份数据库。


    # /usr/krb5/sbin/kdb5_util dump /var/krb5/slave_datatrans
    
  3. 通过使用 kprop命令,将数据库传播到一个从 KDC。


    # /usr/krb5/lib/kprop -f /var/krb5/slave_datatrans slave_KDC
    

如果您想备份数据库并在周期性的 cron 任务以外将其传播到一个从 KDC,您也可以使用如下 kprop_script 命令:


# /usr/krb5/lib/kprop_script slave_KDC

设置并行传播

在大多数的情况下,主 KDC 被专门用来将其数据库传播到从 KDC。然而,如果您的站点拥有许多从 KDC,则您可能会需要考虑对传播进程进行加载分担,即并行传播

并行传播允许具体的从 KDC 与主 KDC 分担传播义务。这就使得传播较快地进行,且减轻主 KDC 的工作。

例如,比方您的站点拥有一个主 KDC 和六个从 KDC (见 图形 3-2),其中,从-1从-3,构成了一个逻辑组,而 从-4从-6,构成了另一逻辑组。为了设置并行传播,您可以让主 KDC 传播数据库到 从-1从-4,而那些从 KDC 又可以再次将数据库传播到其组中的各个从 KDC。

图形 3-2 并行传播配置示例

Graphic

如何设置并行传播

这并非一个详细的步进过程,而是用来启用并行传播的配置步骤的一个高级列表。

  1. 在主 KDC 上,更改其 cron 任务中的 kprop_script 条目,使其只包括针对将要进行后继传播的从 KDC 的变元 (传播从 KDC)。

  2. 在每个传播从 KDC 上,将一个 kprop_script 条目添加到其 cron 任务,其中必须包括要传播的从 KDC 的变元。为了能够成功地进行并行传播, cron 任务应当设置为在传播从 KDC 自身得到所传播的新的数据库之后再运行。


    注意:

    确定一个传播从 KDC 得到传播要花费多长时间,这取决于诸如网络带宽和数据库大小等因素。


  3. 在每个从 KDC 上,设置要传播的适当的许可。方法是将传播 KDC 的主机授权对象名称添加到其 kpropd.acl 文件。

示例 - 设置并行传播

使用 图形 3-2 中的示例,主 KDC 的 kprop_script 条目会看似如下:

10 3 * * * /usr/krb5/lib/kprop_script slave-1.acme.com slave-4.acme.com

从-1kprop_script 条目会看似如下 (请注意,从 KDC 上的传播在其得到主 KDC 传播一小时之后开始):

10 4 * * * /usr/krb5/lib/kprop_script slave-2.acme.com slave-3.acme.com

传播从 KDC 上的 kpropd.acl 文件则必需包含下面的条目:

host/master.acme.com@ACME.COM

将要得到 从-1 的传播的从 KDC 上的kpropd.acl 文件则必需包含下面的条目:

host/slave-1.acme.com@ACME.COM

管理贮藏文件

贮藏文件包含用于 Kerberos 数据库的主密钥,这是当您创建一个 Kerberos 数据库时自动创建的。如果贮藏文件已遭到毁坏,您可以使用 kdb5_util(1M)stash 命令来更换已毁坏的文件。您唯一需要去除一个贮藏文件的时间,就是在借助kdb5_utildestroy 命令去除 Kerberos 数据库之后。因为贮藏文件并非自动和数据库一起去除,您必须在完成清除之后将其去除。

如何去除一个贮藏文件

  1. 在包含贮藏文件的 KDC 上变为超级用户。

  2. 去除贮藏文件。


    # rm stash_file
    

    stash_file

    到贮藏文件的路径。默认情况是,贮藏文件位于 /var/krb5/.k5.realm

如果您需要重新创建贮藏文件,您可以使用 kdb5_util 命令的 -f 选项。