Sun 企业鉴别机制指南

第 3 章 配置 SEAM

本章提供用于 KDC 服务器、网络应用程序服务器、 NFS 服务器和 SEAM 客户机的配置过程。其中的许多过程要求 root 访问,因而它们应当为系统管理员或高级用户所使用。跨区配置过程及其它的与 KDC 服务器有关的主题也得到论述。

SEAM 配置任务图

配置进程的有些部分有赖于其它的部分,必须以一个具体的顺序加以进行。这些过程经常用于建立使用 SEAM 所要求的服务。其它过程则不然,可以在适当的情况下进行。下表显示的是一个为 SEAM 安装建议的顺序。

表 3-1 前几步: SEAM 配置顺序

任务 

描述 

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

1. 规划您的 SEAM 安装 

 在开始软件安装进程之前,请考虑配置事宜并就其作出决定。第 2 章,规划 SEAM

2. (可选) 安装 NTP 

 为了让 SEAM 正常工作,区域中所有系统上的时钟必须保持同步。 "使 KDC 和 SEAM 客户机之间时钟同步"

3. (可选) 运行 SEAM 预配置过程 

 如要简化带有许多主机的站点的安装,可以运行该过程,将其中许多安装信息存储在一个 NFS 服务器上。然后就可以在安装过程中使用该信息了。SEAM 安装和发行说明

4. 配置主 KDC 服务器 

 用来为一个区域配置和建立主 KDC 服务器和数据库的步骤。"如何配置一个主 KDC"

5. (可选) 配置一个从 KDC 服务器 

 用来为一个区域配置和建立一个从 KDC 服务器的步骤。"如何配置一个从 KDC"

6. (可选) 增加 KDC 服务器上的安全 

 用来防范 KDC 服务器上的安全漏洞的步骤。"如何为 KDC 服务器限定访问"

7. (可选) 配置可交换 KDC 服务器 

 遵照执行本过程中的步骤来简化交换主 KDC 和一个从 KDC 的任务。"如何配置一个可交换的从 KDC"

一旦所要求的步骤得以完成,就可以在需要时使用下列过程。

表 3-2 后几步: 附加的 SEAM 任务

任务 

描述 

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

配置跨区鉴别 

 用来启用从一个区域到另一区域的通信的步骤。"配置跨区鉴别"

配置 SEAM 应用程序服务器 

用来使一个服务器使用 Kerberos 鉴别来支持各种服务的步骤,诸如 ftptelnetrsh"配置 SEAM 网络应用程序服务器"

配置 SEAM 客户机 

 用来使一个客户机使用各种 SEAM 服务的步骤。"配置 SEAM 客户机"

配置 SEAM NFS 服务器 

 用来使一个服务器共享一个需要 Kerberos 鉴别的文件系统的步骤。"配置 SEAM NFS 服务器"

增加一个应用程序服务器上的安全 

 用来通过将访问限定为已鉴别事务,从而增加一个应用程序服务器上的安全的步骤。 "如何只启用 Kerberized 应用程序"

配置 KDC 服务器

安装SEAM 软件之后,您必须配置 KDC 服务器。配置一个主 KDC 和至少一个从 KDC,可以提供发放资格的服务。这些资格是 SEAM 的基础,因而首先必须安装 KDC,然后在尝试进行其它的任务。

一个主 KDC 和一个从 KDC 之间的最为显著的区别就是,只有主 KDC 可以处理数据库管理请求。例如,更改一个口令或添加一个新的授权对象必须在主 KDC 上进行。然后这些变更就可以被传播到从 KDC。从 KDC 和主 KDC 两者均生成资格;这就提供冗余,以备主 KDC 无法响应。

如何配置一个主 KDC

为了提供一个完整的示例,假设您没有运行预配置过程。如果您在安装软件时使用了预配置过程,本过程中所包含的文件,其中许多就不需要进行编辑了;然而,您应当审查文件内容。

