在 Oracle® Solaris 11.2 中管理 Kerberos 和其他验证服务

退出打印视图

更新时间: 2014 年 9 月
 
 

如何将主 KDC 配置为使用 LDAP 目录服务器

    此过程使用以下配置参数:

  • 领域名称 = EXAMPLE.COM

  • DNS 域名 = example.com

  • 主 KDC = kdc1.example.com

  • 目录服务器 = dsserver.example.com

  • admin 主体 = kws/admin

  • LDAP 服务的 FMRI = svc:/application/sun/ds:ds--var-opt-SUNWdsee-dsins1

  • 联机帮助 URL = http://docs.oracle.com/cd/E23824_01/html/821-1456/aadmin-23.html


    注 -  将 URL 调整为指向联机帮助的位置,如gkadmin GUI中所述。

开始之前

主机已配置为使用 DNS。为使性能更佳,请在同一台服务器上安装 KDC 和 LDAP 目录服务。此外还应运行目录服务器。以下过程适用于使用 Oracle Directory Server 企业版的服务器。有关更多信息,请参见 Oracle Identity Management 文档。

您必须承担 KDC 服务器上的 root 角色。有关更多信息,请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限

  1. 配置主 KDC 使用 SSL 访问目录服务器。

    以下步骤将 KDC 配置为使用目录服务器的自签名证书。

    1. 在目录服务器上,导出自签名证书。
      # /export/sun-ds6.1/ds6/bin/dsadm show-cert -F der /export/sun-ds6.1/directory2 \
      defaultCert > /tmp/defaultCert.cert.der
    2. 在主 KDC 上,导入目录服务器的证书。
      # pktool setpin keystore=nss dir=/var/ldap
      # chmod a+r /var/ldap/*.db
      # pktool import keystore=nss objtype=cert trust="CT" \
      infile=/tmp/defaultCert.cert.der \
      label=defaultCert dir=/var/ldap

      有关更多信息,请参见 pktool(1) 手册页。

    3. 在主 KDC 上,测试 SSL 是否可以正常运行。

      此示例假定 cn=directory manager 项具有管理特权。

      master# /usr/bin/ldapsearch -Z -P /var/ldap -D "cn=directory manager" \
      -h dsserver.example.com -b "" -s base objectclass='*'
      Subject:
      "CN=dsserver.example.com,CN=636,CN=Directory Server,O=Example Corporation

      请注意,CN=dsserver.example.com 项必须包含全限定主机名,而不是简短版本。

  2. 如有需要,填充 LDAP 目录。
  3. 将 Kerberos 架构添加到 LDAP 的现有架构。
    # ldapmodify -h dsserver.example.com -D "cn=directory manager" \
    -f /usr/share/lib/ldif/kerberos.ldif
  4. 在 LDAP 目录中创建 Kerberos 容器。

    krb5.conf 文件中添加下列各项:

    1. 定义数据库类型。

      添加一个项来在 realms 部分定义 database_module

      database_module = LDAP
    2. 定义数据库模块。
      [dbmodules]
      LDAP = {
      ldap_kerberos_container_dn = "cn=krbcontainer,dc=example,dc=com"
      db_library = kldap
      ldap_kdc_dn = "cn=kdc service,ou=profile,dc=example,dc=com"
      ldap_kadmind_dn = "cn=kadmin service,ou=profile,dc=example,dc=com"
      ldap_cert_path = /var/ldap
      ldap_servers = ldaps://dsserver.example.com
      }
    3. 在 LDAP 目录中创建 KDC。

      以下命令创建 krbcontainer 及其他几个对象。还会创建 /var/krb5/.k5.EXAMPLE.COM 主密钥以及该密钥的存储文件。有关该命令的选项的更多信息,请参见 kdb5_ldap_util(1M) 手册页。

      # kdb5_ldap_util -D "cn=directory manager" create
         -P master-key -r EXAMPLE.COM -s
  5. 存储 KDC 绑定标识名 (Distinguished Name, DN) 口令。

    当绑定到目录服务器时,KDC 会使用这些口令。KDC 会根据其使用的访问类型使用不同的角色。

    # kdb5_ldap_util stashsrvpw "cn=kdc service,ou=profile,dc=example,dc=com"
    # kdb5_ldap_util stashsrvpw "cn=kadmin service,ou=profile,dc=example,dc=com"
  6. 添加 KDC 服务角色。
    1. 创建一个内容如下的 kdc_roles.ldif 文件:
      dn: cn=kdc service,ou=profile,dc=example,dc=com
      cn: kdc service
      sn: kdc service
      objectclass: top
      objectclass: person
      userpassword: xxxxxxxx
      
      dn: cn=kadmin service,ou=profile,dc=example,dc=com
      cn: kadmin service
      sn: kadmin service
      objectclass: top
      objectclass: person
      userpassword: xxxxxxxx
    2. 在 LDAP 目录中创建角色项
      # ldapmodify -a -h dsserver.example.com -D "cn=directory manager" -f kdc_roles.ldif
  7. 设置 kadmin 相关角色的 ACL。
    # cat << EOF | ldapmodify -h dsserver.example.com -D "cn=directory manager"
    # Set kadmin ACL for everything under krbcontainer.
    dn: cn=krbcontainer,dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target="ldap:///cn=krbcontainer,dc=example,dc=com")(targetattr="krb*")(version 3.0;\
    acl kadmin_ACL; allow (all)\
    userdn = "ldap:///cn=kadmin service,ou=profile,dc=example,dc=com";)
    
    # Set kadmin ACL for everything under the people subtree if there are
    # mix-in entries for krb princs:
    dn: ou=people,dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target="ldap:///ou=people,dc=example,dc=com")(targetattr="krb*")(version 3.0;\
    acl kadmin_ACL; allow (all)\
    userdn = "ldap:///cn=kadmin service,ou=profile,dc=example,dc=com";)
    EOF
  8. 编辑 Kerberos 配置文件 (krb5.conf)。

    需要指定领域和服务器。有关此文件的说明,请参见 krb5.conf(4) 手册页。

    kdc1 # pfedit /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://docs.oracle.com/cd/E23824_01/html/821-1456/aadmin-23.html
    }

    注 -  将 URL 调整为指向联机帮助的位置,如gkadmin GUI中所述。

    在本示例中,default_realmkdcadmin_server 行和所有 domain_realm 项都已更改。此外,联机帮助 URL 也已更改。


    注 -  如果必须与旧版 Kerberos 系统通信,您可能需要限制加密类型。有关限制加密类型所涉及的问题的说明,请参见Kerberos 加密类型
  9. 编辑 KDC 配置文件 (kdc.conf)。

    需要指定领域。有关此文件的说明,请参见 kdc.conf(4) 手册页。

    在本示例中,管理员不但更改了领域名称定义,而且更改了增量传播和日志记录缺省值。

    kdc1 # pfedit /etc/krb5/kdc.conf
    [kdcdefaults]
    kdc_ports = 88,750
    
    [realms]
    EXAMPLE.COM = {
    profile = /etc/krb5/krb5.conf
    database_name = /var/krb5/principal
    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
    }

    注 -  如果必须与旧版 Kerberos 系统通信,您可能需要限制加密类型。有关限制加密类型所涉及的问题的说明,请参见Kerberos 加密类型
  10. 编辑 Kerberos 访问控制列表文件 (kadm5.acl)。

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

    kws/admin@EXAMPLE.COM   *

    通过前一项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体和策略。缺省主体项是一个型号 (*),此字符可匹配所有 admin 主体。该项可能存在安全风险。修改文件以显式列出每个 admin 主体及其权限。有关更多信息,请参见 kadm5.acl(4) 手册页。

  11. 启动 kadmin.local 命令并创建 admin 主体。
    kdc1 # /usr/sbin/kadmin.local
    kadmin.local: 
    1. 向数据库添加管理主体。

      可以根据需要添加任意数目的 admin 主体。必须至少创建一个 admin 主体,才能完成 KDC 配置过程。在本示例中,创建的是 kws/admin 主体。可以用适当的主体名称替代 "kws"。

      kadmin.local: addprinc kws/admin
      Enter password for principal kws/admin@EXAMPLE.COM:/** Type strong password **/
      Re-enter password for principal kws/admin@EXAMPLE.COM: xxxxxxxx
      Principal "kws/admin@EXAMPLE.COM" created.
      kadmin.local:
    2. 退出 kadmin.local
      kadmin.local: quit
  12. (u53ef选) 配置 LDAP 对 Kerberos 服务的依赖性。

    如果 LDAP 和 KDC 服务器运行在同一台主机上,且 LDAP 服务配置为使用 SMF,则添加 LDAP 服务对 Kerberos 守护进程的依赖性。如果 LDAP 服务重新启动,此依赖性将重新启动 KDC 服务。

    1. 添加对 krb5kdc 服务的依赖性。
      # svccfg -s security/krb5kdc
      svc:/network/security/krb5kdc> addpg dsins1 dependency
      svc:/network/security/krb5kdc> setprop dsins1/entities = \
      fmri: "svc:/application/sun/ds:ds--var-opt-SUNWdsee-dsins1"
      svc:/network/security/krb5kdc> setprop dsins1/grouping = astring: "require_all"
      svc:/network/security/krb5kdc> setprop dsins1/restart_on = astring: "restart"
      svc:/network/security/krb5kdc> setprop dsins1/type = astring: "service"
      svc:/network/security/krb5kdc> exit
    2. 添加对 kadmin 服务的依赖性。
      # svccfg -s security/kadmin
      svc:/network/security/kadmin> addpg dsins1 dependency
      svc:/network/security/kadmin> setprop dsins1/entities =\
      fmri: "svc:/application/sun/ds:ds--var-opt-SUNWdsee-dsins1"
      svc:/network/security/kadmin> setprop dsins1/grouping = astring: "require_all"
      svc:/network/security/kadmin> setprop dsins1/restart_on = astring: "restart"
      svc:/network/security/kadmin> setprop dsins1/type = astring: "service"
      svc:/network/security/kadmin> exit
  13. 执行如何手动配置主 KDC 服务器中的Step 7Step 9 以完成 LDAP 中的 Kerberos 配置。
  14. 配置从 KDC。

    要提供冗余性,请确保至少安装了一个从 KDC 服务器。有关说明,请参见如何手动配置从 KDC 服务器