跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 管理:安全服务 Oracle Solaris 11.1 Information Library (简体中文) |
10. Oracle Solaris 中的安全属性(参考信息)
运行 FTP 时如何使用带有 Kerberos 的通用安全服务
如何使用多种 Kerberos 安全模式设置安全的 NFS 环境
如何为 Active Directory 服务器配置 Kerberos 客户机
如何以 root 用户身份访问受 Kerberos 保护的 NFS 文件系统
如何自动续订所有票证授予票证 (Ticket-Granting Ticket, TGT)
如何手动将 Kerberos 数据库传播到从 KDC 服务器
安装 Kerberos 软件之后,必须配置 KDC 服务器。配置一个主 KDC 服务器和至少一个从 KDC 服务器可以提供颁发凭证的服务。这些凭证是 Kerberos 服务的基础,因此在尝试其他任务之前必须安装 KDC。
主 KDC 服务器与从 KDC 服务器之间最大的差别是,只有主 KDC 服务器可以处理数据库管理请求。例如,更改口令或添加新主体必须在主 KDC 服务器上完成。然后可以将这些更改传播到从 KDC 服务器。从 KDC 服务器和主 KDC 服务器都可以生成凭证。此功能可在主 KDC 服务器无法响应时提供冗余性。
表 21-1 配置 KDC 服务器(任务列表)
|
在 Oracle Solaris 11 发行版中,使用下列过程可以自动配置主 KDC。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
运行 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。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
运行 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://docs.oracle.com/cd/E23824_01/html/821-1456/aadmin-23.html
开始之前
该过程要求将主机配置为使用 DNS。有关交换主 KDC 服务器的具体命名说明,请参见交换主 KDC 服务器与从 KDC 服务器。
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
需要更改领域名称和服务器名称。有关此文件的完整说明,请参见 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://docs.oracle.com/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) 手册页。
可以根据需要添加任意数目的 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:
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://docs.oracle.com/cd/E23824_01/html/821-1456/aadmin-23.html
开始之前
该过程也要求将主机配置为使用 DNS。为使性能更佳,请在同一台服务器上安装 KDC 和 LDAP 目录服务。此外还应运行目录服务器。下面的过程适用于运行 Sun Directory Server Enterprise Edition 7.0 发行版的服务器。
您必须承担 KDC 服务器上的 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
以下步骤将发行版 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.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://docs.oracle.com/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。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
运行 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。
开始之前
您必须承担 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
运行 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 服务器上的 root 角色。有关更多信息,请参见如何使用指定给您的管理权限。
必须使用在配置主 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'