在本过程中,使用下列配置参数:

  1. 配置一个主 KDC 的先决条件。

    本过程要求已安装有主 KDC 软件。另外, DNS 必须正在运行。请参见 "交换主 KDC 和从 KDC",了解主 KDC 为可交换的情况下的具体的命名操作指示。

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

  3. 编辑 Kerberos 配置文件 (krb5.conf)。

    您必须更改区域名和服务器的名称。请参见 krb5.conf(4) 手册页,获得对该文件的一个全面的描述。如果您是使用配置文件安装的 SEAM 软件,则请验证文件的内容,而不是对其进行编辑。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
            }

    在本示例中,针对 default_realmkdcadmin_server,和所有 domain_realm 条目的各行均被更改。包含有针对 default_realm 的一行,以使示例完整完整,但如果区域和域名等效的话,安装进程就不创建该条目。另外,定义 help_url 的一行也被编辑。

  4. 编辑 KDC 配置文件 (kdc.conf)。

    您必须更改区域名。请参见 kdc.conf(4) 手册页,获得对该文件的一个全面的描述。如果您是使用配置文件安装的 SEAM 软件,则请验证文件的内容,而不是对其进行编辑。


    kdc1 # cat /etc/krb5/kdc.conf
    [kdcdefaults]
            kdc_ports = 88,750
    
    [realms]
            ACME.COM= {
                    profile = /etc/krb5/krb5.conf
                    database_name = /var/krb5/principal
                    admin_keytab = /var/krb5/kadm5.keytab
                    acl_file = /var/krb5/kadm5.acl
                    kadmind_port = 749
                    max_life = 8h 0m 0s
                    max_renewable_life = 7d 0h 0m 0s
            }

    在本示例中,realms 一节中的区域名定义被更改。

  5. 使用 kdb5_util 来创建 KDC 数据库。

    kdb5_util 命令创建 KDC 数据库,且在用 -s 选项时,创建一个贮藏文件,用来在 kadmindkrb5kdc 守候程序启动之前,向其自身鉴别 KDC 。


    kdc1 # /usr/krb5/sbin/kdb5_util create -r ACME.COM -s
    为区域 'ACME.COM' 初始化数据库'/var/krb5principal' 
    将提示您录入数据库主口令。
    您切记不要忘记该口令。
    录入 KDC 数据库主密钥: <键入密钥>
    	重新录入 KDC 数据库主密钥来验证: <再次将其键入>
    

    如果区域名与服务器名称空间域名等效的话,则 -r 选项后面跟有区域名,这并不是必须的。

  6. 编辑 Kerberos 访问控制列表文件 (kadm5.acl)。

    一旦植有数据,/etc/krb5/kadm5.acl 就应当包含所有被允许来管理 KDC 的授权对象的名称。所添加的第一个条目可能会看似如下所示:


    kws/admin@ACME.COM   *

    该条目给予 ACME.COM 区域中的 kws/admin 授权对象修改 KDC 中的授权对象或策略的能力。默认的安装包括一个"*",用于匹配所有的 admin 授权对象。这可能会是一个安全隐患,因而包括所有 admin 授权对象的一个列表则较为安全。

  7. 启动 kadmin.local

    以下的分步骤创建 SEAM 所使用的授权对象。


    kdc1 # /usr/krb5/sbin/kadmin.local
    kadmin.local: 
    1. 使用 kadmin.local 来将管理授权对象添加到数据库。

      您可以根据需要来添加 admin 授权对象。您必须添加至少一个 admin 授权对象,才能完成 KDC 配置进程。对于本示例,添加了一个 kws/admin 授权对象。您可以用一个适当的授权对象名称来替换 "kws"。


      kadmin.local: addprinc kws/admin
      录入授权对象 kws/admin@ACME.COM 的口令: <键入口令>
      重新录入授权对象 kws/admin@ACME.COM 的口令: <再次将其键入>
      授权对象 "kws/admin@ACME.COM" 被创建。 
      kadmin.local: 
    2. 使用 kadmin.local,为 kadmin 创建一个密钥表文件。

      该命令序列创建一个特殊的密钥表文件,其中带有针对 kadminchangepw 的授权对象条目。这些授权对象是 kadmind 服务所必需的。


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

      您业已为下列各步骤添加了所有所要求的授权对象。


      kadmin.local: 退出
      
  8. 启动 Kerberos 守候程序。


    kdc1 # /etc/init.d/kdc startkdc1 # 
    /etc/init.d/kdc.master start
    
  9. 启动 kadmin

    此时此刻,您可以使用 SEAM 管理工具来添加授权对象。命令行示例是出于简洁目的而显示的。您必须借助您在本过程的早些时候所创建的 admin 授权对象名称中的一个进行登录。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: 
    1. 使用 kadmin 来创建主 KDC 主机授权对象。

      主机授权对象为 Kerberized 应用程序 (诸如 klistkprop) 以及 Kerberized 服务 (诸如 ftptelnet) 所使用。


      kadmin: addprinc -randkey host/kdc1.acme.com
      授权对象 "host/kdc1.acme.com@ACME.COM" 被创建。 
      kadmin: 
    2. 可选: 使用 kadmin 来创建主 KDC root 授权对象。

      该授权对象用于已鉴别的 NFS 装配,因而在一个主 KDC 上可能并不是必需的。


      kadmin: addprinc root/kdc1.acme.com
      录入授权对象 root/kdc1.acme.com@ACME.COM 的口令: <键入口令>
      重新录入授权对象 root/kdc1.acme.com@ACME.COM 的口令: <再次将其键入>
      授权对象 "root/kdc1.acme.com@ACME.COM" 被创建。 
      kadmin: 
    3. 将主 KDC 主机授权对象添加到主 KDC 密钥表文件。

      将主机授权对象添加到密钥表文件,允许自动使用该授权对象。


      kadmin: ktadd host/kdc1.acme.com
      kadmin: 授权对象 host/kdc1.acme.com 的条目,
       kvno 为 3,加密类型为 DES-CBC-CRC 被添加到密钥表  
       WRFILE:/etc/krb5/krb5.keytab 
      kadmin: 退出
      
    4. 退出 kadmin


      kadmin: 退出
      
  10. 为每个 KDC 添加一个条目到传播配置文件 (kpropd.acl)。

    请参见 kprop(1M) 手册页,获得对该文件的一个全面的描述。如果您是使用配置文件安装的 SEAM 软件,则请验证文件的内容,而不是对其进行编辑。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.acme.com@ACME.COM
    host/kdc2.acme.com@ACME.COM
  11. 可选: 使用 NTP 或另一时钟同步机制来使主 KDC 时钟同步。

    安装和使用 NTP 不是必需的,但是每个时钟必须在 krb5.conf 文件的 libdefaults 一节中所定义的默认的时间范围之内,以便鉴别获得成功。请参见 "使 KDC 和 SEAM 客户机之间时钟同步",了解关于 NTP 的信息。

如何配置一个从 KDC

在本过程中,一个名为 kdc3 的新的从 KDC 得到配置。为了提供一个完整的示例,假设您在安装软件时没有使用预配置过程,或者在运行预配置过程时未将 kdc3 定义为一个从 KDC。如果您使用了该过程并将 kdc3 标识为一个从 KDC,则本过程中所包含的文件,其中许多就不需要进行编辑,但是您应当审查文件的内容。

