系统管理指南:安全性服务

配置 KDC 服务器

安装 Kerberos 软件后,必须配置 KDC 服务器。配置一个主 KDC 和至少一个从 KDC 以提供颁发凭证的服务。这些凭证是 Kerberos 服务的基础,因此在尝试其他任务之前必须安装 KDC。

主 KDC 和从 KDC 之间的最大差别是,只有主 KDC 可以处理数据库管理请求。例如,更改口令或添加新的主体必须在主 KDC 上完成。然后可以将这些更改传播到从 KDC。从 KDC 和主 KDC 都可生成凭证。此功能可在主 KDC 无法响应时提供冗余性。

Procedure如何配置主 KDC

在此过程中,将配置增量传播。此外,还将使用以下配置参数:

开始之前

此过程要求 DNS 必须正在运行。有关此主 KDC 是否可交换的特定命名说明,请参见交换主 KDC 和从 KDC

  1. 成为主 KDC 的超级用户。

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

    需要更改领域名称和服务器名称。有关此文件的完整说明,请参见 krb5.conf(4) 手册页。


    kdc1 # cat /etc/krb5/krb5.conf
    
    [libdefaults]
    
            default_realm = EXAMPLE.COM
    
    
    
    [realms]
    
                    EXAMPLE.COM = {
    
                    kdc = kdc1.example.com
    
                    admin_server = kdc1.example.com
    
                   
    
            }
    
    
    
    [domain_realm]
    
            .example.com = EXAMPLE.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 项。此外,还编辑了定义 help_url 的行。


    注 –

    如果要限制加密类型,可以设置 default_tkt_enctypesdefault_tgs_enctypes 行。有关限制加密类型涉及的问题的说明,请参阅使用 Kerberos 加密类型


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

    需要更改领域名称。有关此文件的完整说明,请参见 kdc.conf(4) 手册页。


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

    在此示例中,更改了 realms 部分中的领域名称定义。此外,在 realms 部分中,添加了用于启用增量传播和选择主 KDC 将保留在日志中的更新数的行。


    注 –

    如果需要限制加密类型,可以设置 permitted_enctypessupported_enctypesmaster_key_type 行。有关限制加密类型涉及的问题的说明,请参阅使用 Kerberos 加密类型


  4. 使用 kdb5_util 命令创建 KDC 数据库。

    kdb5_util 命令创建 KDC 数据库。此外,与 -s 选项一起使用时,此命令会在启动 kadmindkrb5kdc 守护进程之前,创建一个用于向自己验证 KDC 的存储文件。


    kdc1 # /usr/sbin/kdb5_util create -r EXAMPLE.COM -s
    
    Initializing database '/var/krb5/principal' for realm 'EXAMPLE.COM'
    
    master key name 'K/M@EXAMPLE.COM'
    
    You will be prompted for the database Master Password.
    
    It is important that you NOT FORGET this password.
    
    Enter KDC database master key: <Type the key>
    
    Re-enter KDC database master key to verify: <Type it again>
    

    如果领域名称与服务器的名称空间中的域名相同,则无需后跟领域名称的 -r 选项。

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

    填充后,/etc/krb5/kadm5.acl 文件应包含允许管理 KDC 的所有主体名称。


    kws/admin@EXAMPLE.COM   *

    通过该项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体或策略。缺省安装包括用于匹配所有 admin 主体的星号 (*)。此缺省安装可能会存在安全风险,因此更安全的方法是包括所有 admin 主体的列表。有关更多信息,请参见 kadm5.acl(4) 手册页。

  6. 启动 kadmin.local 命令并添加主体。

    接下来的子步骤创建 Kerberos 服务使用的主体。


    kdc1 # /usr/sbin/kadmin.local
    
    kadmin.local: 
    1. 向数据库中添加管理主体。

      可以根据需要添加任意数量的 admin 主体。要完成 KDC 配置过程,必须至少添加一个 admin 主体。对于此示例,将添加一个 kws/admin 主体。可以将 "kws" 替换为相应的主体名称。


      kadmin.local: addprinc kws/admin
      
      Enter password for principal kws/admin@EXAMPLE.COM:<Type the password>
      
      Re-enter password for principal kws/admin@EXAMPLE.COM: <Type it again>
      
      Principal "kws/admin@EXAMPLE.COM" created.
      
      kadmin.local: 
    2. 创建 kiprop 主体。

      kiprop 主体用于授权来自主 KDC 的更新。


      kadmin.local: addprinc -randkey kiprop/kdc1.example.com
      
      Principal "kiprop/kdc1.example.com@EXAMPLE.COM" created.
      
      kadmin.local:
    3. kadmind 服务创建密钥表文件。

      此命令序列创建包含 kadminchangepw 的主体项的特殊密钥表文件。kadmind 服务需要使用这些主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。


      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc1.example.com
      
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc1.example.com
      
      EEntry for principal changepw/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw
      
      Entry for principal kadmin/changepw with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/changepw with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/changepw with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kadmin/changepw with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      kadmin.local:
    4. 将主 KDC 服务器的 kiprop 主体添加到 kadmind 密钥表文件中。

      通过将 kiprop 主体添加到 kadm5.keytab 文件中,kadmind 命令可以在启动增量传播时对其自身进行验证。


      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kiprop/kdc1.example.com
      
      Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      
      kadmin.local: 
    5. 退出 kadmin.local

      已经添加了接下来的步骤所需的所有主体。


      kadmin.local: quit
      
  7. 启动 Kerberos 守护进程。


    kdc1 # svcadm enable -r network/security/krb5kdc
    
    kdc1 # svcadm enable -r network/security/kadmin
    
  8. 启动 kadmin 并添加更多主体。

    此时,可以使用 SEAM Administration Tool 添加主体。为此,必须使用此过程前面创建的一个 admin 主体名称登录。但是,为简单起见,给出了以下命令行示例。


    kdc1 # /usr/sbin/kadmin -p kws/admin
    
    Enter password: <Type kws/admin password>
    
    kadmin: 
    1. 创建主 KDC host 主体。

      基于 Kerberos 的应用程序(例如 klistkprop)将使用主机主体。Solaris 10 客户机在挂载经过验证的 NFS 文件系统时将使用此主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。


      kadmin: addprinc -randkey host/kdc1.example.com
      
      Principal "host/kdc1.example.com@EXAMPLE.COM" created.
      
      kadmin: 
    2. (可选的)创建 kclient 主体。

      安装 Kerberos 客户机过程中 kclient 实用程序将使用此主体。如果不打算使用此实用程序,则无需添加该主体。kclient 实用程序的用户需要使用此口令。


      kadmin: addprinc clntconfig/admin
      
      Enter password for principal clntconfig/admin@EXAMPLE.COM:<Type the password>
      
      Re-enter password for principal clntconfig/admin@EXAMPLE.COM: <Type it again>
      
      Principal "clntconfig/admin@EXAMPLE.COM" created.
      
      kadmin: 
    3. 将主 KDC 的 host 主体添加到主 KDC 的密钥表文件中。

      通过将主机主体添加到密钥表文件中,可以自动使用此主体。


      kadmin: ktadd host/kdc1.example.com
      
      Entry for principal host/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc1.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc1.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc1.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      kadmin: 
    4. 退出 kadmin


      kadmin: quit
      
  9. (可选的)使用 NTP 或其他时钟同步机制同步主 KDC 时钟。

    安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟都必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟

  10. 配置从 KDC。

    要提供冗余性,请确保至少安装一个从 KDC。有关特定说明,请参见如何配置从 KDC

