跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:安全服务 Oracle Solaris 11 Information Library (简体中文) |
运行 FTP 时如何使用带有 Kerberos 的通用安全服务
如何使用多种 Kerberos 安全模式设置安全的 NFS 环境
如何为 Active Directory 服务器配置 Kerberos 客户机
如何以 root 用户身份访问受 Kerberos 保护的 NFS 文件系统
如何手动将 Kerberos 数据库传播到从 KDC 服务器
安装 Kerberos 软件之后,必须配置 KDC 服务器。配置一个主 KDC 服务器和至少一个从 KDC 服务器可以提供颁发凭证的服务。这些凭证是 Kerberos 服务的基础,因此在尝试其他任务之前必须安装 KDC。
主 KDC 服务器与从 KDC 服务器之间最大的差别是,只有主 KDC 服务器可以处理数据库管理请求。例如,更改口令或添加新主体必须在主 KDC 服务器上完成。然后可以将这些更改传播到从 KDC 服务器。从 KDC 服务器和主 KDC 服务器都可以生成凭证。此功能可在主 KDC 服务器无法响应时提供冗余性。
表 21-1 配置 KDC 服务器(任务列表)
|
在 Oracle Solaris 11 发行版中,使用下列过程可以自动配置主 KDC。
有关更多信息,请参见如何获取管理权限。
运行 kdcmgr 实用程序创建 KDC。您需要提供主密钥口令和管理主体的口令。
kdc1# kdcmgr -a kws/admin -r EXAMPLE.COM create master Starting server setup --------------------------------------- Setting up /etc/krb5/kdc.conf Setting up /etc/krb5/krb5.conf 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 password> Re-enter KDC database master key to verify: <Type it again> Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for kws/admin@EXAMPLE.COM; defaulting to no policy 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. Setting up /etc/krb5/kadm5.acl. --------------------------------------------------- Setup COMPLETE. kdc1#
在 Oracle Solaris 发行版中,使用下列过程可以交互配置主 KDC。
有关更多信息,请参见如何获取管理权限。
运行 kdcmgr 实用程序创建 KDC。您需要提供主密钥口令和管理主体口令。
kdc1# kdcmgr create master Starting server setup --------------------------------------- Enter the Kerberos realm: EXAMPLE.COM Setting up /etc/krb5/kdc.conf Setting up /etc/krb5/krb5.conf 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 password> Re-enter KDC database master key to verify: <Type it again> Enter the krb5 administrative principal to be created: kws/admin Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for kws/admin@EXAMPLE.COM; defaulting to no policy 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. Setting up /etc/krb5/kadm5.acl. --------------------------------------------------- Setup COMPLETE. kdc1#
示例 21-1 显示 KDC 服务器的状态
kdcmgr status 命令可用于显示有关主或从 KDC 服务器的信息。
在此过程中,将配置增量传播。此外,还将使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
admin 主体 = kws/admin
联机帮助 URL = http://download.oracle.com/docs/cd/E23824_01/html/821-1456/aadmin-23.html
开始之前
该过程要求将主机配置为使用 DNS。有关交换主 KDC 服务器的具体命名说明,请参见交换主 KDC 服务器与从 KDC 服务器。
需要更改领域名称和服务器名称。有关此文件的完整说明,请参见 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://download.oracle.com/docs/cd/E23824_01/html/821-1456/aadmin-23.html }
在此示例中,default_realm、kdc、admin_server 行和所有 domain_realm 项都已被更改。此外还会编辑定义 help_url 的行。
注 - 如果要限制加密类型,可以设置 default_tkt_enctypes 或 default_tgs_enctypes 行。请参阅使用 Kerberos 加密类型,了解关于限制加密类型的问题说明。
需要更改领域名称。有关此文件的完整说明,请参见 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 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_enctypes、supported_enctypes 或 master_key_type 行。请参阅使用 Kerberos 加密类型,了解关于限制加密类型的问题说明。
kdb5_util 命令可以创建 KDC 数据库。此外,使用 -s 选项时,该命令会在启动 kadmind 和 krb5kdc 守护进程之前,创建一个用于向自己验证 KDC 的存储文件。
kdc1 # /usr/sbin/kdb5_util create -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>
填充后,/etc/krb5/kadm5.acl 文件应包含所有获许管理 KDC 的主体名称。
kws/admin@EXAMPLE.COM *
通过该项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体或策略。缺省安装包括一个星号 (*),以匹配所有的 admin 主体。此缺省安装可能会造成安全风险,因此,包括一个所有 admin 主体的列表会更安全。有关更多信息,请参见 kadm5.acl(4) 手册页。
接下来的子步骤会创建 Kerberos 服务使用的主体。
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 the password> Re-enter password for principal kws/admin@EXAMPLE.COM: <Type it again> Principal "kws/admin@EXAMPLE.COM" created. kadmin.local:
kiprop 主体用于授权来自主 KDC 服务器的更新。
kadmin.local: addprinc -randkey kiprop/kdc1.example.com Principal "kiprop/kdc1.example.com@EXAMPLE.COM" created. kadmin.local:
您已经为后续步骤添加了所有需要的主体。
kadmin.local: quit
kdc1 # svcadm enable -r network/security/krb5kdc kdc1 # svcadm enable -r network/security/kadmin
此时,您可以使用图形化 Kerberos 管理工具添加主体。为此,必须使用之前在此过程中创建的一个 admin 主体名称登录。不过,为简便起见,给出了以下命令行示例。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
基于 Kerberos 的应用程序(例如 kprop)将使用主机主体将变更传播到从 KDC 服务器。也可以通过该主体提供对使用应用程序(如 ssh)的 KDC 服务器的安全远程访问。请注意,当主体实例为主机名时,无论名称服务中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey host/kdc1.example.com Principal "host/kdc1.example.com@EXAMPLE.COM" created. kadmin:
kclient 实用程序在 Kerberos 客户机安装期间使用该主体。如果您没有计划使用此实用程序,则不需要添加该主体。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:
通过将主机主体添加到密钥表文件,允许应用服务器(如 sshd)自动使用该主体。
kadmin: ktadd host/kdc1.example.com Entry for principal host/kdc1.example.com with kvno 3, encryption type AES-256 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 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:
kadmin: quit
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必须的。但是,要成功进行验证,每个时钟必须遵守 krb5.conf 文件的 libdefaults 部分中定义的缺省时间。有关 NTP 的信息,请参见同步 KDC 与 Kerberos 客户机的时钟。
要提供冗余性,请确保至少安装了一个从 KDC 服务器。有关具体说明,请参见如何手动配置从 KDC 服务器。
使用以下过程配置 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://download.oracle.com/docs/cd/E23824_01/html/821-1456/aadmin-23.html
开始之前
该过程也要求将主机配置为使用 DNS。为使性能更佳,请在同一台服务器上安装 KDC 和 LDAP 目录服务。此外还应运行目录服务器。下面的过程适用于运行 Sun Directory Server Enterprise Edition 7.0 发行版的服务器。
以下步骤将 Oracle Solaris 发行版 KDC 配置为使用 Directory Server 自签名证书。如果证书已过期,请按照"管理自签名证书"中的说明来续订证书。
# /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.certutil.der \ label=defaultCert dir=/var/ldap
此示例假设 cn=directory manager 条目具有管理特权。
/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 -D "cn=directory manager" create -P abcd1234 -r EXAMPLE.COM -s
当 KDC 绑定到 DS 时会使用这些口令。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: test123 dn: cn=kadmin service,ou=profile,dc=example,dc=com cn: kadmin service sn: kadmin service objectclass: top objectclass: person userpassword: test123
# 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 # 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://download.oracle.com/docs/cd/E23824_01/html/821-1456/aadmin-23.html }
在此示例中,default_realm、kdc、admin_server 行和所有 domain_realm 项都已被更改。此外还会编辑定义 help_url 的行。
注 - 如果要限制加密类型,可以设置 default_tkt_enctypes 或 default_tgs_enctypes 行。请参阅使用 Kerberos 加密类型,了解关于限制加密类型的问题说明。
需要更改领域名称。有关此文件的完整说明,请参见 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 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_enctypes、supported_enctypes 或 master_key_type 行。请参阅使用 Kerberos 加密类型,了解关于限制加密类型的问题说明。
填充后,/etc/krb5/kadm5.acl 文件应包含所有获许管理 KDC 的主体名称。
kws/admin@EXAMPLE.COM *
通过该项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体或策略。缺省安装包括一个星号 (*),以匹配所有的 admin 主体。此缺省安装可能会造成安全风险,因此,包括一个所有 admin 主体的列表会更安全。有关更多信息,请参见 kadm5.acl(4) 手册页。
接下来的子步骤会创建 Kerberos 服务使用的主体。
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 the password> Re-enter password for principal kws/admin@EXAMPLE.COM: <Type it again> Principal "kws/admin@EXAMPLE.COM" created. kadmin.local:
您已经为后续步骤添加了所有需要的主体。
kadmin.local: quit
如果 LDAP 和 KDC 服务器运行在同一台主机上,且 LDAP 服务以 SMF FMRI 配置,则添加 Kerberos 守护进程对 LDAP 服务的依赖性。如果 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
kdc1 # svcadm enable -r network/security/krb5kdc kdc1 # svcadm enable -r network/security/kadmin
此时,您可以使用 GUI Kerberos 管理工具添加主体。为此,必须使用之前在此过程中创建的一个 admin 主体名称登录。不过,为简便起见,给出了以下命令行示例。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
基于 Kerberos 的应用程序(如 klist 和 kprop)使用 host 主体。挂载通过验证的 NFS 文件系统时,客户机使用该主体。请注意,当主体实例为主机名时,无论名称服务中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey host/kdc1.example.com Principal "host/kdc1.example.com@EXAMPLE.COM" created. kadmin:
kclient 实用程序在 Kerberos 客户机安装期间使用该主体。如果您没有计划使用此实用程序,则不需要添加该主体。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:
将主机主体添加到密钥表文件会允许自动使用该主体。
kadmin: ktadd host/kdc1.example.com Entry for principal host/kdc1.example.com with kvno 3, encryption type AES-256 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 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:
kadmin: quit
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必须的。但是,要成功进行验证,每个时钟必须遵守 krb5.conf 文件的 libdefaults 部分中定义的缺省时间。有关 NTP 的信息,请参见同步 KDC 与 Kerberos 客户机的时钟。
要提供冗余性,请确保至少安装了一个从 KDC 服务器。有关具体说明,请参见如何手动配置从 KDC 服务器。
在 Oracle Solaris 发行版中,使用下列过程可以自动配置从 KDC。
有关更多信息,请参见如何获取管理权限。
运行 kdcmgr 实用程序创建 KDC。您需要提供主密钥口令和管理主体的口令。
kdc2# kdcmgr -a kws/admin -r EXAMPLE.COM create -m kdc1 slave Starting server setup --------------------------------------- Setting up /etc/krb5/kdc.conf Setting up /etc/krb5/krb5.conf Obtaining TGT for kws/admin ... Password for kws/admin@EXAMPLE.COM: <Type the password> Setting up /etc/krb5/kadm5.acl. Setting up /etc/krb5/kpropd.acl. Waiting for database from master... Waiting for database from master... Waiting for database from master... 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 password> --------------------------------------------------- Setup COMPLETE. kdc2#
使用以下过程交互配置从 KDC。
有关更多信息,请参见如何获取管理权限。
运行 kdcmgr 实用程序创建 KDC。您需要提供主密钥口令和管理主体的口令。
kdc1# kdcmgr create slave Starting server setup --------------------------------------- Enter the Kerberos realm: EXAMPLE.COM What is the master KDC's host name?: kdc1 Setting up /etc/krb5/kdc.conf Setting up /etc/krb5/krb5.conf Obtaining TGT for kws/admin ... Password for kws/admin@EXAMPLE.COM: <Type the password> Setting up /etc/krb5/kadm5.acl. Setting up /etc/krb5/kpropd.acl. Waiting for database from master... Waiting for database from master... Waiting for database from master... 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 password> --------------------------------------------------- Setup COMPLETE. kdc2#
在此过程中,将配置新的名为 kdc2 的从 KDC 服务器。此外还会配置增量传播。此过程使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com
admin 主体 = kws/admin
开始之前
必须配置主 KDC 服务器。要了解交换从 KDC 服务器的具体说明,请参见交换主 KDC 服务器与从 KDC 服务器。
必须使用在配置主 KDC 服务器时创建的一个 admin 主体名称登录。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
要使从 KDC 服务器正常工作,它必须有主机主体。请注意,当主体实例为主机名时,无论名称服务中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey host/kdc2.example.com Principal "host/kdc2.example.com@EXAMPLE.COM" created. kadmin:
kiprop 主体用于授权来自主 KDC 服务器的增量传播。
kadmin: addprinc -randkey kiprop/kdc2.example.com Principal "kiprop/kdc2.example.com@EXAMPLE.COM" created. kadmin:
kadmin: quit
需要为每个从 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 }
通过此项,主 KDC 服务器可以接收对 kdc2 服务器的增量传播请求。
kdc1 # cat /etc/krb5/kadm5.acl */admin@EXAMPLE.COM * kiprop/kdc2.example.com@EXAMPLE.COM p
kdc1 # svcadm restart network/security/kadmin
需要在所有的从 KDC 服务器上执行该步骤,因为主 KDC 服务器已经更新了每个 KDC 服务器需要的信息。可以使用 ftp 或类似的传输机制从主 KDC 服务器获取以下文件的副本:
/etc/krb5/krb5.conf
/etc/krb5/kdc.conf
需要在所有从 KDC 服务器上更新此信息。
kdc2 # cat /etc/krb5/kpropd.acl host/kdc1.example.com@EXAMPLE.COM host/kdc2.example.com@EXAMPLE.COM
未修改的 kadm5.acl 文件类似如下示例:
kdc2 # cat /etc/krb5/kadm5.acl */admin@___default_realm___ *
如果该文件中包含 kiprop 项,请将其删除。
使用定义 sunw_dbprop_slave_poll 的项替换 sunw_dbprop_master_ulogsize 项。该项将轮询时间设为两分钟。
kdc1 # cat /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_slave_poll = 2m }
必须使用在配置主 KDC 服务器时创建的一个 admin 主体名称登录。
kdc2 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
该项可使 kprop 及其他基于 Kerberos 的应用程序正常工作。请注意,当主体实例为主机名时,无论名称服务中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: ktadd host/kdc2.example.com Entry for principal host/kdc2.example.com with kvno 3, encryption type AES-256 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 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:
通过将 kiprop 主体添加到 krb5.keytab 文件,允许 kpropd 命令在启动增量传播时对其自身进行验证。
kadmin: ktadd kiprop/kdc2.example.com Entry for principal kiprop/kdc2.example.com with kvno 3, encryption type AES-256 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 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:
kadmin: quit
kdc2 # svcadm enable network/security/krb5_prop
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>
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必须的。但是,要成功进行验证,每个时钟必须遵守 krb5.conf 文件的 libdefaults 部分中定义的缺省时间。有关 NTP 的信息,请参见同步 KDC 与 Kerberos 客户机的时钟。
kdc2 # svcadm enable network/security/krb5kdc
当票证授予服务 (Ticket Granting Service, TGS) 主体仅具有 DES 密钥时(在 Solaris 10 发行版之前创建的 KDC 服务器即为这种情况),该密钥会将票证授予票证 (Ticket Granting Ticket, TGT) 会话密钥的加密类型限制为 DES。如果某个 KDC 更新到支持其他更强加密类型的发行版,管理员可能会希望为该 KDC 生成的所有会话密钥使用这种更强的加密。但是,如果现有的 TGS 主体没有刷新其密钥使之包括新的加密类型,TGT 会话密钥仍会继续限制为 DES。以下过程会刷新密钥,以便可以使用其他的加密类型。
kdc1 % /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: cpw -randkey krbtgt/EXAMPLE.COM@EXAMPLE.COM
示例 21-2 从主服务器刷新主体密钥
如果以 root 身份登录到 KDC 主服务器,您可以通过以下命令刷新 TGS 服务主体:
kdc1 # kadmin.local -q 'cpw -randkey krbtgt/EXAMPLE.COM@EXAMPLE.COM'