本过程使用下列配置参数:

  1. 配置一个从 KDC 的先决条件。

    本过程要求主 KDC 业已得到配置且 SEAM 从 KDC 软件业已安装在 kdc3 上。请参见 "交换主 KDC 和从 KDC",了解从 KDC 需要可交换的情况下的具体的操作指示。

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

  3. 在主 KDC 上: 启动 kadmin

    您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: 
    1. 在主 KDC 上: 将从主机授权对象添加到数据库,如果尚未这样作的话,方法是使用 kadmin

      为了让从 KDC 能够工作,它必须拥有一个主机授权对象。


      kadmin: addprinc -randkey host/kdc3.acme.com授权对象 "host/kdc3@ACME.COM" 被创建。 
      kadmin:
    2. 可选: 在主 KDC 上,使用 kadmin 来创建从 KDC root 授权对象。

      只有在从 KDC 将通过 NFS 装配一个已鉴别的文件系统时才需要这一授权对象。


      kadmin: addprinc root/kdc3.acme.com
      录入授权对象 root/kdc3.acme.com@ACME.COM 的口令: <键入口令>
      重新录入授权对象 root/kdc3.acme.com@ACME.COM 的口令: <再次将其键入>
      授权对象 "root/kdc3.acme.com@ACME.COM" 被创建。 
      kadmin: 
    3. 退出 kadmin


      kadmin: 退出
      
  4. 在主 KDC 上: 编辑 Kerberos 配置文件 (krb5.conf)。

    您必须为每个从 KDC 添加一个条目。请参见 krb5.conf(4) 手册页,了解对该文件的一个全面的描述。 如果您在运行预配置过程时将 kdc3 定义为一个从服务器,则请验证文件的内容,而不是对其进行编辑。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    kdc = kdc3.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #        
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
    
  5. 在主 KDC 上: 为每个从 KDC 添加一个条目到数据库传播配置文件 (kpropd.acl)。

    请参见 kprop(1M) 手册页,了解对对该文件的一个全面的描述。如果您在运行预配置过程时将 kdc3 定义为一个从服务器,则请验证文件的内容,而不是对其进行编辑。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.acme.com@ACME.COM
    host/kdc2.acme.com@ACME.COM
    host/kdc3.acme.com@ACME.COM
    
  6. 在所有的从 KDC 上: 从主 KDC 服务器复制 KDC 管理文件。

    需要在所有的从 KDC 上遵照执行这一步骤,因为主 KDC 服务器拥有每个 KDC 服务器所需要的更新过的信息。 如果您在运行预配置过程时将 kdc3 定义为一个从服务器,则请验证文件的内容,而不是进行复制。 您可以使用 ftp 或一个类似的传送机制来从主 KDC 抓取下列文件的副本:

    • /etc/krb5/krb5.conf

    • /etc/krb5/kdc.conf

    • /etc/krb5/kpropd.acl

  7. 在新的从 KDC 上: 使用 kadmin,将从 KDC 的主机授权对象添加到从 KDC 的密钥表文件。

    您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。该条目将使得 kprop 和其它的 Kerberized 应用程序能够工作。


    kdc3 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: ktadd host/kdc3.acme.com
    kadmin: 授权对象 host/kdc3.acme.com 的条目,
     kvno 为 3,加密类型为 DES-CBC-CRC 被添加到密钥表
     WRFILE:/etc/krb5/krb5.keytab 
    kadmin: 退出
    
  8. 在主 KDC 上: 将从 KDC 名称添加到 cron 任务,从而通过运行 crontab -e,自动运行备份。

    将每个从 KDC 服务器的名称添加在 kprop_script 行的末尾。 如果您在运行预配置过程时将 kdc3 定义为一个从服务器,则请验证文件的内容,而不是对其进行编辑。


    10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.com kdc3.acme.com
    

    您可能还想更改备份的时间。这一配置在每天的上午 3:10 启动备份进程。

  9. 在主 KDC 上: 使用 kprop_script 来备份和传播数据库。

    如果数据库已有一个备份副本,则没有必要来完成另一次备份。请参见 "如何手动将 Kerberos 数据库传播到从 KDC",了解进一步的操作指示。


    kdc1 # /usr/krb5/lib/kprop_script kdc3.acme.com
    数据库传播到 kdc3.acme.com: 已成功
  10. 在新的从 KDC 上: 使用 kdb5_util 来创建一个贮藏文件。


    kdc3 # /usr/krb5/sbin/kdb5_util stash
    kdb5_util: 在读取主密钥 kdb5_util 时,
    无法找到/读取所存储的主密钥: 警告: 在没有主密钥的情况下继续
    
    请录入 KDC 数据库主密钥: <键入密钥>
    
  11. 在新的从 KDC 上: 启动 KDC 守候程序 (krb5kdc)。


    kdc3 # /etc/init.d/kdc start
    
  12. 可选: 在新的从 KDC 上,使用 NTP 或另一时钟同步机制来使主 KDC 时钟同步。

    安装和使用 NTP 不是必需的,但是每个时钟必须在 krb5.conf 文件的 libdefaults 一节中所定义的默认的时间范围之内,以便鉴别获得成功。请参见 "使 KDC 和 SEAM 客户机之间时钟同步",了解关于 NTP 的信息。

配置跨区鉴别

您拥有多个方法来将区域连接在一起,以便一个区域中的用户可以在另一区域中得到鉴别。通常这是通过建立一个供两个区域之间共享的密钥来实现的。区域的关系既可以是分级的,也可以是定向的 (请参见 "区域分级结构")。

如何建立分级跨区鉴别

对于本示例,我们将使用两个区域,ENG.EAST.ACME.COMEAST.ACME.COM。跨区鉴别将在两个方向上得到建立。本过程必须在两个区域中的主 KDC 上完成。

  1. 建立分级跨区鉴别的先决条件。

    本过程要求每个区域的主 KDC 均已配置。如要全面测试本进程,就必须安装有多个客户机或从 KDC。

  2. 在第一个主 KDC 上变为 root

  3. 使用 kadmin,为两个区域创建具有票券授予权的票券服务授权对象。

    您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。


    # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: addprinc krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM
    录入授权对象 krgtgt/ENG.EAST.ACME.COM@EAST.ACME.COM 的口令: <键入口令>
    kadmin: addprinc krbtgt/EAST.ACME.COM@ENG.EAST.ACME.COM
    录入授权对象 krgtgt/EAST.ACME.COM@ENG.EAST.ACME.COM 的口令: <键入口令>
    kadmin: 退出
    

    注意:

    为每个服务授权对象录入的口令,在两个 KDC 中必须是相同的;这意思是指,用于 krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM 的口令,在两个区域中必须一样。


  4. 将条目添加到 Kerberos 配置文件,以为每个区域定义域名 (krb5.conf)。


    # cat /etc/krb5/krb5.conf
    [libdefaults]
     .
     .
    [domain_realm]
            .eng.east.acme.com = ENG.EAST.ACME.COM
            .east.acme.com = EAST.ACME.COM
    

    在本示例中, ENG.EAST.ACME.COMEAST.ACME.COM 区域的域名得到定义。首先要包括子域,这一点很重要,因为文件是从上至下得到搜索的。

  5. 将 Kerberos 配置文件复制到本区域中的所有客户机。

    为了让跨区鉴别能够工作,所有系统 (其中包括从 KDC 及其它的服务器) 必须安装有新版本的 Kerberos 配置文件 (/etc/krb5/krb5.conf)。

  6. 在第二个区域中重复这些步骤。

