Sun 企业鉴别机制指南

配置 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 的信息。