Procedure如何配置从 KDC

在此过程中,将配置一个名为 kdc2 的新从 KDC。此外,还将配置增量传播。此过程使用以下配置参数:

开始之前

必须配置主 KDC。有关此从 KDC 是否可交换的特定说明,请参见交换主 KDC 和从 KDC

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

  2. 在主 KDC 上,启动 kadmin

    必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。


    kdc1 # /usr/sbin/kadmin -p kws/admin
    
    Enter password: <Type kws/admin password>
    
    kadmin: 
    1. 在主 KDC 上,将从主机主体添加到数据库中(如果尚未执行此操作)。

      要使从 KDC 正常工作,该从 KDC 必须具有主机主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。


      kadmin: addprinc -randkey host/kdc2.example.com
      
      Principal "host/kdc2@EXAMPLE.COM" created.
      
      kadmin: 
    2. 在主 KDC 上,创建 kiprop 主体。

      kiprop 主体用于授权来自主 KDC 的增量传播。


      kadmin: addprinc -randkey kiprop/kdc2.example.com
      
      Principal "kiprop/kdc2.example.com@EXAMPLE.COM" created.
      
      kadmin:
    3. 退出 kadmin


      kadmin: quit
      
  3. 在主 KDC 上,编辑 Kerberos 配置文件 (krb5.conf)。

    需要添加每个从 KDC 的项。有关此文件的完整说明,请参见 krb5.conf(4) 手册页。


    kdc1 # cat /etc/krb5/krb5.conf
    
     .
    
     .
    
    [realms]
    
                    EXAMPLE.COM = {
    
                    kdc = kdc1.example.com
    
                    kdc = kdc2.example.com
    
                    admin_server = kdc1.example.com
    
            }
  4. 在主 KDC 上,将 kiprop 项添加到 kadm5.acl 中。

    通过此项,主 KDC 可以接收对 kdc2 服务器的增量传播请求。


    kdc1 # cat /etc/krb5/kadm5.acl
    
    */admin@EXAMPLE.COM *
    
    kiprop/kdc2.example.com@EXAMPLE.COM p
    
  5. 在主 KDC 上,重新启动 kadmind 以使用 kadm5.acl 文件中的新项。


    kdc1 # svcadm restart network/security/kadmin
    
  6. 在所有从 KDC 上,复制主 KDC 服务器的 KDC 管理文件。

    由于主 KDC 服务器已更新每台 KDC 服务器所需的信息,因此需要在所有从 KDC 上执行此步骤。可以使用 ftp 或类似的传送机制从主 KDC 获取以下文件的副本:

    • /etc/krb5/krb5.conf

    • /etc/krb5/kdc.conf

  7. 在所有从 KDC 上,将主 KDC 和每个从 KDC 的项添加到数据库传播配置文件 kpropd.acl 中。

    需要更新所有从 KDC 服务器上的此信息。


    kdc2 # cat /etc/krb5/kpropd.acl
    
    host/kdc1.example.com@EXAMPLE.COM
    
    host/kdc2.example.com@EXAMPLE.COM
  8. 在所有从 KDC 上,请确保未填充 Kerberos 访问控制列表文件 kadm5.acl

    未修改的 kadm5.acl 文件如下所示:


    kdc2 # cat /etc/krb5/kadm5.acl
    
    */admin@___default_realm___ *

    如果此文件中包含 kiprop 项,请删除它们。

  9. 在新的从 KDC 上,更改 kdc.conf 中的项。

    sunw_dbprop_master_ulogsize 项替换为定义 sunw_dbprop_slave_poll 的项。该项将轮询时间设置为 2 分钟。


    kdc1 # cat /etc/krb5/kdc.conf
    
    [kdcdefaults]
    
            kdc_ports = 88,750
    
    
    
    [realms]
    
            EXAMPLE.COM= {
    
                    profile = /etc/krb5/krb5.conf
    
                    database_name = /var/krb5/principal
    
                    admin_keytab = /etc/krb5/kadm5.keytab
    
                    acl_file = /etc/krb5/kadm5.acl
    
                    kadmind_port = 749
    
                    max_life = 8h 0m 0s
    
                    max_renewable_life = 7d 0h 0m 0s
    
                    sunw_dbprop_enable = true
    
                    sunw_dbprop_slave_poll = 2m
    
            }
  10. 在新的从 KDC 上,启动 kadmin 命令。

    必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。


    kdc2 # /usr/sbin/kadmin -p kws/admin
    
    Enter password: <Type kws/admin password>
    
    kadmin: 
    1. 使用 kadmin 将从 KDC 的主机主体添加到从 KDC 的密钥表文件中。

      此项可使 kprop 和其他基于 Kerberos 的应用程序正常工作。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。


      kadmin: ktadd host/kdc2.example.com
      
      Entry for principal host/kdc2.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc2.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc2.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal host/kdc2.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      kadmin: 
    2. kiprop 主体添加到从 KDC 的密钥表文件中。

      通过将 kiprop 主体添加到 krb5.keytab 文件中,kpropd 命令可以在启动增量传播时对其自身进行验证。


      kadmin: ktadd kiprop/kdc2.example.com
      
      Entry for principal kiprop/kdc2.example.com with kvno 3, encryption type AES-128 CTS mode
      
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal kiprop/kdc2.example.com with kvno 3, encryption type Triple DES cbc
      
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal kiprop/kdc2.example.com with kvno 3, encryption type ARCFOUR
      
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      Entry for principal kiprop/kdc2.example.com with kvno 3, encryption type DES cbc mode
      
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      
      kadmin: 
    3. 退出 kadmin


      kadmin: quit
      
  11. 在新的从 KDC 上,启动 Kerberos 传播守护进程。


    kdc2 # /usr/lib/krb5/kpropd
    
  12. 在新的从 KDC 上,使用 kdb5_util 创建一个存储文件。


    kdc2 # /usr/sbin/kdb5_util stash
    
    kdb5_util: Cannot find/read stored master key while reading master key
    
    kdb5_util: Warning: proceeding without master key
    
    
    
    Enter KDC database master key: <Type the key>
    
  13. 中止 Kerberos 传播守护进程。


    kdc2 # pkill kpropd
    
  14. (可选的)在新的从 KDC 上,使用 NTP 或其他时钟同步机制同步主 KDC 时钟。

    安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟

  15. 在新的从 KDC 上,启动 KDC 守护进程 (krb5kdc)。

    启用 krb5kdc 服务时,如果系统配置为从 KDC,则还将启动 kpropd


    kdc2 # svcadm enable network/security/krb5kdc