如何建立直接的跨区鉴别

该示例使用两个区域: ENG.EAST.ACME.COMSALES.WEST.ACME.COM。跨区鉴别将在两个方向上得到建立。本过程必须在两个区域中的主 KDC 上完成。

  1. 建立直接的跨区鉴别的先决条件。

    本过程要求每个区域的主 KDC 均已配置。如要全面测试本进程,就必须安装与多个客户机或从 KDC。

  2. 在其中一个主 KDC 服务器上变为超级用户。

  3. 使用 kadmin,为两个区域创建具有票券授予权的票券服务授权对象。

    您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。


    # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: addprinc krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM
    录入授权对象
        krgtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM 的口令: <键入口令>
    kadmin: addprinc krbtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM
    录入授权对象
        krgtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM 的口令: <键入口令>
    kadmin: 退出
    

    注意:

    为每个服务授权对象录入的口令,在两个 KDC 中必须是相同的;这意思是指,用于 krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM 的口令,在两个区域中必须一样。


  4. 将条目添加到 Kerberos 配置文件,以定义到远程区域的直接路径 (kdc.conf)。

    该示例是针对 ENG.EAST.ACME.COM 区域中的客户机的。您交换区域名就可以在 SALES.WEST.ACME.COM 区域中获得适当的定义。


    # cat /etc/krb5/krb5.conf
    [libdefaults]
     .
     .
    [capaths]
        ENG.EAST.ACME.COM = {
            SALES.WEST.ACME.COM = .
        }
    
        SALES.WEST.ACME.COM = {
             ENG.EAST.ACME.COM = .
        }
    
  5. 将 Kerberos 配置文件复制到当前区域中的所有客户机。

    为了让跨区鉴别能够工作,所有系统 (其中包括从 KDC 及其它的服务器) 必须安装有新版本的 Kerberos 配置文件 (krb5.conf)。

  6. 为第二个区域重复这些步骤。

配置 SEAM 网络应用程序服务器

网络应用程序服务器是提供借助下列网络应用程序之一进行的访问的主机: ftprcprloginrshtelnet。只需进行几个步骤,就可以在一个服务器上启用这些命令的 SEAM 版本。

如何配置一个 SEAM 网络应用程序服务器

本过程使用下列配置参数:

  1. 配置一个应用程序服务器的先决条件。

    本过程要求主 KDC 业已配置。如要全面测试本进程,就必须安装有多个客户机。

  2. 安装 SEAM 客户机软件。

    SEAM 客户机软件必须得到安装。

  3. 可选: 安装 NTP 客户机或其它的时钟同步机制。

    请参见 "使 KDC 和 SEAM 客户机之间时钟同步",了解关于 NTP 的信息。

  4. 启动 kadmin

    使用 SEAM 管理工具来添加一个授权对象,这在 "如何创建一个新的授权对象" 有解释。下面的示例显示如何使用命令行来添加所要求的授权对象。您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: 
    1. 创建服务器的主机 授权对象。


      kadmin: addprinc -randkey host/boston.acme.com
      授权对象 "host/boston.acme.com" 被创建。 
      kadmin: 
    2. 可选: 为主机授权对象创建一个 root 授权对象。


      kadmin: addprinc root/boston.acme.com
      录入授权对象 root/boston.acme.com@ACME.COM 的口令: <键入口令>
      重新录入授权对象 root/boston.acme.com@ACME.COM 的口令: <再次将其键入>
      授权对象 "root/boston.acme.com@ACME.COM" 被创建。 
      kadmin: 
    3. 将服务器的 主机 授权对象添加到服务器的密钥表。

      如果 kadmin 命令没在运行,则请将其重新启动,所使用的命令类似于: /usr/krb5/bin/kadmin -p kws/admin


      kadmin: ktadd host/boston.acme.com
      kadmin: 授权对象 host/boston.acme.com 的条目,
       kvno 为 3,加密类型为 DES-CBC-CRC 被添加到密钥表 
       WRFILE:/etc/krb5/krb5.keytab 
      kadmin: 退出
      
    4. 退出 kadmin


      kadmin: 退出
      

配置 SEAM NFS 服务器

NFS 服务使用 UNIX UID 来识别一个用户,而无法直接使用授权对象。如要将授权对象翻译为一个 UID,则必须创建一个将用户授权对象映射到 UNIX UID 的资格表。下面的过程着重讨论配置一个 SEAM NFS 服务器,管理资格表以及为 NFS 装配的文件系统初始 Kerberos 安全模式所必需的任务。下表描述本节中所论述的任务。

表 3-3 配置 SEAM NFS 服务器任务图

任务 

描述 

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

配置一个 SEAM NFS 服务器 

 用来使一个服务器能够共享一个要求 Kerberos 鉴别的文件系统的步骤。"如何配置 SEAM NFS 服务器"

更改资格表的后端机制 

用来定义 gsscred 所使用的后端机制的步骤。."如何更改 gsscred 表的后端机制"

创建一个资格表 

 用来生成一个资格表的步骤。"如何创建一个资格表"

如何对将用户授权对象映射到 UNIX UID 的资格表进行更改。  

 用来更新资格表中的信息的步骤。"如何将单独一个条目添加到资格表"

借助 Kerberos 鉴别来共享一个文件系统 

 用来共享一个带有安全模式的文件系统,从而要求 Kerberos 鉴别的步骤。"如何设置一个带有多重 Kerberos 安全模式的安全 NFS 环境"

如何配置 SEAM NFS 服务器

