此过程使用以下配置参数:
领域名称 = 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
开始之前
主机已配置为使用 DNS。为使性能更佳,请在同一台服务器上安装 KDC 和 LDAP 目录服务。此外还应运行目录服务器。以下过程适用于使用 Oracle Directory Server 企业版的服务器。有关更多信息,请参见 Oracle Identity Management 文档。
您必须承担 KDC 服务器上的 root 角色。有关更多信息,请参见在 Oracle Solaris 11.2 中确保用户和进程的安全 中的使用所指定的管理权限。
以下步骤将 KDC 配置为使用目录服务器的自签名证书。
# /export/sun-ds6.1/ds6/bin/dsadm show-cert -F der /export/sun-ds6.1/directory2 \ defaultCert > /tmp/defaultCert.cert.der
# 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) 手册页。
此示例假定 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 项必须包含全限定主机名,而不是简短版本。
# ldapmodify -h dsserver.example.com -D "cn=directory manager" \ -f /usr/share/lib/ldif/kerberos.ldif
向 krb5.conf 文件中添加下列各项:
添加一个项来在 realms 部分定义 database_module。
database_module = LDAP
[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 }
以下命令创建 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
当绑定到目录服务器时,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"
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
# ldapmodify -a -h dsserver.example.com -D "cn=directory manager" -f kdc_roles.ldif
# 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
需要指定领域和服务器。有关此文件的说明,请参见 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 }
在本示例中,default_realm、kdc、admin_server 行和所有 domain_realm 项都已更改。此外,联机帮助 URL 也已更改。
需要指定领域。有关此文件的说明,请参见 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 }
填充后,/etc/krb5/kadm5.acl 文件应包含所有获许管理 KDC 的主体名称。
kws/admin@EXAMPLE.COM *
通过前一项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体和策略。缺省主体项是一个型号 (*),此字符可匹配所有 admin 主体。该项可能存在安全风险。修改文件以显式列出每个 admin 主体及其权限。有关更多信息,请参见 kadm5.acl(4) 手册页。
kdc1 # /usr/sbin/kadmin.local kadmin.local:
可以根据需要添加任意数目的 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:
kadmin.local: quit
如果 LDAP 和 KDC 服务器运行在同一台主机上,且 LDAP 服务配置为使用 SMF,则添加 LDAP 服务对 Kerberos 守护进程的依赖性。如果 LDAP 服务重新启动,此依赖性将重新启动 KDC 服务。
# 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
# 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
要提供冗余性,请确保至少安装了一个从 KDC 服务器。有关说明,请参见如何手动配置从 KDC 服务器。