跳过导航链接 | |
退出打印视图 | |
系统管理指南:安全性服务 Oracle Solaris 10 8/11 Information Library (简体中文) |
19. 使用 Oracle Solaris 安全 Shell(任务)
20. Oracle Solaris 安全 Shell(参考)
如何使用多种 Kerberos 安全模式设置安全的 NFS 环境
如何手动将 Kerberos 数据库传播到从 KDC 服务器
Kerberos 客户机包括网络上需要使用 Kerberos 服务的所有主机(不是 KDC 服务器)。本节介绍有关安装 Kerberos 客户机的过程,以及关于使用 root 验证来挂载 NFS 文件系统的特定信息。
以下任务列表涵盖有关设置 Kerberos 客户机的所有过程。每行都包含一个任务、关于执行该项任务的原因说明,以及指向该任务的链接。
|
此过程创建可在安装 Kerberos 客户机时使用的 kclient 配置文件。使用 kclient 配置文件可以降低键入错误的可能性。此外,与交互式过程相比,使用该配置文件可以减少用户干预。
kclient 配置文件样例与以下内容类似:
client# cat /net/denver.example.com/export/install/profile REALM EXAMPLE.COM KDC kdc1.example.com ADMIN clntconfig FILEPATH /net/denver.example.com/export/install/krb5.conf NFS 1 DNSLOOKUP none
开始之前
此过程使用安装配置文件。请参见如何创建 Kerberos 客户机安装配置文件。
要完成此过程,需要提供 clntconfig 主体的口令。
client# /usr/sbin/kclient -p /net/denver.example.com/export/install/profile Starting client setup --------------------------------------------------- kdc1.example.com Setting up /etc/krb5/krb5.conf. Obtaining TGT for clntconfig/admin ... Password for clntconfig/admin@EXAMPLE.COM: <Type the password> nfs/client.example.com entry ADDED to KDC database. nfs/client.example.com entry ADDED to keytab. host/client.example.com entry ADDED to KDC database. host/client.example.com entry ADDED to keytab. Copied /net/denver.example.com/export/install/krb5.conf. --------------------------------------------------- Setup COMPLETE. client#
示例 23-7 使用命令行覆盖项自动配置 Kerberos 客户机
以下示例将覆盖在安装配置文件中设置的 DNSARG 和 KDC 参数。
# /usr/sbin/kclient -p /net/denver.example.com/export/install/profile\ -d dns_fallback -k kdc2.example.com Starting client setup --------------------------------------------------- kdc1.example.com Setting up /etc/krb5/krb5.conf. Obtaining TGT for clntconfig/admin ... Password for clntconfig/admin@EXAMPLE.COM: <Type the password> nfs/client.example.com entry ADDED to KDC database. nfs/client.example.com entry ADDED to keytab. host/client.example.com entry ADDED to KDC database. host/client.example.com entry ADDED to keytab. Copied /net/denver.example.com/export/install/krb5.conf. --------------------------------------------------- Setup COMPLETE. client#
此过程使用 kclient 安装实用程序而非安装配置文件。
示例 23-8 运行 kclient 安装实用程序
以下输出显示了 kclient 命令的运行结果。
client# /usr/sbin/kclient Starting client setup --------------------------------------------------- Do you want to use DNS for kerberos lookups ? [y/n]: n No action performed. Enter the Kerberos realm: EXAMPLE.COM Specify the KDC hostname for the above realm: kdc1.example.com Setting up /etc/krb5/krb5.conf. Enter the krb5 administrative principal to be used: clntconfig/admin Obtaining TGT for clntconfig/admin ... Password for clntconfig/admin@EXAMPLE.COM: <Type the password> Do you plan on doing Kerberized nfs ? [y/n]: n host/client.example.com entry ADDED to KDC database. host/client.example.com entry ADDED to keytab. Do you want to copy over the master krb5.conf file ? [y/n]: y Enter the pathname of the file to be copied: \ /net/denver.example.com/export/install/krb5.conf Copied /net/denver.example.com/export/install/krb5.conf. --------------------------------------------------- Setup COMPLETE ! #
此过程中使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com
NFS 服务器 = denver.example.com
客户机 = client.example.com
admin 主体 = kws/admin
用户主体 = mre
联机帮助 URL = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
要从 Kerberos 缺省版本更改该文件,需要更改领域名称和服务器名称。还需要指定 gkadmin 帮助文件的路径。
kdc1 # cat /etc/krb5/krb5.conf [libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = kdc1.example.com kdc = kdc2.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_tkt_enctypes 或 default_tgs_enctypes 行。请参阅使用 Kerberos 加密类型,了解关于限制加密类型的问题说明。
从 Solaris 10 5/08 发行版开始,缺省情况下,按照以下顺序确定 kerberos 领域到 KDC 的映射:
krb5.conf 中 realms 部分的定义。
通过在 DNS 中查找 SRV 记录。
将 dns_lookup_kdc 或 dns_fallback 添加到 krb5.conf 文件的 libdefaults 部分,可以更改此行为。有关更多信息,请参见 krb5.conf(4) 手册页。请注意,始终会首先尝试引用。
从 Solaris 10 5/08发行版开始,缺省情况下,按照以下顺序确定主机到领域的映射:
如果 KDC 支持引用,则 KDC 会通知客户机该主机属于哪个领域。
krb5.conf 文件中的 domain_realm 定义。
主机的 DNS 域名。
缺省领域。
将 dns_lookup_kdc 或 dns_fallback 添加到 krb5.conf 文件的 libdefaults 部分,可以更改此行为。有关更多信息,请参见 krb5.conf(4) 手册页。请注意,始终会首先尝试引用。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必须的。但是,要成功进行验证,每个时钟必须与 KDC 服务器上的时间同步,最大时差不超过 krb5.conf 文件中 clockskew 关系定义的值。有关 NTP 的信息,请参见同步 KDC 与 Kerberos 客户机的时钟。
可以使用图形化 Kerberos 管理工具添加主体,如如何创建新的 Kerberos 主体所述。为此,必须使用在配置主 KDC 服务器时创建的一个 admin 主体名称登录。不过,以下示例说明如何使用命令行添加所需的主体。
denver # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
仅当尚未对与该主机关联的用户指定主体时,才需要创建用户主体。
kadmin: addprinc mre Enter password for principal mre@EXAMPLE.COM: <Type the password> Re-enter password for principal mre@EXAMPLE.COM: <Type it again> kadmin:
如果客户机需要具有对使用 NFS 服务挂载的远程文件系统的 root 访问权限,则必须执行此步骤。如果需要非交互式 root 访问权限(如以 root 身份运行 cron 作业),也必须执行该步骤。
如果客户机不需要对使用 NFS 服务挂载的远程文件系统的 root 访问权限,则可以跳过该步骤。root 主体应有两个组成部分,第二个部分是 Kerberos 客户机系统的主机名,以避免创建领域范围的 root 主体。请注意,当主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey root/client.example.com Principal "root/client.example.com" created. kadmin: ktadd root/client.example.com Entry for principal root/client.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 root/client.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 root/client.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 root/client.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal root/client.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin:
远程访问服务使用 host 主体来提供验证。如果密钥表文件中尚无凭证,此主体允许 root 获取凭证。
kadmin: addprinc -randkey host/denver.example.com Principal "host/denver.example.com@EXAMPLE.COM" created. kadmin: ktadd host/denver.example.com Entry for principal host/denver.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/denver.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/denver.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/denver.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal host/denver.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin:
仅当客户机需要使用 Kerberos 验证访问 NFS 文件系统时才需要执行该步骤。
kadmin: ktadd nfs/denver.example.com Entry for principal nfs/denver.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 nfs/denver.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 nfs/denver.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 nfs/denver.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal nfs/denver.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin:
kadmin: quit
编辑 /etc/nfssec.conf 文件并删除位于 Kerberos 安全模式前面的 "#"。
# cat /etc/nfssec.conf . . # # Uncomment the following lines to use Kerberos V5 with NFS # krb5 390003 kerberos_v5 default - # RPCSEC_GSS krb5i 390004 kerberos_v5 default integrity # RPCSEC_GSS krb5p 390005 kerberos_v5 default privacy # RPCSEC_GSS
如果尚未创建 /etc/resolv.conf 文件,请创建该文件,因为服务主体标准化依靠 DNS 执行此任务。有关更多信息,请参见 resolv.conf(4) 手册页。
创建或修改 /etc/resolv.conf 文件后,必须重新启动 gssd 守护进程,以重新读取任何更改。
# svcadm restart network/rpc/gss
有关更多信息,请参见 warn.conf(4) 手册页。
示例 23-9 使用非 Solaris KDC 设置 Kerberos 客户机
Kerberos 客户机可以设置为与非 Solaris KDC 一起工作。在这种情况下,必须在 /etc/krb5/krb5.conf 文件的 realms 部分中包括一行。该行会更改客户机与 Kerberos 口令更改服务器通信时使用的协议。该行的格式如下:
[realms] EXAMPLE.COM = { kdc = kdc1.example.com kdc = kdc2.example.com admin_server = kdc1.example.com kpasswd_protocol = SET_CHANGE }
示例 23-10 主机和域名到 Kerberos 领域的映射的 DNS TXT 记录
@ IN SOA kdc1.example.com root.kdc1.example.com ( 1989020501 ;serial 10800 ;refresh 3600 ;retry 3600000 ;expire 86400 ) ;minimum IN NS kdc1.example.com. kdc1 IN A 192.146.86.20 kdc2 IN A 192.146.86.21 _kerberos.example.com. IN TXT "EXAMPLE.COM" _kerberos.kdc1.example.com. IN TXT "EXAMPLE.COM" _kerberos.kdc2.example.com. IN TXT "EXAMPLE.COM"
示例 23-11 Kerberos 服务器位置的 DNS SRV 记录
此示例分别为 KDC、admin 服务器和 kpasswd 服务器的位置定义记录。
@ IN SOA kdc1.example.com root.kdc1.example.com ( 1989020501 ;serial 10800 ;refresh 3600 ;retry 3600000 ;expire 86400 ) ;minimum IN NS kdc1.example.com. kdc1 IN A 192.146.86.20 kdc2 IN A 192.146.86.21 _kerberos._udp.EXAMPLE.COM IN SRV 0 0 88 kdc2.example.com _kerberos._tcp.EXAMPLE.COM IN SRV 0 0 88 kdc2.example.com _kerberos._udp.EXAMPLE.COM IN SRV 1 0 88 kdc1.example.com _kerberos._tcp.EXAMPLE.COM IN SRV 1 0 88 kdc1.example.com _kerberos-adm._tcp.EXAMPLE.COM IN SRV 0 0 749 kdc1.example.com _kpasswd._udp.EXAMPLE.COM IN SRV 0 0 749 kdc1.example.com
此过程禁用用于检查本地 /etc/krb5/krb5.keytab 文件中存储的主机主体的 KDC 是否即是颁发票证授予票证的 KDC 的安全检查。该检查旨在防止 DNS 欺骗攻击。但是,对于某些客户机配置,主机主体可能不可用,因此需要禁用此项检查以允许客户机正常工作。以下是需要禁用此项检查的配置:
动态分配客户机 IP 地址。例如,DHCP 客户机。
客户机未配置为托管任何服务,所以没有创建主机主体。
未在客户机上储存主机密钥。
如果 verify_ap_req_nofail 选项设置为 false,则不会启用 TGT 验证过程。有关该选项的更多信息,请参见 krb5.conf(4) 手册页。
client # cat /etc/krb5/krb5.conf [libdefaults] default_realm = EXAMPLE.COM verify_ap_req_nofail = false ...
注 - 可以在 krb5.conf 文件的 [libdefaults] 或 [realms] 部分中输入 verify_ap_req_nofail 选项。如果此选项位于 [libdefaults] 部分,则该设置用于所有领域。如果该选项位于 [realms] 部分,则该设置仅应用于定义的领域。
通过此过程,客户机可以使用 root ID 特权访问要求 Kerberos 验证的 NFS 文件系统。特别是,使用如下选项共享 NFS 文件系统时:-o sec=krb5,root=client1.sun.com。
可以使用图形化 Kerberos 管理工具添加主体,如如何创建新的 Kerberos 主体所述。为此,必须使用在配置主 KDC 服务器时创建的一个 admin 主体名称登录。不过,以下示例说明如何使用命令行添加所需的主体。
denver # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin:
此主体用于对要求 Kerberos 验证的 NFS 挂载的文件系统提供 root 等效访问权限。root 主体应有两个组成部分,第二个部分是 Kerberos 客户机系统的主机名,以避免创建领域范围的 root 主体。请注意,当主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey root/client.example.com Principal "root/client.example.com" created. kadmin:
如果添加了 root 主体,则必须执行此步骤,以便客户机对使用 NFS 服务挂载的文件系统具有 root 访问权限。如果需要非交互式 root 访问权限(如以 root 身份运行 cron 作业),也必须执行该步骤。
kadmin: ktadd root/client.example.com Entry for principal root/client.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 root/client.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 root/client.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 root/client.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal root/client.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin:
kadmin: quit
没有 Kerberos 主体的用户可以自动迁移到现有 Kerberos 领域。可以使用正在使用的服务的 PAM 框架,通过在 /etc/pam.conf 中将 pam_krb5_migrate 模块堆叠在该服务的验证栈中实现迁移。
在此示例中,将配置 dtlogin 和 other PAM 服务名称使其使用自动迁移。将使用以下配置参数:
领域名称 = EXAMPLE.COM
主 KDC = kdc1.example.com
托管迁移服务的计算机 = server1.example.com
迁移服务主体 = host/server1.example.com
开始之前
将 server1 设置为 EXAMPLE.COM 领域的 Kerberos 客户机。有关更多信息,请参见配置 Kerberos 客户机。
server1 的 keytab 文件中的主机服务主体用于向主 KDC 服务器验证该服务器。
server1 # klist -k Keytab name: FILE:/etc/krb5/krb5.keytab KVNO Principal ---- ------------------------------------------------ 3 host/server1.example.com@EXAMPLE.COM 3 host/server1.example.com@EXAMPLE.COM 3 host/server1.example.com@EXAMPLE.COM 3 host/server1.example.com@EXAMPLE.COM
# cat /etc/pam.conf . . # # dtlogin service (explicit because of pam_krb5_migrate) # dtlogin auth requisite pam_authtok_get.so.1 dtlogin auth required pam_dhkeys.so.1 dtlogin auth required pam_unix_cred.so.1 dtlogin auth sufficient pam_krb5.so.1 dtlogin auth requisite pam_unix_auth.so.1 dtlogin auth optional pam_krb5_migrate.so.1
可以将新建 Kerberos 帐户的口令到期时间设置为当前时间(现在),以便强制立即更改 Kerberos 口令。要将到期时间设置为当前时间,请将 expire_pw 选项添加到使用 pam_krb5_migrate 模块的行中。有关更多信息,请参见 pam_krb5_migrate(5) 手册页。
# cat /etc/pam.conf . . dtlogin auth optional pam_krb5_migrate.so.1 expire_pw
此添加操作使 Kerberos 中的口令到期,从而阻止访问。
# cat /etc/pam.conf . . # # Default definition for Account management # Used when service name is not explicitly mentioned for account management # other account requisite pam_roles.so.1 other account required pam_krb5.so.1 other account required pam_unix_account.so.1
此添加操作使得口令在到期时得到更新。
# cat /etc/pam.conf . . # # Default definition for Password management # Used when service name is not explicitly mentioned for password management # other password required pam_dhkeys.so.1 other password requisite pam_authtok_get.so.1 other password requisite pam_authtok_check.so.1 other password sufficient pam_krb5.so.1 other password required pam_authtok_store.so.1
以下项将为所有用户(root 用户除外)授予对 host/server1.example.com 服务主体的迁移和查询特权。务必将不应被迁移的用户在 kadm5.acl 文件中以 U 特权列出。这些项必须位于 permit all 或 ui 项之前。有关更多信息,请参见 kadm5.acl(4) 手册页。
kdc1 # cat /etc/krb5/kadm5.acl host/server1.example.com@EXAMPLE.COM U root host/server1.example.com@EXAMPLE.COM ui * */admin@EXAMPLE.COM *
通过此步骤,kadmind 守护进程可以使用新的 kadm5.acl 项。
kdc1 # svcadm restart network/security/kadmin
通过以下项,kadmind 守护进程可以使用 k5migrate PAM 服务来验证需要迁移的帐户的 UNIX 用户口令。
# grep k5migrate /etc/pam.conf k5migrate auth required pam_unix_auth.so.1 k5migrate account required pam_unix_account.so.1