本过程要求主 KDC 业已配置。如要全面测试本进程,您需要多个客户机。使用下列配置参数:

  1. 配置一个 SEAM NFS 服务器的先决条件。

    SEAM 客户机软件必须得到安装。

  2. 可选: 安装 NTP 客户机或其它的时钟同步机制。

    请参见 "使 KDC 和 SEAM 客户机之间时钟同步",了解关于 NTP 的信息。

  3. 启动 kadmin

    使用 SEAM 管理工具来添加一个授权对象,这在 "如何创建一个新的授权对象" 中有解释。下面的示例显示如何使用命令行来添加所要求的授权对象。您必须借助您在配置主 KDC 时所创建的 admin 授权对象名称中的一个进行登录。


    denver # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: 
    1. 创建服务器的NFS 服务授权对象。


      kadmin: addprinc -randkey nfs/denver.acme.com
      
      授权对象 "nfs/denver.acme.com" 被创建。 
      kadmin:
    2. 可选: 为 NFS 服务器创建一个 root 授权对象。


      kadmin: addprinc root/denver.acme.com
      录入授权对象 root/denver.acme.com@ACME.COM 的口令: <键入口令>
      重新录入授权对象 root/denver.acme.com@ACME.COM 的口令: <再次将其键入>
      授权对象 "root/denver.acme.com@ACME.COM" 被创建。 
      kadmin: 
    3. 将服务器的 NFS 服务授权对象添加到服务器的密钥表。


      kadmin: ktadd nfs/denver.acme.com
      kadmin: 授权对象 nfs/denver.acme.com 的条目,
       kvno 为 3,加密类型为 DES-CBC-CRC 被添加到密钥表  
       WRFILE:/etc/krb5/krb5.keytab 
      kadmin: 退出
      
    4. 退出 kadmin


      kadmin: 退出
      
  4. 创建 gsscred 表。

    请参见 "如何创建一个资格表",了解更多的信息。

  5. 使用 Kerberos 安全模式来共享 NFS 文件系统。

    请参见 "如何设置一个带有多重 Kerberos 安全模式的安全 NFS 环境",了解更多的信息。

  6. 在每个客户机上: 鉴别用户和 root 授权对象两者。

    请参见 "设置 Root 鉴别来装配 NFS 文件系统",了解更多的信息。

如何更改 gsscred 表的后端机制

  1. 在 NFS 服务器上变为超级用户。

  2. 编辑 /etc/gss/gsscred.conf 并更改机制。

    可以使用下列后端机制之一: filesxfn_filesxfn_nisxfn_nisplusxfn。其中每个机制的优势 "使用gsscred 表" 得到论述。

如何创建一个资格表

gsscred 资格表被 NFS 服务器用于将 SEAM 授权对象映射到一个 UID。为了让 NFS 客户机能够使用 Kerberos 鉴别,从一个 NFS 服务器装配文件系统,必须创建该表或使之可用。

  1. 在适当的服务器上变为超级用户。

    您从哪个服务器运行该命令,以及您运行命令时所采用的 ID,取决于被选择用来支持 gsscred 表的后端机制。对于除 xfn_nisplus 之外的所有机制,您必须变为 root

    如果您的后端机制是 ... 

    则 ... 

    files

    在 NFS 服务器上运行 

    xfn

    基于默认的 xfn 文件设定,选择主机

    xfn_files

    在 NFS 服务器上运行 

    xfn_nis

    在 NIS 主 KDC 上运行 

    xfn_nisplus

    哪里可更改 NIS+ 数据,就可以在哪里运行。  

  2. 可选: 如果 /var/fn 不存在,而您想使用 xfn 选项中的一个,就请创建一个初始 XFN 数据库。


    # fnselect files# 
    fncreate -t org -o org//
    
  3. 使用 gsscred 来创建资格表。

    命令借助 /etc/nsswitch.conf 中的 passwd 条目,从列出的所有来源收集信息。您可能会需要暂时去除 files 条目,如果您就不想要本地口令条目包含在资格表中的话。请参见 gsscred(1M) 手册页,了解更多的信息。


    # gsscred -m kerberos_v5 -a
    

如何将单独一个条目添加到资格表

本过程要求 gsscred 表业已安装在 NFS 服务器上。

  1. 在一个 NFS 服务器上变为超级用户。

  2. 使用 gsscred 来将一个条目添加到表。


    # gsscred -m [mech] -n [name] -u [uid] -a
    

    mech

    要使用的安全机制。 

    name

    用户的授权对象名称,如 KDC 中所定义的。 

    uid

    用户的 UID,如口令数据库中所定义的。 

    -a

    将 UID 添加到授权对象名称映射。 

示例-为资格表更改一个单独条目

下列示例为名为 sandy 的用户添加一个条目,该条目被映射到 UID 3736。 UID 如果没有包括在命令行上的话,就从口令文件进行抽取。


# gsscred -m kerberos_v5 -n sandy -u 3736 -a

如何设置一个带有多重 Kerberos 安全模式的安全 NFS 环境

  1. 在 NFS 服务器上变为超级用户。

  2. 编辑 /etc/dfs/dfstab 文件并将 sec= 选项连同所要求的安全模式添加到适当的条目。


    # share -F nfs -o [mode] [filesystem]
    

    mode

    共享时所要使用的安全模式。当使用多重安全模式时,列表中的第一个模式被 autofs 用作默认值。 

    filesystem

    到要共享的文件系统的路径。 

    试图从所命名的文件系统访问文件的所有的客户机,均要求 Kerberos 鉴别。如要完成访问文件,NFS 客户机上的用户授权对象和 root 授权对象两者均应得到鉴别。

  3. 检查以确保 NFS 服务正在服务器上运行。

    如果这是您启动过的第一个共享命令或第一套共享命令,则很有可能 NFS 守候程序没在运行。下面一套命令杀死各个守候程序并重新启动它们。


    # /etc/init.d/nfs.server stop
    # /etc/init.d/nfs.server start
    
  4. 可选: 如果正在使用 autofs,则请编辑 auto_master 数据,选择默认值以外的一个安全模式。

    如果您并非使用 autofs 来访问文件系统,或者安全模式的默认选择可以接受,则您无需遵照执行本过程。


    /home	  auto_home  -nosuid,sec=krbi
  5. 可选: 手动发出 mount 命令,使用一个非默认的模式来访问文件系统。

    另外,您也可以使用 mount 命令来指定安全模式,但是这没有利用自动装配器:


    # mount -F nfs -o sec=krb5p /export/home
    

示例-共享一个带有一个 Kerberos 安全模式的文件系统

该示例要求 Kerberos 鉴别,然后才能访问文件。


# share -F nfs -o sec=krb5 /export/home

示例-共享一个带有多重 Kerberos 安全模式的文件系统

在本示例中,所有三个 Kerberos 安全模式均被选择。如果在进行一个装配请求时没有指定任何的安全模式,则在所有 NFS V3 客户机上使用所列出的第一个模式 (这样的话,就是 krb5)。附加信息可以 "对share 命令的变更" 在中找到。


# share -F nfs -o sec=krb5:krb5i:krb5p /export/home

配置 SEAM 客户机

SEAM 客户机包括网络上需要使用 SEAM 服务的任何主机, KDC 服务器除外。本节提供有一个用于安装 SEAM 客户机的过程,以及关于使用 root 鉴别来装配 NFS 文件系统的具体的信息。

如何配置一个 SEAM 客户机

使用下列配置参数 :

  1. 配置一个 SEAM 客户机的先决条件。

    SEAM 客户机软件必须得到安装。

  2. 编辑 Kerberos 配置文件 (krb5.conf)。

    如果您使用过预配置过程,则您就不需要编辑该文件,但是您应当审查其内容。 如要从 SEAM 默认的版本更改文件,您必须更改区域名和服务器的名称,以及标识到 gkadmin 的帮助文件的路径。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
    
  3. 可选: 使用 NTP 或另一时钟同步机制来与主 KDC 的时钟同步。

    请参见 "使 KDC 和 SEAM 客户机之间时钟同步",了解关于 NTP 的信息。

  4. 可选: 创建一个用户授权对象,如果其尚未存在的话。

    您只需要创建一个用户授权对象,如果与该主机相关联的用户尚未分派一个授权对象的话。请参见 "如何创建一个新的授权对象",了解使用 SEAM 管理工具的操作指示。命令行示例显示如下。


    client1 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: addprinc mre
    录入授权对象 mre@ACME.COM 的口令: <键入口令>
    重新录入授权对象 mre@ACME.COM 的口令: <再次将其键入>
    kadmin: 
  5. 创建一个 root 授权对象。


    kadmin: addprinc root/client1.acme.com
    录入授权对象 root/client1.acme.com@ACME.COM 的口令: <键入口令>
    重新录入授权对象 root/client1.acme.com@ACME.COM 的口令: <再次将其键入>
    kadmin: 退出
    
  6. (可选的) 如果您想要 SEAM 客户机上的一个用户自动使用 Kerberos 鉴别来装配 Kerberized NFS 文件系统,您就必须鉴别 root 用户。

    该进程通过使用 kinit 命令来进行最为安全;然而,用户每当需要装配一个由 Kerberos 提供安全保障的文件系统时,就需要作为 root 使用 kinit。您可以换用一个密钥表文件。请参见 "设置 Root 鉴别来装配 NFS 文件系统",了解关于密钥表要求的详细的信息。


    client1 # /usr/krb5/bin/kinit root/client1.acme.com
    root/client1.acme.com@ACME.COM 的口令: <录入口令>
    

    如要使用密钥表文件选项,请使用 kadmin,将root 授权对象添加到客户机的密钥表:


    client1 # /usr/krb5/sbin/kadmin -p kws/admin
    录入口令: <录入 kws/admin 口令>
    kadmin: ktadd root/client1.acme.com
    kadmin: 授权对象 root/client。acme.com 的条目,
     kvno 为 3,加密类型为 DES-CBC-CRC 被添加到密钥表  
     WRFILE:/etc/krb5/krb5.keytab 
    kadmin: 退出
    
  7. 如果您想要客户机就 Kerberos 票券到期警告用户,则请在 /etc/krb5/warn.conf 文件中创建一个条目。

    请参见 warn.conf(4),了解更多的信息。

  8. 更新用户的外壳搜索路径,使其包括 SEAM 命令和手册页的位置。

    如果您已使用配置文件安装有 SEAM 软件,并选择自动更新 PATH定义,您只需更改 MANPATH 变量。如果您使用 C 外壳,则请键入:


    % set path=(/usr/krb5/bin $path)
    % set MANPATH=(/usr/krb5/man $MANPATH)
    

    如要永久地保持这些对您的外壳搜索路径所进行的变更,就请编辑您的 .cshrc.login 启动文件。

    如果您使用 Bourne 或 Korn 外壳,则请键入:


    $ PATH=/usr/krb5/bin:$PATH
    $ MANPATH=/usr/krb5/man:$MANPATH
    

    如要永久地保持这些对您的外壳搜索路径进行的变更,就请编辑您的 .profile 启动文件。

设置 Root 鉴别来装配 NFS 文件系统

如果用户想要访问一个非 Kerberized NFS 的文件系统,或者 NFS 文件系统可以被装配为 root,或者每当访问时,就可以通过自动装配器,自动访问文件系统 (无需 root 许可)。

装配一个 Kerberized NFS 文件系统十分相同,但是其确实招致了的一个附加障碍。如要装配一个 Kerberized NFS 文件系统,用户必须作为 root 使用 kinit 命令,以为客户机的root 授权对象获得资格,因为一个客户机的 root 授权对象通常不在客户机的密钥表中。即使是在自动装配器得到设置时也是这样。这不但是一个额外的步骤,而且强迫所有用户知晓其系统的root 口令和 root 授权对象的口令。

如要绕过这一步骤,您可以将一个客户机的 root 授权对象添加到客户机的密钥表,从而自动为 root 提供资格。尽管这使得用户不运行 kinit 命令就可以装配 NFS 文件系统且增强了使用上的便利,但却是一个安全隐患。例如,如果某人借助其密钥表中的 root 授权对象取得对一个系统的访问,则此人就拥有为 root 获得资格的能力。因此请确保您采取适当的安全防范措施。请参见 "管理密钥表",了解更多的信息。

使 KDC 和 SEAM 客户机之间时钟同步

在一个指定的最大时间量 (即 时钟相位差) 内,参与 Kerberos 鉴别系统的所有主机必须让其内部时钟同步化,这就提供了另一个 Kerberos 安全检查。如果时钟相位差在其中任意参与主机之间被超过,则客户机请求遭到拒绝。

时钟相位差还确定应用程序服务器必须对所有的 Kerberos 协议消息进行跟踪的时长,以便认可和拒绝重放的请求。因此,时钟相位差值越长,该应用程序服务器不得不收集的信息也就越多。

最大时钟相位差默认值为 300 秒 (五分钟),而您可以在 krb5.conf 文件的 libdefaults 一节中对此进行更改。


注意:

出于安全原因,不要增加时钟相位差超过 300 秒。


鉴于在各个 KDC 和 SEAM 客户机之间维护时钟同步很重要,推荐您使用网络时间协议 (NTP) 软件来做到这一点。从 Solaris 2.6 发行版开始,来自 University of Delaware 的网络时间协议 (NTP) 公产软件就包含在 Solaris 软件中。


注意:

使时钟同步的另一方法就是使用 rdate 命令和 cron 任务,与使用 NTP 相比,该过程需要较少的介入。然而,本节将继续以使用 NTP 为重点。而且,如果您使用网络来使时钟同步,则时钟同步协议自身必须是安全的。


NTP 使您可以在一个网络环境中管理精确的时间和/或网络时钟同步。 NTP 基本上是一个服务器/客户机实现方案。您挑选一个系统作为主时钟 (NTP 服务器),然后将所有您的其它系统设置为使其时钟与主时钟同步 (NTP 客户机)。这一切都是通过 xntpd 守候程序来完成的,该程序将一个 UNIX 系统设定和维护为符合因特网标准时间服务器的当天时间。图形 3-1 显示的是一个使用服务器/客户机 NTP 实现方案的示例。

图形 3-1 使用 NTP 使时钟同步

Graphic

如要确保各个 KDC 和 SEAM 客户机维护同步化时钟,请实施下列步骤:

  1. 在您的网络上设置一个 NTP 服务器 (这可以是主 KDC 之外的任何系统 )。请参见 "如何设置一个 NTP 服务器"

  2. 在您配置网络上的 KDC 和 SEAM 客户机时,请将其设置为 NTP 服务器的 NTP 客户机。请参见 "如何设置一个 NTP 客户机"

如何设置一个 NTP 服务器

  1. 在要作为 NTP 服务器的系统上变为超级用户。

  2. 更改到 /etc/inet 目录。

  3. ntp.server 文件复制到 ntp.conf 文件。


    # cp ntp.server ntp.conf
    
  4. 更改到 /etc/init.d 目录。

  5. 启动 xntpd 守候程序。


    # ./xntpd start
    

如何设置一个 NTP 客户机

  1. 在要作为一个 NTP 客户机的系统上变为超级用户。

  2. 更改到 /etc/inet 目录。

  3. ntp.client 文件复制到 ntp.conf 文件。


    # cp ntp.client ntp.conf
    
  4. 更改到 /etc/init.d 目录。

  5. 启动 xntpd 守候程序。


    # ./xntpd start
    

交换主 KDC 和从 KDC

这些过程应当用于简化一个主 KDC 与一个从 KDC 的交换。只有当主 KDC 服务器失败出于某个原因而发生故障时,或者主 KDC 需要重新安装时 (例如新的硬件),才应当进行该交换操作。

如何配置一个可交换的从 KDC

本过程应当在您想要让其可以变为主 KDC 的从 KDC 服务器上进行。

  1. 在安装过程中,请使用主 KDC 和可交换的从 KDC 服务器的别名。

    当为 KDC 定义主机名时,请确保每个系统在 DNS 中均包含有一个别名,并在 /etc/krb5/krb5.conf 中定义主机时使用别名。

  2. 安装主 KDC 软件。

    安装主 KDC 软件,提供二进制文件以及交换过程中所需要的其它的文件,这包括从 KDC 服务器所要求的所有文件。安装完毕时不要重新引导系统。

  3. 遵照执行用来安装一个从 KDC.的步骤

    在任何交换之前,该服务器应当象区域中的任何其它的从 KDC 一样工作。请参见 "如何配置一个从 KDC",了解其操作指示。不要安装从软件。在安装主软件时,会安装所要求的所有文件。

  4. 移动主 KDC 命令。

    为了防止从该从 KDC 上运行主 KDC 命令,请将 kpropkadmindkadmin.local 移到一个保留位置。


    kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save
    kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save
    kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save
    
  5. /etc/init.d/kdc.master 中禁用 kadmind 启动。

    如要防止从 KDC 对更改 KDC 数据库的请求进行处理,请将行正文中用于启动 kadmind 的一行变为注释:


    kdc4 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
    #                $BINDIR/kadmind 
            fi
            ;;
  6. root crontab 文件中的 kprop 一行变为注释。

    该步骤防止从 KDC 传播其 KDC 数据库副本。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    #10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma
    

如何交换主 KDC 和从 KDC

本过程要求从 KDC 服务器业已设置为一个可交换从 KDC (请参见 "如何配置一个可交换的从 KDC")。在本过程中,被替换的主服务器名为 kdc1,而将变为新的主 KDC 的从 KDC 名为 kdc4

  1. 在旧的主 KDC 上: 杀死 kadmind 进程。

    杀死 kadmind 进程,防止对 KDC 数据库进行任何更改。


    kdc1 # /etc/init.d/kdc.master stop
    
  2. 在旧的主 KDC 上: 将 root crontab 文件中的 kprop 一行变为注释。

    该步骤防止旧的主 KDC 传播其 KDC 数据库副本。


    kdc1 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    #10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.sun.com #SUNWkr5ma
    
  3. 在旧的主 KDC 上: 在 /etc/init.d/kdc.master 中禁用 kadmind 启动。

    如要在服务器重新引导时防止主 KDC 重新启动 kadmind,请将正文中用于启动 kadmind 的一行变为注释:


    kdc1 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
    #                $BINDIR/kadmind 
            fi
            ;;
  4. 在旧的主 KDC 上: 运行 kprop_script 来备份和传播数据库。


    kdc1 # /usr/krb5/lib/kprop_script kdc4.acme.com
    数据库传播到 kdc4.acme.com: 已成功
  5. 在旧的主 KDC 上: 移动主 KDC 命令。

    为了防止运行主 KDC 命令,请将 kpropkadmindkadmin.local 移到一个保留位置。


    kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save
    kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save
    kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save
    
  6. 在 DNS 服务器上: 更改主 KDC 的别名。

    如要更改服务器,请编辑 acme.com 区段文件并更改 masterkdc 的条目。


    masterkdc IN CNAME kdc4
  7. 在 DNS 服务器上: 重新启动因特网域名服务器。

    在两个服务器上运行下列命令来获得新的别名信息:


    # pkill -1 in.named
  8. 在新的主 KDC 上: 移动主 KDC 命令。


    kdc4 # mv /usr/krb5/lib/kprop.save /usr/krb5/lib/kprop
    kdc4 # mv /usr/krb5/lib/kadmind.save /usr/krb5/lib/kadmind
    kdc4 # mv /usr/krb5/sbin/kadmin.local.save /usr/krb5/sbin/kadmin.local
    
  9. 在新的主 KDC 上: 使用 kadmin.local,为 kadmin 创建一个密钥表文件。

    该命令序列创建一个特殊的密钥表文件,其中带有针对 adminchangepw 的授权对象条目。这些授权对象是 kadmind 服务所需的。


    kdc4 # /usr/krb5/sbin/kadmin.local
    kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc4.acme.com
    授权对象 kadmin/kdc4.acme.com 的条目,kvno 为 3,加密类型为 DES-CBC-CRC
               被添加到密钥表 WRFILE:/etc/krb5/kadm5.keytab。kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc4.acme.com
    授权对象changepw/kdc4.acme.com 的条目, kvno 为 3,加密类型为DES-CBC-CRC
                被添加到密钥表 WRFILE:/etc/krb5/kadm5.keytab。
     kadmin.local: 退出
    
  10. 在新的主 KDC 上: 在 /etc/init.d/kdc.master 中启用 kadmind 启动。


    kdc4 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
                    $BINDIR/kadmind 
            fi
            ;;
  11. 在新的主 KDC 上: 启动 kadmind


    kdc4 # /etc/init.d/kdc.master start
    
  12. 启用 root crontab 文件中的 kprop 一行。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma
    

管理 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 选项。

提高安全

这些过程列出您可以用来在 SEAM 应用程序服务器上和在 KDC 服务器上增加安全的步骤。

如何只启用 Kerberized 应用程序

本过程将使用 telnetftprcprshrlogin 来将对服务器的访问限定为经过 Kerberos 鉴别的事务。

  1. 编辑 /etc/inetd.conf 中的 telnet 条目。

    -a user 选项添加到 telnet 条目,以限定对那些可以提供有效鉴别信息的用户的访问。


    telnet stream  tcp     nowait  root    /usr/krb5/lib/telnetd  telnetd -a user
    
  2. 编辑 /etc/inetd.conf 中的 ftp 条目。

    -a 选项添加到 ftp 条目,以便只允许经过 Kerberos 鉴别的连接。


    ftp stream  tcp     nowait  root    /usr/krb5/lib/ftpd    ftpd -a
    
  3. /etc/inetd.conf 中禁用针对其它服务的 Solaris 条目。

    需要将针对 shelllogin 的条目变为注释或将其去除


    # shell   stream  tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
    # login   stream  tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind

如何为 KDC 服务器限定访问

主KDC 和从 KDC 服务器两者均将KDC 数据库的副本存储在本地。限定对这些服务器的访问,以便保证数据库的安全,对SEAM 安装的整体安全是十分重要的。

  1. /etc/inetd.conf 中禁用远程服务。

    为了提供一个安全的 KDC 服务器,应当通过将 /etc/inetd.conf 中用于启动服务的条目变为注释,禁用所有的非紧要的网络服务。在大多数情况下,需要运行的服务只有 timekrdb5_kprop。另外,任何使用 loopback tli 的服务 (ticltsticotsordticots),均可以保持其启用状态。编辑之后,文件应当看似如下 (为缩短示例,许多说明已被去除):


    kdc1 # cat /etc/inetd.conf
    #
    #ident  "@(#)inetd.conf 1.33    98/06/02 SMI"   /* SVr4.0 1.5   */
      .
      .
    #name     dgram   udp     wait    root    /usr/sbin/in.tnamed     in.tnamed
    #
    #shell    stream  tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
    #login    stream  tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind
    #exec     stream  tcp     nowait  root    /usr/sbin/in.rexecd     in.rexecd
    #comsat   dgram   udp     wait    root    /usr/sbin/in.comsat     in.comsat
    #talk     dgram   udp     wait    root    /usr/sbin/in.talkd      in.talkd
    #
    #uucp     stream  tcp     nowait  root    /usr/sbin/in.uucpd      in.uucpd
    #
    #finger   stream  tcp     nowait  nobody  /usr/sbin/in.fingerd    in.fingerd
    #
    # Time service is used for clock synchronization.
    #
    time      stream  tcp     nowait  root    internal
    time      dgram   udp     wait    root    internal
    # 
      .
      .
    #
    100234/1  tli rpc/ticotsord wait  root    /usr/lib/gss/gssd     gssd 
    #dtspc    stream  tcp     nowait  root    /usr/dt/bin/dtspcd      /usr/dt/bin/dtspcd
    #100068/2-5 dgram rpc/udp wait    root    /usr/dt/bin/rpc.cmsd    rpc.cmsd
    100134/1 tli rpc/ticotsord wait   root    /usr/krb5/lib/ktkt_warnd kwarnd
    #klogin   stream  tcp     nowait  root    /usr/krb5/lib/rlogind   rlogind -k
    #eklogin  stream  tcp     nowait  root    /usr/krb5/lib/rlogind   rlogind -k -e
    #telnet   stream  tcp     nowait  root    /usr/krb5/lib/telnetd   telnetd
    #ftp      stream  tcp     nowait  root    /usr/krb5/lib/ftpd      ftpd
    #kshell   stream  tcp     nowait  root    /usr/krb5/lib/rshd      rshd -k -c -A
    krb5_prop stream  tcp     nowait  root    /usr/krb5/lib/kpropd  kpropd

    进行变更之后重新引导服务器。

  2. 限定对支持 KDC 的硬件的访问。

    为了能够限定物理访问,请确保服务器及其监视器位于一个安全的设施。常规用户不应能够以任何方式访问该服务器。

  3. 将 KDC 数据库备份存储在本地磁盘或者从 KDC 上。

    只有在磁带可以得到安全存储时,才应当制作您的 KDC 的磁带备份。制作密钥表文件的副本也是这样。最好将这些文件存储在一个没有共享到其它系统的本地文件系统上。存储文件系统既可以是在主 KDC 服务器上,也可以是在任意一个从 KDC 上。