本部分提供有关 Kerberos 服务的配置、管理和使用方法的信息。
本章介绍 Kerberos 服务。以下是本章中概述信息的列表:
Kerberos 服务是一种通过网络提供安全事务处理的客户机/服务器体系结构。该服务可提供功能强大的用户验证以及完整性和保密性服务。通过验证,可保证网络事务的发送者和接收者的身份真实。该服务还可以检验来回传递的数据的有效性(完整性),并在传输过程中对数据进行加密(保密性)。 使用 Kerberos 服务,可以安全登录到其他计算机、执行命令、交换数据以及传输文件。此外,该服务还提供授权服务,管理员可通过此服务限制对服务和计算机的访问。而且,作为 Kerberos 用户,您还可以控制其他用户对您帐户的访问。
Kerberos 服务是单点登录系统,这意味着您对于每个会话只需向服务进行一次自我验证,即可自动保护该会话过程中所有后续事务的安全。服务对您进行验证后,即无需在每次使用基于 Kerberos 的命令(如ftp 或 rsh)或访问 NFS 文件系统上数据时都进行自我验证。因此,无需在每次使用这些服务时都在网络上发送口令(口令在网络上可能会被拦截)。
Solaris Kerberos 服务基于麻省理工学院 (Massachusetts Institute of Technology, MIT) 开发的 Kerberos V5 网络验证协议。因此,使用过 Kerberos V5 产品的用户会感觉对 Solaris 版本非常熟悉。因为 Kerberos V5 协议是网络安全性的实际行业标准,所以 Solaris 版本可提高与其他系统的互操作性。换句话说,因为可在使用 Kerberos V5 协议的系统中使用 Solaris Kerberos 服务,所以该服务甚至允许在异构网络上进行安全事务处理。此外,该服务还会在各个域之间以及单个域内提供验证和安全服务。
通过 Kerberos 服务可灵活运行 Solaris 应用程序。可以将该服务配置为允许同时向网络服务(如 NFS 服务、telnet 和 ftp)发出基于 Kerberos 的请求和非基于 Kerberos 的请求。因此,即使当前 Solaris 应用程序运行的系统上未启用 Kerberos 服务,这些程序仍能工作。当然,也可以将 Kerberos 服务配置为仅允许基于 Kerberos 的网络请求。
Kerberos 服务提供了一种安全机制,通过该安全机制,在使用采用通用安全服务应用程序编程接口 (Generic Security Service Application Programming Interface, GSS-API) 的应用程序时,可使用 Kerberos 提供验证、完整性和保密性服务。但是,如果开发了其他安全机制,则应用程序无需继续承诺使用 Kerberos 服务。因为该服务设计为以模块形式集成到 GSS-API 中,所以使用 GSS-API 的应用程序可以利用最好地满足其需求的任何安全机制。
以下概述了 Kerberos 验证系统。有关更详细的说明,请参见Kerberos 验证系统的工作方式。
从用户的角度来看,启动 Kerberos 会话后,Kerberos 服务通常不可见。一些命令(如 rsh 或 ftp)也是如此。初始化 Kerberos 会话通常仅包括登录和提供 Kerberos 口令。
Kerberos 系统的工作围绕票证的概念展开。票证是一组标识用户或服务(如 NFS 服务)的电子信息。正如您的驾驶证可标识您的身份并表明您的驾驶级别一样,票证也可标识您的身份以及您的网络访问权限。执行基于 Kerberos 的事务时(例如,远程登录到另一台计算机),您将透明地向密钥分发中心 (KDC) 发送票证请求。KDC 将访问数据库以验证您的身份,然后返回授予您访问其他计算机的权限的票证。“透明”意味着您无需显式请求票证。请求是在执行 rlogin 命令过程中进行的。因为只有通过验证的客户机可以获取特定服务的票证,所以其他客户机不能以虚假身份使用 rlogin。
票证具有一些与其关联的属性。例如,票证可以是可转发的,这意味着它可以在其他计算机上使用,而不必进行新的验证。票证也可以是以后生效的,这意味着它要到指定时间后才会生效。票证的使用方式(例如,如何指定允许哪些用户获取哪些类型的票证)由策略设置。策略在安装或管理 Kerberos 服务时确定。
您可能会经常看到术语凭证和票证。在更为广泛的 Kerberos 范围内,两者通常可互换使用。但是,从技术上讲,凭证指的是票证和会话的会话密钥。使用 Kerberos 获取服务访问权限中对此区别进行了更详细的说明。
以下各节将进一步说明 Kerberos 验证过程。
Kerberos 验证分为两个阶段:允许进行后续验证的初始验证以及所有后续验证自身。
下图显示了如何进行初始验证。
客户机(用户或 NFS 等服务)通过从密钥分发中心 (Key Distribution Center, KDC) 请求票证授予票证 (Ticket-Granting Ticket, TGT) 开始 Kerberos 会话。此请求通常在登录时自动完成。
要获取特定服务的其他票证,需要票证授予票证。票证授予票证类似于护照。与护照一样,票证授予票证可标识您的身份并允许您获取多个“签证”,此处的“签证”(票证)不是用于外国,而是用于远程计算机或网络服务。与护照和签证一样,票证授予票证和其他各种票证具有有限的生命周期。区别在于基于 Kerberos 的命令会通知您拥有护照并为您取得签证。您不必亲自执行该事务。
与票证授予票证类似的另一种情况是可以在四个不同的滑雪场使用的三天滑雪入场卷。只要入场券未到期,您就可以在决定要去的任意一个滑雪场出示入场卷,并获取该滑雪场提供的缆车票。获取缆车票后,即可在该滑雪场随意滑雪。如果第二天去另一个滑雪场,您需要再次出示入场卷,并获取新滑雪场的另一张缆车票。区别在于基于 Kerberos 的命令会通知您拥有周末滑雪入场卷,并会为您取得缆车票。因此,您不必亲自执行该事务。
KDC 可创建票证授予票证,并采用加密形式将其发送回客户机。客户机使用其口令来解密票证授予票证。
拥有有效的票证授予票证后,只要该票证授予票证未到期,客户机便可以请求所有类型的网络操作(如 rlogin 或 telnet)的票证。此票证的有效期通常为几个小时。每次客户机执行唯一的网络操作时,都将从 KDC 请求该操作的票证。
客户机收到初始验证后,每个后续验证都按下图所示的模式进行。
客户机通过向 KDC 发送其票证授予票证作为其身份证明,从 KDC 请求特定服务(例如,远程登录到另一台计算机)的票证。
KDC 将该特定服务的票证发送到客户机。
例如,假定用户 joe 要访问已通过要求的 krb5 验证共享的 NFS 文件系统。 由于该用户已经通过了验证(即,该用户已经拥有票证授予票证),因此当其尝试访问文件时,NFS 客户机系统将自动透明地从 KDC 获取 NFS 服务的票证。
例如,假定用户 joe 在服务器 boston 上使用 rlogin。由于该用户已经通过了验证(即,该用户已经拥有票证授予票证),所以在运行 rlogin 命令时,该用户将自动透明地获取票证。该用户使用此票证可随时远程登录到 boston,直到票证到期为止。如果 joe 要远程登录到计算机 denver,则需要按照步骤 1 获取另一个票证。
客户机将票证发送到服务器。
使用 NFS 服务时,NFS 客户机会自动透明地将 NFS 服务的票证发送到 NFS 服务器。
服务器允许此客户机进行访问。
从这些步骤来看,服务器似乎并未与 KDC 通信。但服务器实际上与 KDC 进行了通信,并向 KDC 注册了其自身,正如第一台客户机所执行的操作。为简单起见,该部分已省略。
用户(如 joe)可以使用的基于 Kerberos 的(即 "Kerberized")命令包括:
ftp
rcp
rdist
rlogin
rsh
ssh
telnet
这些应用程序与同名的 Solaris 应用程序相同。但是,它们已扩展为使用 Kerberos 主体来验证事务,因此会提供基于 Kerberos 的安全性。有关主体的信息,请参见Kerberos 主体。
Kerberos 用户命令中将进一步介绍这些命令。
Kerberos 服务中的客户机由其主体标识。主体是 KDC 可以为其指定票证的唯一标识。主体可以是用户(如 joe)或服务(如 nfs 或 telnet)。
根据约定,主体名称分为三个部分:主名称、实例和领域。例如,典型的 Kerberos 主体可以是 joe/admin@ENG.EXAMPLE.COM。在本示例中:
joe 是主名称。主名称可以是此处所示的用户名或 nfs 等服务。主名称还可以是单词 host,这表示此主体是设置用于提供各种网络服务(如 ftp、rcp、rlogin 等)的服务主体。
admin 是实例。对于用户主体,实例是可选的;但对于服务主体,实例则是必需的。例如,如果用户 joe 有时充当系统管理员,则他可以使用 joe/admin 将其自身与平时的用户身份区分开来。同样,如果 joe 在两台不同的主机上拥有帐户,则他可以使用两个具有不同实例的主体名称,例如 joe/denver.example.com 和 joe/boston.example.com。请注意,Kerberos 服务会将 joe 和 joe/admin 视为两个完全不同的主体。
对于服务主体,实例是全限定主机名。例如,bigmachine.eng.example.com 就是这种实例。此示例的主名称/实例可以为 ftp/bigmachine.eng.example.com 或 host/bigmachine.eng.example.com。
ENG.EXAMPLE.COM 是 Kerberos 领域。领域将在 Kerberos 领域中介绍。
以下都是有效的主体名称:
joe
joe/admin
joe/admin@ENG.EXAMPLE.COM
ftp/host.eng.example.com@ENG.EXAMPLE.COM
host/eng.example.com@ENG.EXAMPLE.COM
领域是定义属于同一主 KDC 的一组系统的逻辑网络,类似于域。图 20–3 显示了各领域相互之间的关系。有些领域是分层的,其中,一个领域是另一个领域的超集。另外一些领域是不分层(或“直接”)的,必须定义两个领域之间的映射。Kerberos 服务的一种功能是它允许进行跨领域验证。每个领域只需在其 KDC 中有对应于另一个领域的主体项即可。此 Kerberos 功能称为跨领域验证。
每个领域都必须包括一台用于维护主体数据库的主副本的服务器。此服务器称为主 KDC 服务器。此外,每个领域还应至少包含一台从 KDC 服务器,该服务器包含主体数据库的多个副本。主 KDC 服务器和从 KDC 服务器都可创建用于建立验证的票证。
领域还可以包含两种其他类型的 Kerberos 服务器。Kerberos 网络的应用程序服务器是用于提供对基于 Kerberos 的应用程序(如 ftp、telnet 和 rsh)的访问的服务器。领域还可以包括 NFS 服务器,该服务器使用 Kerberos 验证来提供 NFS 服务。如果安装了 SEAM 1.0 或 1.0.1,则领域可能会包括 Kerberos 网络应用程序服务器。
除了提供安全的用户验证外,Kerberos 服务还会提供两种安全服务:
完整性-正如验证服务可确保网络中客户机的身份真实可靠一样,完整性服务可确保客户机发送的数据有效并且在传输过程中未被篡改。完整性服务通过数据的加密校验和计算来实现。完整性还包括用户验证。
保密性-保密性服务可进一步增强安全性。保密性服务不仅包括对所传输数据的完整性进行验证,还会在传输之前加密数据,防止数据遭到窃听。保密性服务也对用户进行验证。
当前,在属于 Kerberos 服务的各种基于 Kerberos 的应用程序中,仅有 ftp 命令允许用户在运行时(“即时”)更改安全服务。开发者可以设计基于 RPC 的应用程序,以便使用 RPCSEC_GSS 编程接口来选择安全服务。
许多发行版中已包括 Kerberos 服务组件。Kerberos 服务以及对用于支持 Kerberos 服务的基本操作系统进行的更改最初都使用产品名 "Sun Enterprise Authentication Mechanism"(缩写为 SEAM)来发行。由于 Solaris 软件中包括的 SEAM 产品部件越来越多,因此 SEAM 发行版的内容会相应减少。Solaris 10 发行版中包括了 SEAM 产品的所有部件,因此不再需要 SEAM 产品。由于历史原因,文档中仍存在 SEAM 产品名。
下表说明了每个发行版中包括的组件。各个产品发行版按时间顺序列出。以下各节中对所有组件进行了说明。
表 20–1 Kerberos 发行版内容
发行版名称 |
内容 |
---|---|
Solaris Easy Access Server 3.0 中的 SEAM 1.0 |
Solaris 2.6 和 7 发行版中 Kerberos 服务的完整发行版 |
Solaris 8 发行版中的 Kerberos 服务 |
仅 Kerberos 客户机软件 |
Solaris 8 Admin Pack 中的 SEAM 1.0.1 |
Solaris 8 发行版中的 Kerberos KDC 和远程应用程序 |
Solaris 9 发行版中的 Kerberos 服务 |
仅 Kerberos KDC 和客户机软件 |
SEAM 1.0.2 |
Solaris 9 发行版中的 Kerberos 远程应用程序 |
Solaris 10 发行版中的 Kerberos 服务 |
带有增强功能的 Kerberos 服务的完整发行版 |
与 MIT 发布的 Kerberos V5 产品类似,Solaris Kerberos 服务也包括以下内容:
密钥分发中心 (Key Distribution Center, KDC)(主):
Kerberos 数据库管理守护进程-kadmind。
Kerberos 票证处理守护进程-krb5kdc。
从 KDC。
数据库管理程序-kadmin 和 kadmin.local。
数据库传播软件-kprop。
用于获取、查看和销毁票证的用户程序-kinit、klist 和 kdestroy。
用于更改 Kerberos 口令的用户程序-kpasswd。
远程应用程序-ftp、rcp、rdist、rlogin、rsh、ssh 和 telnet。
远程应用程序守护进程-ftpd、rlogind、rshd、sshd 和 telnetd。
管理实用程序-ktutil 和 kdb5_util。
通用安全服务应用程序编程接口 (Generic Security Service Application Programming Interface, GSS-API)-允许应用程序使用多种安全机制,并且不需要在每次添加新机制时重新编译应用程序。因为 GSS-API 与计算机无关,所以适用于 Internet 上的各种应用程序。使用 GSS-API,应用程序可包括完整性和保密性的安全服务以及验证。
RPCSEC_GSS 应用程序编程接口 (Application Programming Interface, API)-允许 NFS 服务使用 Kerberos 验证。RPCSEC_GSS 是一种安全特性,可提供与要使用的机制无关的安全服务。RPCSEC_GSS 位于 GSS-API 层的顶部。使用 RPCSEC_GSS 的应用程序可以使用所有基于可插拔 GSS_API 的安全机制。
多个库。
此外,Solaris Kerberos 服务还包括:
SEAM 管理工具 (gkadmin)-允许您管理 KDC。借助此基于 JavaTM 技术的 GUI,管理员可以执行通常通过 kadmin 命令执行的任务。
可插拔验证模块 (Pluggable Authentication Module, PAM)-允许应用程序使用各种验证机制。使用 PAM 可使登录和注销操作对用户而言透明化。
内核模块-为 NFS 提供 GSS-API 和 RPCSEC_GSS API 的内核实现。
Solaris 10 发行版中包括以下 Kerberos 增强功能。其中的一些增强功能已在先前的 Software Express 发行版中引入,并在 Solaris 10 Beta 版中进行了更新。
远程应用程序(如 ftp、rcp、rdist、rlogin、rsh、ssh 和 telnet)支持 Kerberos 协议。有关更多信息,请参见每个命令或守护进程的手册页和 krb5_auth_rules(5) 手册页。
Kerberos 主体数据库现在可以通过增量更新进行传送,而不必每次传送整个数据库。增量传播有以下优点:
增强了跨服务器数据库的一致性
所需资源(网络、CPU 等)更少
更新的传播更加及时
是一种自动传播方法
可提供有助于自动配置 Kerberos 客户机的新脚本。此脚本可以帮助管理员迅速而轻松地安装 Kerberos 客户机。有关使用新脚本的过程,请参见配置 Kerberos 客户机。此外,有关更多信息,请参见 kclient(1M) 手册页。
在 Kerberos 服务中添加了几种新的加密类型。这几种加密类型提高了安全性,并增强了与支持这几种类型的其他 Kerberos 实现的兼容性。有关更多信息,请参见使用 Kerberos 加密类型。新的加密类型包括:
AES,该加密类型可用于高速、高安全性的 Kerberos 会话加密。通过加密框架启用 AES。
ARCFOUR-HMAC,该加密类型可提供与其他 Kerberos 实现的更好兼容性。
带有 SHA1 的三重 DES (3DES),该加密类型提高了安全性,还增强了与支持此种加密类型的其他 Kerberos 实现的互操作性。
KDC 软件、用户命令和用户应用程序现在支持使用 TCP 网络协议。这种增强功能可提供更强健的操作,以及与其他 Kerberos 实现(包括 Microsoft 的 Active Directory)之间更好的互操作性。现在,KDC 可在传统的 UDP 端口和 TCP 端口进行侦听,因此可响应使用 UDP 或 TCP 协议的请求。用户命令和应用程序在将请求发送到 KDC 时,首先尝试使用 UDP,如果该操作失败,则尝试使用 TCP。
KDC 软件(包括 kinit、klist 和 kprop 命令)中增加了对 IPv6 的支持。缺省情况下,提供对 IPv6 地址的支持。无需更改任何配置参数即可启用 IPv6 支持。kadmin 和 kadmind 命令不支持 IPv6。
kadmin 命令的多个子命令中添加了新的 -e 选项。使用此新选项可以在创建主体过程中选择加密类型。有关更多信息,请参见 kadmin(1M) 手册页。
对 pam_krb5 模块进行扩充是为了使用 PAM 框架来管理 Kerberos 凭证高速缓存。有关更多信息,请参见 pam_krb5(5) 手册页。
支持自动搜索以下各项:Kerberos KDC、管理服务器、kpasswd 服务器以及使用 DNS 查找的主机(或域名)到领域的映射。此增强功能减少了安装 Kerberos 客户机所需的某些步骤。客户机可通过使用 DNS 而不是通过读取配置文件来找到 KDC 服务器。有关更多信息,请参见 krb5.conf(4) 手册页。
引入了称为 pam_krb5_migrate 的新 PAM 模块。该新模块可以帮助那些尚未有 Kerberos 帐户的用户自动向本地 Kerberos 领域迁移。有关更多信息,请参见 pam_krb5_migrate(5) 手册页。
现在,~/.k5login 文件可以用于 GSS 应用程序 ftp 和 ssh。有关更多信息,请参见 gss_auth_rules(5) 手册页。
kproplog 实用程序已更新,可输出每个日志项的所有属性名。有关更多信息,请参见 kproplog(1M) 手册页。
使用新的配置文件选项,可以基于每个领域对严格的 TGT 验证功能进行选择性配置。有关更多信息,请参见 krb5.conf(4) 手册页。
通过扩充更改口令实用程序,Solaris Kerberos V5 管理服务器可接受未运行 Solaris 软件的客户机的口令更改请求。有关更多信息,请参见 kadmind(1M) 手册页。
重放高速缓存的缺省位置已从基于 RAM 的文件系统移动到 /var/krb5/rcache/ 中的持久性存储器。新位置在系统重新引导时可以避免重放。rcache 代码的性能得到增强。但是,由于使用了持久性存储器,因此整个重放高速缓存的性能有可能降低。
现在,可以将重放高速缓存配置为使用文件存储器或仅限于内存的存储器。 有关可为密钥表和凭证高速缓存类型或位置配置的环境变量的更多信息,请参阅 krb5envvar(5) 手册页。
对 Kerberos GSS 机制来说,GSS 凭证表不再是必需的。有关更多信息,请参见将 GSS 凭证映射到 UNIX 凭证或 gsscred(1M)、gssd(1M) 和 gsscred.conf(4) 手册页。
Kerberos 实用程序 kinit 和 ktutil 现在都基于 MIT Kerberos 版本 1.2.1。此更改为 kinit 命令添加了新的选项,并为 ktutil 命令添加了新的子命令。有关更多信息,请参见 kinit(1) 和 ktutil(1) 手册页。
Solaris Kerberos 密钥分发中心 (KDC) 和 kadmind 现在都基于 MIT Kerberos 版本 1.2.1。现在,KDC 在缺省情况下是一个基于二叉树的数据库,这比当前基于散列的数据库更可靠。有关更多信息,请参见 kdb5_util(1M) 手册页。
kpropd、kadmind、krb5kdc 和 ktkt_warnd 守护进程由服务管理工具管理。 可以使用 svcadm 命令对此服务执行管理操作,如启用、禁用或重新启动。 可使用 svcs 命令来查询此服务对应的所有守护进程的状态。有关服务管理工具的概述,请参阅《系统管理指南:基本管理》中的第 14 章 “管理服务(概述)”。
在 Solaris 10 6/06 发行版中,ktkt_warnd 守护进程可以自动更新凭证,而不是在凭证即将到期时才向用户发出警告。用户必须登录才能自动更新凭证。
Solaris 9 发行版包括Kerberos 组件中除远程应用程序外的所有组件。
SEAM 1.0.2 发行版包括远程应用程序。这些应用程序是 Solaris 9 发行版唯一未包括的部分 SEAM 1.0。远程应用程序的组件如下:
客户机应用程序-ftp、rcp、rlogin、rsh 和 telnet
服务器守护进程-ftpd、rlogind、rshd 和 telnetd
Solaris 8 发行版仅包括 Kerberos 服务的客户端部分,因此有许多组件未包括在内。借助此产品,运行 Solaris 8 发行版的系统可成为 Kerberos 客户机,而不需要单独安装 SEAM 1.0.1。要使用这些功能,必须安装使用 Solaris Easy Access Server 3.0 或 Solaris 8 Admin Pack 的 KDC、MIT 分发或 Windows 2000。如果没有配置 KDC 来分发票证,则客户端组件将不起作用。此发行版中包括以下组件:
用于获取、查看和销毁票证的用户程序-kinit、klist 和 kdestroy。
用于更改 Kerberos 口令的用户程序-kpasswd。
密钥表管理实用程序-ktutil。
可插拔验证模块 (Pluggable Authentication Module, PAM) 的新增功能-允许应用程序使用各种验证机制。使用 PAM 可使登录和注销操作对用户而言透明化。
GSS_API 插件-提供 Kerberos 协议和加密支持。
NFS 客户机和服务器支持。
SEAM 1.0.1 发行版包括 Solaris 8 发行版中未包括的所有 SEAM 1.0 发行版组件。这些组件包括:
密钥分发中心 (Key Distribution Center, KDC)(主):
Kerberos 数据库管理守护进程-kadmind
Kerberos 票证处理守护进程-krb5kdc
从 KDC。
数据库管理程序-kadmin 和 kadmin.local。
数据库传播软件-kprop。
远程应用程序-ftp、rcp、rlogin、rsh 和 telnet。
远程应用程序守护进程-ftpd、rlogind、rshd 和 telnetd。
管理实用程序-kdb5_util。
SEAM 管理工具 (gkadmin)-允许您管理 KDC。借助此基于 Java 技术的 GUI,管理员可以执行通常通过 kadmin 命令执行的任务。
预配置过程-允许您设置用于安装和配置 SEAM 1.0.1 的参数,使用这些参数可以自动进行 SEAM 安装。此过程对于批量安装尤其有用。
多个库。
SEAM 1.0 发行版包括Kerberos 组件中的所有项以及以下各项:
实用程序 (gsscred) 和守护进程 (gssd)-这些程序有助于将 UNIX 用户 ID (user ID, UID) 映射到主体名称。需要使用这些程序是因为 NFS 服务器使用 UNIX UID 来标识用户,而不是使用以不同格式存储的主体名称来标识用户。
通用安全服务应用程序编程接口 (Generic Security Service Application Programming Interface, GSS-API)-允许应用程序使用多种安全机制,并且不需要在每次添加新机制时重新编译应用程序。因为 GSS-API 与计算机无关,所以适用于 Internet 上的各种应用程序。使用 GSS-API,应用程序可包括完整性和保密性的安全服务以及验证。
RPCSEC_GSS 应用程序编程接口 (Application Programming Interface, API)-允许 NFS 服务使用 Kerberos 验证。RPCSEC_GSS 是一种安全特性,可提供与要使用的机制无关的安全服务。RPCSEC_GSS 位于 GSS-API 层的顶部。使用 RPCSEC_GSS 的应用程序可以使用所有基于可插拔 GSS_API 的安全机制。
预配置过程-允许您设置用于安装和配置 SEAM 1.0.1 的参数,使用这些参数可以自动进行 SEAM 安装。此过程对于批量安装尤其有用。
参与安装和维护 Kerberos 服务的管理员应学习本章。本章介绍管理员在安装或配置服务之前必须确定的一些安装和配置选项。
以下是系统管理员或其他技术支持人员应学习的主题的列表:
在安装 Kerberos 服务之前,必须解决几个配置问题。虽然在初始安装后可以更改配置,但每向系统中添加一台新客户机便会增加执行此操作的难度。而且某些更改可能需要进行完全重新安装,所以在规划 Kerberos 配置时最好应考虑长期目标。
部署 Kerberos 基础结构涉及以下任务:安装 KDC、为主机创建密钥以及迁移用户。 重新配置 Kerberos 部署与执行初始部署一样困难,因此要认真规划部署以避免必须进行重新配置。
领域是一个类似于域的逻辑网络,用于定义一组系统,这些系统位于同一主 KDC 下。与建立 DNS 域名一样,在配置 Kerberos 服务之前,应解决以下问题以便进行跨领域验证:领域名称、领域数和每个领域的大小以及各领域之间的关系。
领域名称可以由任何 ASCII 字符串组成。通常,领域名称与 DNS 域名相同,只不过领域名称采用大写。使用常见的名称时,这种约定有助于将 Kerberos 服务问题与 DNS 名称空间问题区分开来。如果不使用 DNS 或选择使用其他字符串,则可以使用任何字符串。但是,配置过程需要更多工作。采用符合标准 Internet 名称结构的领域名称是明智之举。
安装需要的领域数取决于下列因素:
要支持的客户机数。一个领域中具有太多客户机会增加管理难度,最终会要求对领域进行分割。确定可以支持的客户机数的主要因素如下:
每台客户机产生的 Kerberos 通信量
物理网络的带宽
主机的速度
由于每种安装都有不同的限制,所以不存在确定最大客户机数的原则。
客户机间相隔的距离。如果客户机位于不同的地理区域中,则可以设置几个较小的领域。
可作为 KDC 安装的主机数。每个领域中应至少有两台 KDC 服务器:一台主服务器和一台从服务器。
建议将 Kerberos 领域与管理域结合使用。请注意,Kerberos V 领域可以跨与该领域相对应的 DNS 域的多个子域。
为进行跨领域验证而配置多个领域时,需要决定如何将这些领域绑定在一起。可以在这些领域之间建立分层关系,以便提供到相关域的自动路径。当然,必须正确配置分层链中的所有领域。自动路径可以减轻管理负担。但是,如果域有许多层,您可能不想使用缺省路径,因为它需要太多事务。
您也可以选择直接建立连接。当两个分层领域之间存在的层太多或不存在分层关系时,直接连接最有用。必须在使用连接的所有主机上的 /etc/krb5/krb5.conf 文件中定义连接。因此,还需要执行一些其他工作。有关介绍,请参见Kerberos 领域。有关多个领域的配置过程,请参见配置跨领域验证。
主机名到领域名称的映射在 krb5.conf 文件的 domain_realm 部分中定义。可以根据需要对整个域和个别的主机定义这些映射。
DNS 还可用于查找有关 KDC 的信息。如果使用 DNS,则会使信息更改变得更加容易,因为每次执行更改时,无需编辑所有客户机上的 krb5.conf 文件。有关更多信息,请参见 krb5.conf(4) 手册页。
使用 Kerberos 服务时,强烈建议已在所有主机上配置并运行 DNS 服务。如果使用 DNS,则必须在所有主机或未在任何主机上启用它。如果 DNS 可用,则主体应包含每台主机的全限定域名 (Fully Qualified Domain Name, FQDN)。例如,如果主机名是 boston,DNS 域名是 example.com,领域名称是 EXAMPLE.COM,则该主机的主体名称应为 host/boston.example.com@EXAMPLE.COM。本书中的示例要求对每台主机配置 DNS 并且使用 FQDN。
包含主机的 FQDN 的主体名称应与 /etc/resolv.conf 文件中说明 DNS 域名的字符串匹配。指定主体的 FQDN 时,Kerberos 服务要求 DNS 域名必须为小写字母。DNS 域名可以包含大小写字母,但在创建主机主体时只可以使用小写字母。例如,DNS 域名为 example.com、Example.COM 还是任何其他变体并不重要。主机的主体名称仍为 host/boston.example.com@EXAMPLE.COM。
Kerberos 服务可以在没有运行 DNS 服务的情况下运行。但是,一些主要功能(例如,与其他领域通信的功能)将不能工作。如果未配置 DNS,则可以将简单的主机名用作实例名称。在此情况下,主体将为 host/boston@EXAMPLE.COM。如果稍后启用 DNS,则必须删除并替换 KDC 数据库中的所有主机主体。
此外,还配置了服务管理工具,以便未运行 DNS 服务时,不会启动许多守护进程或命令。已将 kdb5_util、kadmind 和 kpropd 守护进程以及 kprop 命令配置为依赖于 DNS 服务。要充分利用使用 Kerberos 服务和 SMF 时可用的功能,必须在所有主机上配置 DNS。
缺省情况下,端口 88 和端口 750 用于 KDC,而端口 749 用于 KDC 管理守护进程。可以使用不同的端口号。但是,如果更改端口号,则必须在每台客户机上更改 /etc/services 文件和 /etc/krb5/krb5.conf 文件。此外,还必须更新每个 KDC 上的 /etc/krb5/kdc.conf 文件。
与主 KDC 一样,从 KDC 也会为客户机生成凭证。如果主 KDC 不可用,则从 KDC 将提供备份。每个领域应至少有一个从 KDC。可能会需要其他从 KDC,这取决于以下因素:
领域中的物理段的个数。通常,应将网络设置为至少每个段都可以独立于领域的其他部分而单独工作。为此,必须能够从每个段访问 KDC。此实例中的 KDC 可以是主 KDC 或从 KDC。
领域中的客户机数。通过添加更多从 KDC 服务器,可以减少当前服务器的负荷。
可能会添加太多从 KDC。请记住,必须将 KDC 数据库传播到每台服务器,因此安装的 KDC 服务器越多,更新领域中的数据所用的时间就越长。此外,因为每个从 KDC 都会保存一份 KDC 数据库的副本,所以较多的从 KDC 会增加破坏安全性的风险。
另外,可以很容易地将一个或多个从 KDC 配置为与主 KDC 交换。采用这种方式配置至少一个从 KDC 的优点是:如果主 KDC 由于任何原因出现故障,则可以使用很容易交换为主 KDC 的预配置系统。有关如何配置可交换的从 KDC 的说明,请参见交换主 KDC 和从 KDC。
对于需要 GSS 凭证名称到 UNIX 用户 ID (user ID, UID) 的映射的 GSS 应用程序(例如 NFS),Kerberos 服务提供了该缺省映射。使用 Kerberos 服务时,GSS 凭证名称相当于 Kerberos 主体名称。缺省映射算法是采用具有一个组成部分的 Kerberos 主体名称,并使用该组成部分(即主体的主名称)来查找 UID。可以使用 /etc/krb5/krb5.conf 中的 auth_to_local_realm 参数在缺省领域或允许的任何领域中进行查找。例如,可以使用口令表将用户主体名称 bob@EXAMPLE.COM 映射到名为 bob 的 UNIX 用户的 UID。但不会映射用户主体名称 bob/admin@EXAMPLE.COM,因为该主体名称包括 admin 的实例部分。如果用户凭证的缺省映射满足要求,则无需填充 GSS 凭证表。在先前的发行版中,需要填充 GSS 凭证表才能使 NFS 服务工作。如果缺省映射不满足要求(例如,如果要映射包含实例部分的主体名称),应使用其他方法。有关更多信息,请参见:
可以使用 PAM 框架自动迁移在缺省 Kerberos 领域中没有有效用户帐户的 UNIX 用户。具体而言,将在 PAM 服务的验证栈中使用 pam_krb5_migrate 模块。该模块将对服务进行设置,以便每当没有 Kerberos 主体的用户使用其口令成功登录系统时,便会自动为该用户创建 Kerberos 主体。新的主体将使用相同的口令。有关如何使用 pam_krb5_migrate 模块的说明,请参见在 Kerberos 领域中配置用户自动迁移。
存储在主 KDC 上的数据库必须定期传播到从 KDC。可以将数据库的传播配置为增量。增量过程只将更新的信息传播到从 KDC,而不是整个数据库。 有关数据库传播的更多信息,请参见管理 Kerberos 数据库。
如果不使用增量传播,则要解决的首要问题之一是确定更新从 KDC 的频率。需要获取所有客户机可用的最新信息时,必须权衡完成更新所需的时间。
在一个领域中有许多 KDC 的大型安装中,一个或多个从 KDC 可以传播数据,以便以并行方式完成该过程。此策略减少了更新所用的时间,但同时增加了管理领域的复杂性。有关此策略的完整说明,请参见设置并行传播。
所有参与 Kerberos 验证系统的主机都必须在指定的最长时间内同步其内部时钟。称为时钟相位差的此功能提供了另一种 Kerberos 安全检查方法。如果任意两台参与主机之间的时间偏差超过了时钟相位差,则请求会被拒绝。
一种同步所有时钟的方法是使用网络时间协议 (Network Time Protocol, NTP) 软件。有关更多信息,请参见同步 KDC 和 Kerberos 客户机的时钟。还存在其他同步时钟的方法,因此并非一定要使用 NTP。但是,由于存在时钟相位差,所以应使用某种形式的同步来防止访问失败。
Solaris 10 发行版中的一个新功能是 kclient 安装实用程序。该实用程序可以交互模式或非交互模式运行。在交互模式下,将提示用户输入特定于 Kerberos 的参数值,从而允许用户在安装客户机时更改现有安装。在非交互模式下,将使用先前设置了参数值的文件。此外,可以在非交互模式下使用命令行选项。交互模式和非交互模式所需的步骤都比手动过程所需的步骤少,因此该过程可以更快完成并且不容易出错。有关所有客户机安装过程的说明,请参见配置 Kerberos 客户机。
加密类型是指定 Kerberos 服务中使用的加密算法、加密模式和散列算法的标识符。Kerberos 服务中的密钥具有关联的加密类型,用于标识服务使用该密钥执行加密操作时要使用的加密算法和模式。以下是 Solaris 10 发行版中支持的加密类型:
des-cbc-md5
des-cbc-crc
des3-cbc-sha1
arcfour-hmac-md5
arcfour-hmac-md5-exp
aes128-cts-hmac-sha1-96
此外,如果安装了非捆绑强加密软件包,则可以将 aes256-cts-hmac-sha1-96 加密类型用于 Kerberos 服务。
如果要更改加密类型,则应在创建新的主体数据库时进行更改。由于 KDC 服务器与 KDC 客户机之间存在交互,所以在现有数据库上更改加密类型很困难。除非您要重新创建数据库,否则不要设置这些参数。有关更多信息,请参阅使用 Kerberos 加密类型。
如果安装了未运行 Solaris 10 发行版的主 KDC,则在升级主 KDC 之前,必须将从 KDC 升级到 Solaris 10 发行版。Solaris 10 主 KDC 将使用新的加密类型,而较早版本的从 KDC 将无法处理这些加密类型。
SEAM Administration Tool 将使用联机帮助 URL,因此应正确定义该 URL,以使“帮助内容“菜单正常工作。可以在任何合适的服务器上安装本手册的 HTML 版本。或者,可以决定使用 http://docs.sun.com 中的文档集。
该 URL 是在配置主机以使用 Kerberos 服务时在 krb5.conf 文件中指定的。该 URL 应指向本书的“管理主体和策略(任务)”章中标题为 "SEAM Administration Tool" 的一节。如果存在更适合的位置,可以选择另一个 HTML 页面。
本章介绍 KDC 服务器、网络应用程序服务器、NFS 服务器和 Kerberos 客户机的配置过程。其中许多过程都要求超级用户访问权限,因此这些过程应由系统管理员或高级用户来执行。本章还将介绍跨领域配置过程以及与 KDC 服务器相关的其他主题。
本章包含以下主题:
部分配置过程依赖于其他配置过程,且必须按特定顺序执行。这些过程通常会建立使用 Kerberos 服务所需的服务。其他过程不依赖于任何顺序,且可以在适当的情况下执行。以下任务列表给出了 Kerberos 安装的建议顺序。
任务 |
说明 |
参考 |
---|---|---|
1. 规划 Kerberos 安装。 |
在开始软件配置过程之前先解决配置问题。从长远来看,提前规划可以节省时间和其他资源。 | |
2. (可选)安装 NTP。 |
配置网络时间协议 (Network Time Protocol, NTP) 软件或其他时钟同步协议。要使 Kerberos 服务正常工作,必须同步领域中所有系统的时钟。 | |
3. 配置主 KDC 服务器。 |
配置并构建领域的主 KDC 服务器和数据库。 | |
4. 配置从 KDC 服务器。 |
配置并构建领域的从 KDC 服务器。 | |
5. (可选)增强 KDC 服务器的安全性。 |
阻止对 KDC 服务器的安全性破坏。 | |
6. (可选)配置可交换的 KDC 服务器。 |
使交换主 KDC 和从 KDC 的任务更容易执行。 |
任务 |
说明 |
参考 |
---|---|---|
配置跨领域验证。 |
启用领域之间的通信。 | |
配置 Kerberos 应用程序服务器。 |
使服务器支持使用 Kerberos 验证的服务,例如 ftp、telnet 和 rsh。 | |
配置 Kerberos 客户机。 |
使客户机使用 Kerberos 服务。 | |
配置 Kerberos NFS 服务器。 |
使服务器共享要求 Kerberos 验证的文件系统。 | |
增强应用程序服务器的安全性。 |
通过只允许访问经过验证的事务来增强应用程序服务器的安全性。 |
安装 Kerberos 软件后,必须配置 KDC 服务器。配置一个主 KDC 和至少一个从 KDC 以提供颁发凭证的服务。这些凭证是 Kerberos 服务的基础,因此在尝试其他任务之前必须安装 KDC。
主 KDC 和从 KDC 之间的最大差别是,只有主 KDC 可以处理数据库管理请求。例如,更改口令或添加新的主体必须在主 KDC 上完成。然后可以将这些更改传播到从 KDC。从 KDC 和主 KDC 都可生成凭证。此功能可在主 KDC 无法响应时提供冗余性。
在此过程中,将配置增量传播。此外,还将使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
admin 主体 = kws/admin
联机帮助 URL = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
调整该 URL 以指向“SEAM Administration Tool”部分,如SEAM Administration Tool 中的联机帮助 URL中所述。
此过程要求 DNS 必须正在运行。有关此主 KDC 是否可交换的特定命名说明,请参见交换主 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://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956 } |
在此示例中,更改了 default_realm、kdc 和 admin_server 行以及所有 domain_realm 项。此外,还编辑了定义 help_url 的行。
如果要限制加密类型,可以设置 default_tkt_enctypes 或 default_tgs_enctypes 行。有关限制加密类型涉及的问题的说明,请参阅使用 Kerberos 加密类型。
编辑 KDC 配置文件 (kdc.conf )。
需要更改领域名称。有关此文件的完整说明,请参见 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 admin_keytab = /etc/krb5/kadm5.keytab 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 -r EXAMPLE.COM -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> |
如果领域名称与服务器的名称空间中的域名相同,则无需后跟领域名称的 -r 选项。
编辑 Kerberos 访问控制列表文件 (kadm5.acl)。
填充后,/etc/krb5/kadm5.acl 文件应包含允许管理 KDC 的所有主体名称。
kws/admin@EXAMPLE.COM * |
通过该项,EXAMPLE.COM 领域中的 kws/admin 主体可以修改 KDC 中的主体或策略。缺省安装包括用于匹配所有 admin 主体的星号 (*)。此缺省安装可能会存在安全风险,因此更安全的方法是包括所有 admin 主体的列表。有关更多信息,请参见 kadm5.acl(4) 手册页。
启动 kadmin.local 命令并添加主体。
接下来的子步骤创建 Kerberos 服务使用的主体。
kdc1 # /usr/sbin/kadmin.local kadmin.local: |
可以根据需要添加任意数量的 admin 主体。要完成 KDC 配置过程,必须至少添加一个 admin 主体。对于此示例,将添加一个 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 主体。
kiprop 主体用于授权来自主 KDC 的更新。
kadmin.local: addprinc -randkey kiprop/kdc1.example.com Principal "kiprop/kdc1.example.com@EXAMPLE.COM" created. kadmin.local: |
此命令序列创建包含 kadmin 和 changepw 的主体项的特殊密钥表文件。kadmind 服务需要使用这些主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc1.example.com Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc1.example.com EEntry for principal changepw/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal changepw/kdc1.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal changepw/kdc1.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal changepw/kdc1.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw Entry for principal kadmin/changepw with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: |
将主 KDC 服务器的 kiprop 主体添加到 kadmind 密钥表文件中。
通过将 kiprop 主体添加到 kadm5.keytab 文件中,kadmind 命令可以在启动增量传播时对其自身进行验证。
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kiprop/kdc1.example.com Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: |
退出 kadmin.local。
已经添加了接下来的步骤所需的所有主体。
kadmin.local: quit |
启动 Kerberos 守护进程。
kdc1 # svcadm enable -r network/security/krb5kdc kdc1 # svcadm enable -r network/security/kadmin |
启动 kadmin 并添加更多主体。
此时,可以使用 SEAM Administration Tool 添加主体。为此,必须使用此过程前面创建的一个 admin 主体名称登录。但是,为简单起见,给出了以下命令行示例。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
基于 Kerberos 的应用程序(例如 klist 和 kprop)将使用主机主体。Solaris 10 客户机在挂载经过验证的 NFS 文件系统时将使用此主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey host/kdc1.example.com Principal "host/kdc1.example.com@EXAMPLE.COM" created. kadmin: |
安装 Kerberos 客户机过程中 kclient 实用程序将使用此主体。如果不打算使用此实用程序,则无需添加该主体。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: |
将主 KDC 的 host 主体添加到主 KDC 的密钥表文件中。
通过将主机主体添加到密钥表文件中,可以自动使用此主体。
kadmin: ktadd host/kdc1.example.com 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。
kadmin: quit |
(可选的)使用 NTP 或其他时钟同步机制同步主 KDC 时钟。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟都必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
配置从 KDC。
要提供冗余性,请确保至少安装一个从 KDC。有关特定说明,请参见如何配置从 KDC。
在此过程中,将配置一个名为 kdc2 的新从 KDC。此外,还将配置增量传播。此过程使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com
admin 主体 = kws/admin
联机帮助 URL = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
调整该 URL 以指向“SEAM Administration Tool”部分,如SEAM Administration Tool 中的联机帮助 URL中所述。
必须配置主 KDC。有关此从 KDC 是否可交换的特定说明,请参见交换主 KDC 和从 KDC。
在主 KDC 上,成为超级用户。
在主 KDC 上,启动 kadmin。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
在主 KDC 上,将从主机主体添加到数据库中(如果尚未执行此操作)。
要使从 KDC 正常工作,该从 KDC 必须具有主机主体。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey host/kdc2.example.com Principal "host/kdc2@EXAMPLE.COM" created. kadmin: |
在主 KDC 上,创建 kiprop 主体。
kiprop 主体用于授权来自主 KDC 的增量传播。
kadmin: addprinc -randkey kiprop/kdc2.example.com Principal "kiprop/kdc2.example.com@EXAMPLE.COM" created. kadmin: |
退出 kadmin。
kadmin: quit |
在主 KDC 上,编辑 Kerberos 配置文件 (krb5.conf)。
需要添加每个从 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 上,将 kiprop 项添加到 kadm5.acl 中。
通过此项,主 KDC 可以接收对 kdc2 服务器的增量传播请求。
kdc1 # cat /etc/krb5/kadm5.acl */admin@EXAMPLE.COM * kiprop/kdc2.example.com@EXAMPLE.COM p |
在主 KDC 上,重新启动 kadmind 以使用 kadm5.acl 文件中的新项。
kdc1 # svcadm restart network/security/kadmin |
在所有从 KDC 上,复制主 KDC 服务器的 KDC 管理文件。
由于主 KDC 服务器已更新每台 KDC 服务器所需的信息,因此需要在所有从 KDC 上执行此步骤。可以使用 ftp 或类似的传送机制从主 KDC 获取以下文件的副本:
/etc/krb5/krb5.conf
/etc/krb5/kdc.conf
在所有从 KDC 上,将主 KDC 和每个从 KDC 的项添加到数据库传播配置文件 kpropd.acl 中。
需要更新所有从 KDC 服务器上的此信息。
kdc2 # cat /etc/krb5/kpropd.acl host/kdc1.example.com@EXAMPLE.COM host/kdc2.example.com@EXAMPLE.COM |
在所有从 KDC 上,请确保未填充 Kerberos 访问控制列表文件 kadm5.acl。
未修改的 kadm5.acl 文件如下所示:
kdc2 # cat /etc/krb5/kadm5.acl */admin@___default_realm___ * |
如果此文件中包含 kiprop 项,请删除它们。
在新的从 KDC 上,更改 kdc.conf 中的项。
将 sunw_dbprop_master_ulogsize 项替换为定义 sunw_dbprop_slave_poll 的项。该项将轮询时间设置为 2 分钟。
kdc1 # cat /etc/krb5/kdc.conf [kdcdefaults] kdc_ports = 88,750 [realms] EXAMPLE.COM= { profile = /etc/krb5/krb5.conf database_name = /var/krb5/principal admin_keytab = /etc/krb5/kadm5.keytab 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 上,启动 kadmin 命令。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
kdc2 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
使用 kadmin 将从 KDC 的主机主体添加到从 KDC 的密钥表文件中。
此项可使 kprop 和其他基于 Kerberos 的应用程序正常工作。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: ktadd host/kdc2.example.com 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 主体添加到从 KDC 的密钥表文件中。
通过将 kiprop 主体添加到 krb5.keytab 文件中,kpropd 命令可以在启动增量传播时对其自身进行验证。
kadmin: ktadd kiprop/kdc2.example.com 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。
kadmin: quit |
在新的从 KDC 上,启动 Kerberos 传播守护进程。
kdc2 # /usr/lib/krb5/kpropd |
在新的从 KDC 上,使用 kdb5_util 创建一个存储文件。
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> |
中止 Kerberos 传播守护进程。
kdc2 # pkill kpropd |
(可选的)在新的从 KDC 上,使用 NTP 或其他时钟同步机制同步主 KDC 时钟。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
在新的从 KDC 上,启动 KDC 守护进程 (krb5kdc)。
启用 krb5kdc 服务时,如果系统配置为从 KDC,则还将启动 kpropd。
kdc2 # svcadm enable network/security/krb5kdc |
有几种方法可以将各个领域链接在一起,从而可以在一个领域中验证另一个领域中的用户。通常,跨领域验证通过在两个领域之间建立共享私钥来实现。领域之间的关系可以是分层关系或直接关系(请参见领域分层结构)。
此过程中的示例使用 ENG.EAST.EXAMPLE.COM 和 EAST.EXAMPLE.COM 两个领域。将按两个方向建立跨领域验证。必须在两个领域的主 KDC 上完成此过程。
必须配置每个领域的主 KDC。要完全测试验证过程,必须安装多个客户机或从 KDC。
成为第一个主 KDC 的超级用户。
为两个领域创建票证授予票证服务主体。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
# /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: addprinc krbtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM Enter password for principal krgtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM: <Type password> kadmin: addprinc krbtgt/EAST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM Enter password for principal krgtgt/EAST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM: <Type password> kadmin: quit |
在两个 KDC 中为每个服务主体指定的口令必须相同。因此,服务主体 krbtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM 的口令在两个领域中一定相同。
将相应项添加到 Kerberos 配置文件 (krb5.conf) 中以定义每个领域的域名。
# cat /etc/krb5/krb5.conf [libdefaults] . . [domain_realm] .eng.east.example.com = ENG.EAST.EXAMPLE.COM .east.example.com = EAST.EXAMPLE.COM |
在此示例中,定义了 ENG.EAST.EXAMPLE.COM 和 EAST.EXAMPLE.COM 领域的域名。由于会从上向下搜索文件,因此先包含子域非常重要。
将 Kerberos 配置文件复制到此领域中的所有客户机。
要使跨领域验证正常工作,所有系统(包括从 KDC 和其他服务器)必须安装 Kerberos 配置文件 (/etc/krb5/krb5.conf) 的新版本。
在第二个领域中重复以上所有步骤。
此过程中的示例使用 ENG.EAST.EXAMPLE.COM 和 SALES.WEST.EXAMPLE.COM 两个领域。将按两个方向建立跨领域验证。必须在两个领域的主 KDC 上完成此过程。
必须配置每个领域的主 KDC。要完全测试验证过程,必须安装多个客户机或从 KDC。
成为一台主 KDC 服务器的超级用户。
为两个领域创建票证授予票证服务主体。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
# /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: addprinc krbtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM Enter password for principal krgtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM: <Type the password> kadmin: addprinc krbtgt/SALES.WEST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM Enter password for principal krgtgt/SALES.WEST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM: <Type the password> kadmin: quit |
在两个 KDC 中为每个服务主体指定的口令必须相同。因此,服务主体 krbtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM 的口令在两个领域中一定相同。
在 Kerberos 配置文件中添加相应的项以定义指向远程领域的直接路径。
此示例显示了 ENG.EAST.EXAMPLE.COM 领域中的客户机。可能需要交换领域名称以获取 SALES.WEST.EXAMPLE.COM 领域中相应的定义。
# cat /etc/krb5/krb5.conf [libdefaults] . . [capaths] ENG.EAST.EXAMPLE.COM = { SALES.WEST.EXAMPLE.COM = . } SALES.WEST.EXAMPLE.COM = { ENG.EAST.EXAMPLE.COM = . } |
将 Kerberos 配置文件复制到当前领域中的所有客户机。
要使跨领域验证正常工作,所有系统(包括从 KDC 和其他服务器)必须安装 Kerberos 配置文件 (/etc/krb5/krb5.conf) 的新版本。
对第二个领域重复以上所有步骤。
网络应用程序服务器是使用以下一个或多个网络应用程序提供访问的主机:ftp、rcp、rlogin、rsh 和 telnet。要在服务器上启用这些命令的 Kerberos 版本,只需执行几个步骤。
此过程使用以下配置参数:
应用程序服务器 = boston
admin 主体 = kws/admin
DNS 域名 = example.com
领域名称 = EXAMPLE.COM
此过程要求已配置主 KDC。要完全测试该过程,必须安装多个客户机。
安装 Kerberos 客户机软件。
(可选的)安装 NTP 客户机或其他时钟同步机制。
有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
为新服务器添加主体并更新该服务器的密钥表。
以下命令报告是否存在主机主体:
boston # klist -k |grep host 4 host/boston.example.com@EXAMPLE.COM 4 host/boston.example.com@EXAMPLE.COM 4 host/boston.example.com@EXAMPLE.COM 4 host/boston.example.com@EXAMPLE.COM |
如果此命令未返回主体,则可以使用以下步骤创建新主体。
有关如何使用 SEAM Administration Tool 添加主体的说明将在如何创建新的 Kerberos 主体中介绍。以下步骤中的示例说明如何使用命令行添加所需的主体。必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
boston # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
创建服务器的 host 主体。
kadmin: addprinc -randkey host/boston.example.com Principal "host/boston.example.com" created. kadmin: |
将服务器的 host 主体添加到服务器的密钥表中。
如果未运行 kadmin 命令,请使用以下类似命令重新启动该命令: /usr/sbin/kadmin -p kws/admin
kadmin: ktadd host/boston.example.com Entry for principal host/boston.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/boston.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/boston.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal host/boston.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: |
退出 kadmin。
kadmin: quit |
NFS 服务可以使用 UNIX 用户 ID (user ID, UID) 标识用户,但不能直接使用 GSS 凭证。要将凭证转换为 UID,可能需要创建将用户凭证映射到 UNIX UID 的凭证表。有关缺省凭证映射的更多信息,请参见将 GSS 凭证映射到 UNIX 凭证。本节中的过程重点介绍配置 Kerberos NFS 服务器、管理凭证表以及对已挂载 NFS 的文件系统启动 Kerberos 安全模式所需的任务。以下任务列表说明了本节中所包含的任务。
表 22–1 配置 Kerberos NFS 服务器(任务列表)
任务 |
说明 |
参考 |
---|---|---|
配置 Kerberos NFS 服务器。 |
使服务器共享要求 Kerberos 验证的文件系统。 | |
创建凭证表。 |
在缺省映射不满足要求的情况下,生成可用于提供从 GSS 凭证到 UNIX 用户 ID 的映射的凭证表。 | |
更改将用户凭证映射到 UNIX UID 的凭证表。 |
更新凭证表中的信息。 | |
在两个类似领域之间创建凭证映射。 |
在多个领域共享同一个口令文件的情况下,提供有关如何将 UID 从一个领域映射到另一个领域的说明。 | |
使用 Kerberos 验证共享文件系统。 |
使用安全模式共享文件系统,以便要求 Kerberos 验证。 |
在此过程中,将使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
NFS 服务器 = denver.example.com
admin 主体 = kws/admin
完成配置 Kerberos NFS 服务器的先决条件。
必须配置主 KDC。要完全测试此过程,需要多个客户机。
(可选的)安装 NTP 客户机或其他时钟同步机制。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
启动 kadmin。
可以使用 SEAM Administration Tool 添加主体,如如何创建新的 Kerberos 主体中所述。为此,必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。不过,以下示例说明如何使用命令行添加所需的主体。
denver # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
创建服务器的 NFS 服务主体。
请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
对系统上可能用于访问 NFS 数据的每个唯一接口重复此步骤。如果主机有多个接口具有唯一名称,则每个唯一名称必须具有自己的 NFS 服务主体。
kadmin: addprinc -randkey nfs/denver.example.com Principal "nfs/denver.example.com" created. kadmin: |
将服务器的 NFS 服务主体添加到服务器的密钥表文件中。
对步骤 a 中创建的每个唯一服务主体重复此步骤。
kadmin: ktadd nfs/denver.example.com 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。
kadmin: quit |
(可选的)如果需要,可创建特殊 GSS 凭证映射。
通常,Kerberos 服务在 GSS 凭证和 UNIX UID 之间生成相应的映射。缺省映射在将 GSS 凭证映射到 UNIX 凭证中介绍。如果缺省映射不满足要求,请参见如何创建凭证表以获取更多信息。
使用 Kerberos 安全模式共享 NFS 文件系统。
有关更多信息,请参见如何使用多种 Kerberos 安全模式设置安全的 NFS 环境。
NFS 服务器使用 gsscred 凭证表将 Kerberos 凭证映射到 UID。对于从使用 Kerberos 验证的 NFS 服务器挂载文件系统的 NFS 客户机,如果缺省映射不满足要求,则必须创建此表。
编辑 /etc/gss/gsscred.conf 并更改安全机制。
将机制更改为 files。
使用 gsscred 命令创建凭证表。
# gsscred -m kerberos_v5 -a |
gsscred 命令从 /etc/nsswitch.conf 文件的 passwd 项列出的所有源中收集信息。如果希望凭证表中不包括本地口令项,则可能需要临时删除 files 项。有关更多信息,请参见 gsscred(1M) 手册页。
此过程要求已在 NFS 服务器上创建 gsscred 表。有关说明,请参见如何创建凭证表。
成为 NFS 服务器上的超级用户。
使用 gsscred 命令向凭证表中添加项。
# gsscred -m mech [ -n name [ -u uid ]] -a |
定义要使用的安全机制。
定义用户的主体名称,如 KDC 中所定义。
定义用户的 UID,如口令数据库中所定义。
向主体名称映射中添加 UID。
在以下示例中,将添加名为 sandy/admin 的主体的项,该主体映射到 UID 3736。
# gsscred -m kerberos_v5 -n sandy/admin -u 3736 -a |
在以下示例中,将添加名为 sandy/admin@EXAMPLE.COM 的主体的项,该主体映射到 UID 3736。
# gsscred -m kerberos_v5 -n sandy/admin@EXAMPLE.COM -u 3736 -a |
此过程在使用相同口令文件的领域之间提供相应的凭证映射。在此示例中,领域 CORP.EXAMPLE.COM 和 SALES.EXAMPLE.COM 使用相同的口令文件。bob@CORP.EXAMPLE.COM 和 bob@SALES.EXAMPLE.COM 的凭证映射到相同的 UID。
成为超级用户。
在客户机系统上,向 krb5.conf 文件中添加项。
# cat /etc/krb5/krb5.conf [libdefaults] default_realm = CORP.EXAMPLE.COM . [realms] CORP.EXAMPLE.COM = { . auth_to_local_realm = SALES.EXAMPLE.COM . } |
有关对凭证映射问题进行疑难解答的过程的帮助,请参见观察从 GSS 凭证到 UNIX 凭证的映射。
通过此过程,NFS 服务器可以使用不同的安全模式或特性提供安全的 NFS 访问。客户机与 NFS 服务器协商安全特性时,将使用该客户机有权访问的服务器所提供的第一种特性。此特性用于 NFS 服务器共享的文件系统的所有后续客户机请求。
成为 NFS 服务器上的超级用户。
验证在密钥表文件中是否存在 NFS 服务主体。
klist 命令报告是否存在密钥表文件并显示主体。如果结果显示不存在密钥表文件或者不存在 NFS 服务主体,则需要验证是否已完成如何配置 Kerberos NFS 服务器中的所有步骤。
# klist -k Keytab name: FILE:/etc/krb5/krb5.keytab KVNO Principal ---- --------------------------------------------------------- 3 nfs/denver.example.com@EXAMPLE.COM 3 nfs/denver.example.com@EXAMPLE.COM 3 nfs/denver.example.com@EXAMPLE.COM 3 nfs/denver.example.com@EXAMPLE.COM |
在 /etc/nfssec.conf 文件中启用 Kerberos 安全模式。
编辑 /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/dfs/dfstab 文件,并将带有所需安全模式的 sec= 选项添加到相应的项中。
share -F nfs -o sec=mode file_system |
指定共享文件系统时要使用的安全模式。使用多种安全模式时,会将列表中的第一种模式用作缺省模式。
定义要共享的文件系统的路径。
尝试从指定的文件系统访问文件的所有客户机都要求 Kerberos 验证。要访问文件,应验证 NFS 客户机上的用户主体。
请确保服务器上正在运行 NFS 服务。
如果此命令是您所启动的第一个 share 命令或 share 命令集,则 NFS 守护进程可能未运行。以下命令将重新启动该守护进程:
# svcadm restart network/nfs/server |
(可选的)如果使用的是自动挂载程序,请编辑 auto_master 数据库以选择非缺省安全模式。
如果不使用自动挂载程序访问文件系统或者安全模式的缺省选择可接受,则无需执行此过程。
file_system auto_home -nosuid,sec=mode |
(可选的)使用非缺省模式手动发布用于访问文件系统的 mount 命令。
或者,可以使用 mount 命令指定安全模式,但此替代方法不会利用自动挂载程序。
# mount -F nfs -o sec=mode file_system |
在此示例中,dfstab 文件行表明:在通过 NFS 服务访问任何文件之前,必须先成功完成 Kerberos 验证。
# grep krb /etc/dfs/dfstab share -F nfs -o sec=krb5 /export/home |
在此示例中,选择了所有三种 Kerberos 安全模式。如果发出挂载请求时未指定任何安全模式,则将在所有 NFS V3 客户机中使用列出的第一种模式(在此例中为 krb5)。有关更多信息,请参见 nfssec(5) 手册页。
# grep krb /etc/dfs/dfstab share -F nfs -o sec=krb5:krb5i:krb5p /export/home |
Kerberos 客户机是网络上需要使用 Kerberos 服务的任何主机(不是 KDC 服务器)。本节介绍有关安装 Kerberos 客户机的过程以及使用 root 验证以挂载 NFS 文件系统的特定信息。
以下任务列表包括有关设置 Kerberos 客户机的所有过程。每行都包括任务说明(说明执行该项任务的原因)以及指向该任务的链接。
任务 |
说明 |
参考 |
---|---|---|
建立 Kerberos 客户机安装配置文件。 |
生成可用于自动安装 Kerberos 客户机的客户机安装配置文件。 | |
配置 Kerberos 客户机。 |
手动安装 Kerberos 客户机。如果每台客户机安装要求唯一的安装参数,请使用此过程。 | |
自动安装 Kerberos 客户机。如果每台客户机的安装参数都相同,请使用此过程。 | ||
交互式安装 Kerberos 客户机。如果仅需要更改一些安装参数,请使用此过程。 | ||
允许客户机以 root 用户身份访问 NFS 文件系统。 |
在客户机上创建 root 主体,以便客户机可以挂载使用 root 访问权限共享的 NFS 文件系统。此外,允许为客户机设置对 NFS 文件系统的非交互 root 访问权限,以便可以运行 cron 作业。 |
此过程创建可在安装 Kerberos 客户机时使用的 kclient 配置文件。使用 kclient 配置文件,可降低出现键入错误的可能性。此外,与交互式过程相比,使用该配置文件可以减少用户干预。
成为超级用户。
创建 kclient 安装配置文件。
kclient 配置文件样例与以下内容类似:
client# cat /net/kdc1.example.com/export/install/profile REALM EXAMPLE.COM KDC kdc1.example.com ADMIN clntconfig FILEPATH /net/kdc1.example.com/export/install/krb5.conf NFS 1 DNSLOOKUP none |
此过程使用安装配置文件。请参见如何创建 Kerberos 客户机安装配置文件。
成为超级用户。
运行 kclient 安装脚本。
要完成此过程,需要提供 clntconfig 主体的口令。
client# /usr/sbin/kclient -p /net/kdc1.example.com/export/install/krb5.conf 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/kdc1.example.com/export/clientinstall/krb5.conf. --------------------------------------------------- Setup COMPLETE. client# |
以下示例将覆盖在安装配置文件中设置的 DNSARG 和 KDC 参数。
# /usr/sbin/kclient -p /net/kdc1.example.com/export/install/krb5.conf\ -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/kdc1.example.com/export/install/krb5.conf. --------------------------------------------------- Setup COMPLETE. client# |
此过程使用 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/kdc1.example.com/export/install/krb5.conf Copied /net/kdc1.example.com/export/install/krb5.conf. --------------------------------------------------- Setup COMPLETE ! # |
在此过程中,将使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com
客户机 = client.example.com
admin 主体 = kws/admin
用户主体 = mre
联机帮助 URL = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
调整该 URL 以指向“SEAM Administration Tool”部分,如SEAM Administration Tool 中的联机帮助 URL中所述。
成为超级用户。
编辑 Kerberos 配置文件 ( krb5.conf)。
要从 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 加密类型。
(可选的)更改用于定位 KDC 的过程。
缺省情况下,使用主机和域名到 kerberos 领域的映射定位 KDC。可以通过将 dns_lookup_kdc、dns_lookup_realm 或 dns_fallback 添加到 krb5.conf 文件的 libdefaults 部分来更改此行为。有关更多信息,请参见 krb5.conf(4) 手册页。
(可选的)使用 NTP 或其他时钟同步机制将客户机时钟与主 KDC 时钟同步。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
启动 kadmin。
可以使用 SEAM Administration Tool 添加主体,如如何创建新的 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: |
(可选的)创建 root 主体。
如果客户机不要求对使用 NFS 服务挂载的远程文件系统拥有 root 访问权限,则可以跳过此步骤。为了避免创建领域范围的 root 主体,root 主体应是由两个部分组成的主体(第二个组成部分为 Kerberos 客户机系统的主机名)。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey root/client.example.com Principal "root/client.example.com" created. kadmin: |
创建 host 主体。
host 主体用于验证应用程序。
kadmin: addprinc -randkey host/denver.example.com Principal "host/denver.example.com@EXAMPLE.COM" created. kadmin: |
(可选的)将服务器的 NFS 服务主体添加到服务器的密钥表文件中。
仅当客户机需要使用 Kerberos 验证访问 NFS 文件系统时,才需要执行此步骤。
kadmin: ktadd nfs/denver.example.com 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: |
(可选的)将 root 主体添加到服务器的密钥表文件中。
如果添加了 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-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 主体添加到服务器的密钥表文件中。
kadmin: ktadd host/denver.example.com 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: |
退出 kadmin。
kadmin: quit |
(可选的)要在 NFS 上使用 Kerberos,请在 /etc/nfssec.conf 文件中启用 Kerberos 安全模式。
编辑 /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 |
如果希望客户机自动更新 TGT 或者向用户发出有关 Kerberos 票证失效的警告,请在 /etc/krb5/warn.conf 文件中创建相应的项。
有关更多信息,请参见 warn.conf(4) 手册页。
可以设置 Kerberos 客户机,使其与非 Kerberos KDC 协同工作。在此情况下,必须在 realms 部分的 /etc/krb5/krb5.conf 文件中包括一行。该行更改客户机与 Kerberos 口令更改服务器通信时要使用的协议。该行的格式如下:
[realms] EXAMPLE.COM = { kdc = kdc1.example.com kdc = kdc2.example.com admin_server = kdc1.example.com kpasswd_protocol = SET_CHANGE } |
@ 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" |
此示例定义主 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 kdc1.example.com _kerberos-adm._udp.EXAMPLE.COM IN SRV 0 0 749 kdc1.example.com _kpasswd._udp.EXAMPLE.COM IN SRV 0 0 749 kdc1.example.com |
通过此过程,客户机可以使用 root ID 权限访问要求 Kerberos 验证的 NFS 文件系统。特别是,可以访问使用以下选项共享的 NFS 文件系统:-o sec=krb5,root=client1.sun.com。
成为超级用户。
启动 kadmin。
可以使用 SEAM Administration Tool 添加主体,如如何创建新的 Kerberos 主体中所述。为此,必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。不过,以下示例说明如何使用命令行添加所需的主体。
denver # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
为 NFS 客户机创建 root 主体。
此主体用于对要求 Kerberos 验证的已挂载 NFS 的文件系统提供 root 等效访问权限。为了避免创建领域范围的 root 主体,root 主体应是由两个部分组成的主体(第二个组成部分为 Kerberos 客户机系统的主机名)。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: addprinc -randkey root/client.example.com Principal "root/client.example.com" created. kadmin: |
将 root 主体添加到服务器的密钥表文件中。
如果添加了 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-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。
kadmin: quit |
没有 Kerberos 主体的用户可以自动迁移到现有 Kerberos 领域。通过将 pam_krb5_migrate 模块堆叠在 /etc/pam.conf 的服务验证栈中,可以通过正在使用的服务的 PAM 框架实现迁移。
在此示例中,将配置 rlogin 和 other PAM 服务名称以使用自动迁移。将使用以下配置参数:
领域名称 = EXAMPLE.COM
主 KDC = kdc1.example.com
承载迁移服务的计算机 = server1.example.com
迁移服务主体 = host/server1.example.com
将 server1 设置为 EXAMPLE.COM 领域的 Kerberos 客户机。有关更多信息,请参见配置 Kerberos 客户机。
检查是否存在 server1 的主机服务主体。
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 |
对 PAM 配置文件进行更改。
将 pam_krb5_migrate PAM 模块添加到 rlogin 和 other 服务名称的验证栈中。系统将自动为使用 rlogin、telnet 或 ssh 而不具有 Kerberos 主体的用户创建主体。
# cat /etc/pam.conf . . # # rlogin service (explicit because of pam_rhost_auth) # rlogin auth sufficient pam_rhosts_auth.so.1 rlogin auth requisite pam_authtok_get.so.1 rlogin auth required pam_dhkeys.so.1 rlogin auth required pam_unix_cred.so.1 rlogin auth required pam_unix_auth.so.1 rlogin auth sufficient pam_krb5.so.1 rlogin auth optional pam_krb5_migrate.so.1 # . . # # Default definitions for Authentication management # Used when service name is not explicitly mentioned for authentication # other auth requisite pam_authtok_get.so.1 other auth required pam_dhkeys.so.1 other auth required pam_unix_cred.so.1 other auth required pam_unix_auth.so.1 other auth sufficient pam_krb5.so.1 other auth optional pam_krb5_migrate.so.1 |
(可选的)如果需要,可强制立即更改口令。
可以将新建 Kerberos 帐户的口令失效时间设置为当前时间(现在),以便强制立即更改 Kerberos 口令。要将失效时间设置为当前时间,请将 expire_pw 选项添加到使用 pam_krb5_migrate 模块的行中。有关更多信息,请参见 pam_krb5_migrate(5) 手册页。
# cat /etc/pam.conf . . rlogin auth optional pam_krb5_migrate.so.1 expire_pw # . . other auth optional pam_krb5_migrate.so.1 expire_pw |
在主 KDC 上,更新访问控制文件。
以下项将为所有用户(root 用户除外)授予对 host/server1.example.com 服务主体的迁移和查询权限。务必注意,不应使用 U 权限迁移 kadm5.acl 文件中列出的用户。这些项必须位于允许所有用户或 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 * |
在主 KDC 上,重新启动 Kerberos 管理守护进程。
通过此步骤,kadmind 守护进程可以使用新的 kadm5.acl 项。
kdc1 # svcadm restart network/security/kadmin |
在主 KDC 上,向 pam.conf 文件中添加项。
通过以下项,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 |
所有参与 Kerberos 验证系统的主机都必须在指定的最长时间(称为时钟相位差)内同步其内部时钟。针对这一要求,需要进行另一种 Kerberos 安全检查。如果任意两台参与主机之间的时间偏差超过了时钟相位差,则客户机请求会被拒绝。
时钟相位差还确定应用程序服务器必须跟踪所有 Kerberos 协议消息的时间长度,以便识别和拒绝重放的请求。因此,时钟相位差的值越大,应用程序服务器必须收集的信息就越多。
时钟相位差的最大缺省值为 300 秒(5 分钟)。可以在 krb5.conf 文件的 libdefaults 部分中更改此缺省值。
出于安全原因,不要将时钟相位差增大到超过 300 秒。
由于维护 KDC 和 Kerberos 客户机之间的同步时钟非常重要,因此应使用网络时间协议 (Network Time Protocol, NTP) 软件同步这些时钟。从 Solaris 2.6 发行版开始,Solaris 软件中提供了由美国特拉华大学开发的 NTP 公用软件。
同步时钟的另一种方法是使用 rdate 命令和 cron 作业(一种比使用 NTP 参与性更小的过程)。但是,本节重点介绍如何使用 NTP。并且,如果使用网络来同步时钟,时钟同步协议本身必须是安全的。
通过 NTP,可以在网络环境中管理准确时间或网络时钟同步,或者同时管理这两者。 本质上,NTP 是一种服务器/客户机实现。可以选择一个系统(NTP 服务器)作为主时钟。然后,设置所有其他系统(NTP 客户机),使这些系统的时钟与主时钟同步。
为了同步时钟,NTP 使用 xntpd 守护进程,该守护进程设置并维护 UNIX 系统时间,使其与 Internet 标准时间服务器的时间保持一致。以下给出了此服务器/客户机 NTP 实现的示例。
确保 KDC 和 Kerberos 客户机保持时钟同步涉及以下步骤的实现:
在网络上设置 NTP 服务器。此服务器可以是除主 KDC 之外的任何系统。要了解 NTP 服务器任务,请参见《系统管理指南:网络服务》中的“管理网络时间协议(任务)”。
在网络上配置 KDC 和 Kerberos 客户机时,将它们设置为 NTP 服务器的 NTP 客户机。要了解 NTP 客户机任务,请参见《系统管理指南:网络服务》中的“管理网络时间协议(任务)”。
使用本节中的过程可以更容易地将主 KDC 与从 KDC 进行交换。仅当主 KDC 服务器由于某种原因出现故障时,或者需要重新安装主 KDC(例如,由于安装了新硬件)时,才应将主 KDC 与从 KDC 进行交换。
在希望其可以成为主 KDC 的从 KDC 服务器上执行此过程。此过程假定将使用增量传播。
在安装 KDC 过程中使用主 KDC 和可交换从 KDC 的别名。
定义 KDC 的主机名时,请确保 DNS 中包括每个系统的别名。此外,在 /etc/krb5/krb5.conf 文件中定义主机时也应使用别名。
逐步完成从 KDC 安装。
在进行任何交换之前,在该领域中此服务器的作用应与任何其他从 KDC 相同。有关说明,请参见如何配置从 KDC。
移动主 KDC 命令
要禁止从该从 KDC 运行主 KDC 命令,请将 kprop、kadmind 和 kadmin.local 命令移到一个保留位置。
kdc4 # mv /usr/lib/krb5/kprop /usr/lib/krb5/kprop.save kdc4 # mv /usr/lib/krb5/kadmind /usr/lib/krb5/kadmind.save kdc4 # mv /usr/sbin/kadmin.local /usr/sbin/kadmin.local.save |
在此过程中,要交换出的主 KDC 服务器名为 kdc1。将成为新的主 KDC 的从 KDC 名为 kdc4。此过程假定将使用增量传播。
此过程要求已将该从 KDC 服务器设置为可交换的从 KDC。有关更多信息,请参见如何配置可交换的从 KDC。
在新的主 KDC 上,启动 kadmin。
kdc4 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
为 kadmind 服务创建新的主体。
以下示例中的第一个 addprinc 命令显示为两行,但实际上该命令应在同一行中键入。
kadmin: addprinc -randkey -allow_tgs_req +password_changing_service -clearpolicy \ changepw/kdc4.example.com Principal "changepw/kdc4.example.com@ENG.SUN.COM" created. kadmin: addprinc -randkey -allow_tgs_req -clearpolicy kadmin/kdc4.example.com Principal "kadmin/kdc4.example.com@EXAMPLE.COM" created. kadmin: |
创建密钥表文件。
kadmin: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc4.example.com Entry for principal kadmin/kdc4.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 kadmin/kdc4.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 kadmin/kdc4.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal kadmin/kdc4.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc4.example.com Entry for principal changepw/kdc4.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 changepw/kdc4.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 changepw/kdc4.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal changepw/kdc4.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: |
退出 kadmin。
kadmin: quit |
在新的主 KDC 上,强制执行同步。
以下步骤将在从服务器上强制执行完全 KDC 更新。
kdc4 # svcadm disable network/security/krb5kdc kdc4 # rm /var/krb5/principal.ulog kdc4 # svcadm enable network/security/krb5kdc |
在新的主 KDC 上,清除更新日志。
以下步骤将重新初始化新的主 KDC 服务器的更新日志。
kdc4 # svcadm disable network/security/krb5kdc kdc4 # rm /var/krb5/principal.ulog |
在旧的主 KDC 上,中止 kadmind 和 krb5kdc 进程。
中止 kadmind 进程后,可防止对 KDC 数据库进行任何更改。
kdc1 # svcadm disable network/security/kadmin kdc1 # svcadm disable network/security/krb5kdc |
在旧的主 KDC 上,指定请求传播的轮询时间。
将 /etc/krb5/kdc.conf 中的 sunw_dbprop_master_ulogsize 项替换为定义 sunw_dbprop_slave_poll 的项。该项将轮询时间设置为 2 分钟。
kdc1 # cat /etc/krb5/kdc.conf [kdcdefaults] kdc_ports = 88,750 [realms] EXAMPLE.COM= { profile = /etc/krb5/krb5.conf database_name = /var/krb5/principal admin_keytab = /etc/krb5/kadm5.keytab 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 上,移动主 KDC 命令和 kadm5.acl 文件。
要禁止运行主 KDC 命令,请将 kprop、kadmind 和 kadmin.local 命令移到一个保留位置。
kdc1 # mv /usr/lib/krb5/kprop /usr/lib/krb5/kprop.save kdc1 # mv /usr/lib/krb5/kadmind /usr/lib/krb5/kadmind.save kdc1 # mv /usr/sbin/kadmin.local /usr/sbin/kadmin.local.save kdc1 # mv /etc/krb5/kadm5.acl /etc/krb5/kadm5.acl.save |
在 DNS 服务器上,更改主 KDC 的别名。
要更改服务器,请编辑 example.com 区域文件并更改 masterkdc 的项。
masterkdc IN CNAME kdc4 |
在 DNS 服务器上,重新启动 Internet 域名服务器。
运行以下命令以重新装入新的别名信息:
# svcadm refresh network/dns/server |
在新的主 KDC 上,移动主 KDC 命令和从 kpropd.acl 文件。
kdc4 # mv /usr/lib/krb5/kprop.save /usr/lib/krb5/kprop kdc4 # mv /usr/lib/krb5/kadmind.save /usr/lib/krb5/kadmind kdc4 # mv /usr/sbin/kadmin.local.save /usr/sbin/kadmin.local kdc4 # mv /etc/krb5/kpropd.acl /etc/krb5/kpropd.acl.save |
在新的主 KDC 上,创建 Kerberos 访问控制列表文件 (kadm5.acl)。
填充后,/etc/krb5/kadm5.acl 文件应包含允许管理 KDC 的所有主体名称。该文件还应列出请求增量传播的所有从 KDC。有关更多信息,请参见 kadm5.acl(4) 手册页。
kdc4 # cat /etc/krb5/krb5.acl kws/admin@EXAMPLE.COM * kiprop/kdc1.example.com@EXAMPLE.COM p |
在新的主 KDC 上的 kdc.conf 文件中,指定更新日志大小。
将 sunw_dbprop_slave_poll 项替换为定义 sunw_dbprop_master_ulogsize 的项。该项将日志大小设置为 1000 项。
kdc1 # cat /etc/krb5/kdc.conf [kdcdefaults] kdc_ports = 88,750 [realms] EXAMPLE.COM= { profile = /etc/krb5/krb5.conf database_name = /var/krb5/principal admin_keytab = /etc/krb5/kadm5.keytab 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 } |
在新的主 KDC 上,将 kiprop 主体添加到 kadmind 密钥表文件中。
kdc4 # kadmin.local kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kiprop/kdc4.example.com Entry for principal kiprop/kdc4.example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc4.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc4.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc4.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: quit |
在新的主 KDC 上,启动 kadmind 和 krb5kdc。
kdc4 # svcadm enable network/security/krb5kdc kdc4 # svcadm enable network/security/kadmin |
在旧的主 KDC 上,添加 kiprop 服务主体。
通过将 kiprop 主体添加到 krb5.keytab 文件中,kpropd 守护进程可以对其自身进行增量传播服务验证。
kdc1 # /usr/sbin/kadmin -p kws/admin Authenticating as pricipal kws/admin@EXAMPLE.COM with password. Enter password: <Type kws/admin password> kadmin: ktadd kiprop/kdc1.example.com Entry for principal kiprop/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 kiprop/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 kiprop/kdc1.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: quit |
在旧的主 KDC 上,将 krb5.conf 中列出的每个 KDC 的项添加到传播配置文件 kpropd.acl 中。
kdc1 # cat /etc/krb5/kpropd.acl host/kdc1.example.com@EXAMPLE.COM host/kdc2.example.com@EXAMPLE.COM host/kdc3.example.com@EXAMPLE.COM host/kdc4.example.com@EXAMPLE.COM |
在旧的主 KDC 上,启动 kpropd 和 krb5kdc。
启动 krb5kdc 守护进程时,如果将系统配置为从 KDC,则 kpropd 也将启动。
kdc1 # svcadm enable network/security/krb5kdc |
Kerberos 数据库是 Kerberos 的主干,必须正确维护。本节介绍有关如何管理 Kerberos 数据库的一些过程,例如备份和恢复数据库、设置增量或并行传播以及管理存储文件。如何配置主 KDC 中介绍了初始设置该数据库的步骤。
将 Kerberos 数据库从主 KDC 传播到从 KDC 是最重要的配置任务之一。如果传播频率不够高,则主 KDC 和从 KDC 将不能同步。因此,如果主 KDC 关闭,则从 KDC 将不能获取最新的数据库信息。此外,如果出于平衡负载目的将从 KDC 配置为主 KDC,则将该从 KDC 用作主 KDC 的客户机将不能获取最新的信息。所以,必须确保传播频率足够高,或者基于更改 Kerberos 数据库的频率配置服务器使其进行增量传播。增量传播优先于手动传播,因为手动传播数据库时需要更多的管理开销。此外,执行完全数据库传播时效率很低。
配置主 KDC 时,可以在 cron 作业中设置 kprop_script 命令以自动将 Kerberos 数据库备份到 /var/krb5/slave_datatrans 转储文件,并将该文件传播到从 KDC。不过,与其他文件一样,Kerberos 数据库可能会损坏。如果从 KDC 上的数据受损,您可能无法注意到,因为下一次数据库自动传播会安装一个新的副本。但是,如果主 KDC 上的数据受损,则下一次传播期间会将损坏的数据库传播到所有从 KDC。而且,损坏的备份会覆写主 KDC 上先前未损坏的备份文件。
由于在这种情况下不存在任何“安全”的备份副本,因此还应设置 cron 作业,以便定期将 slave_datatrans 转储文件复制到另一位置,或者使用 kdb5_util 的 dump 命令创建另一份单独的备份副本。这样,如果数据库受损,则可以使用 kdb5_util 的 load 命令在主 KDC 上恢复最新备份。
另一条重要注意事项是:由于数据库转储文件包含主体密钥,因此需要阻止未经授权的用户访问该文件。缺省情况下,只有 root 身份才具有读写数据库转储文件的权限。要阻止未经授权的访问,请仅使用 kprop 命令传播数据库转储文件,该命令会对要传送的数据进行加密。此外,kprop 仅将数据传播到从 KDC,这可以最大程度地降低将数据库转储文件意外发送到未经授权的主机的几率。
如果传播 Kerberos 数据库之后对其进行了更新,并且在下一次传播之前该数据库受损,则从 KDC 将不包含这些更新。这些更新将丢失。因此,如果要在计划的定期传播之前向 Kerberos 数据库中添加重要的更新,应手动传播该数据库,以避免数据丢失。
KDC 上的 kpropd.acl 文件提供主机主体名称的列表(一个名称占一行),用于指定 KDC 可以通过传播从其接收更新数据库的系统。如果使用主 KDC 传播所有从 KDC,则每个从 KDC 上的 kpropd.acl 文件仅需包含主 KDC 的主机主体名称。
但是,本书中的 Kerberos 安装和后续配置步骤将指导您如何将相同的 kpropd.acl 文件添加到主 KDC 和从 KDC 中。此文件包含所有 KDC 主机主体名称。通过此配置,在传播 KDC 临时不可用时,可以从任何 KDC 进行传播。而且,通过在所有 KDC 上保留相同副本,可以更容易地维护配置。
kprop_script 命令使用 kprop 命令将 Kerberos 数据库传播到其他 KDC。如果在从 KDC 上运行 kprop_script 命令,则会将该从 KDC 的 Kerberos 数据库副本传播到其他 KDC。kprop_script 的参数接受主机名列表,该列表以空格分隔,表示要传播的 KDC。
运行 kprop_script 时,将在 /var/krb5/slave_datatrans 文件中创建 Kerberos 数据库的备份,并将该文件复制到指定的 KDC。在完成传播之前,Kerberos 数据库处于锁定状态。
成为主 KDC 的超级用户。
使用 kdb5_util 命令的 dump 命令备份 Kerberos 数据库。
# /usr/sbin/kdb5_util dump [-verbose] [-d dbname] [filename [principals...]] |
列显要备份的每个主体和策略的名称。
定义要备份的数据库的名称。请注意,可以指定文件的绝对路径。 如果未指定 -d 选项,则缺省数据库名称为 /var/krb5/principal。
定义用于备份数据库的文件。可以指定文件的绝对路径。如果未指定文件,则数据库将转储到标准输出。
定义要备份的一个或多个主体的列表(以空格分隔)。必须使用全限定主体名称。如果未指定任何主体,则将备份整个数据库。
在以下示例中,Kerberos 数据库将备份到名为 dumpfile 的文件中。由于指定了 -verbose 选项,因此备份时会列显每个主体。
# kdb5_util dump -verbose dumpfile kadmin/kdc1.eng.example.com@ENG.EXAMPLE.COM krbtgt/eng.example.com@ENG.EXAMPLE.COM kadmin/history@ENG.EXAMPLE.COM pak/admin@ENG.EXAMPLE.COM pak@ENG.EXAMPLE.COM changepw/kdc1.eng.example.com@ENG.EXAMPLE.COM |
在以下示例中,将备份 Kerberos 数据库中的 pak 和 pak/admin 主体。
# kdb5_util dump -verbose dumpfile pak/admin@ENG.EXAMPLE.COM pak@ENG.EXAMPLE.COM pak/admin@ENG.EXAMPLE.COM pak@ENG.EXAMPLE.COM |
成为主 KDC 的超级用户。
使用 kdb_util 命令的 load 命令恢复 Kerberos 数据库。
# /usr/sbin/kdb5_util load [-verbose] [-d dbname] [-update] [filename] |
列显要恢复的每个主体和策略的名称。
定义要恢复的数据库的名称。请注意,可以指定文件的绝对路径。如果未指定 -d 选项,则缺省数据库名称为 /var/krb5/principal。
更新现有数据库。否则,会创建新数据库或覆写现有数据库。
定义用于恢复数据库的文件。可以指定文件的绝对路径。
在以下示例中,将从 dumpfile 文件将名为 database1 的数据库恢复到当前目录。由于未指定 -update 选项,恢复操作将创建一个新数据库。
# kdb5_util load -d database1 dumpfile |
如果未在运行 Solaris 10 发行版的服务器上创建 KDC 数据库,则通过重新装入该数据库,可以利用改进的数据库格式。
请确保数据库使用的是旧格式。请参见特定说明。
在主 KDC 上,停止 KDC 守护进程。
kdc1 # svcadm disable network/security/krb5kdc kdc1 # svcadm disable network/security/kadmin |
转储 KDC 数据库。
kdc1 # kdb5_util dump /tmp/prdb.txt |
保存当前数据库文件的副本。
kdc1 # cd /var/krb5 kdc1 # mkdir old kdc1 # mv princ* old/ |
装入数据库。
kdc1 # kdb5_util load /tmp/prdb.txt |
启动 KDC 守护进程。
kdc1 # svcadm enable network/security/krb5kdc kdc1 # svcadm enable network/security/kadmin |
此过程中的步骤可用于重新配置现有的主 KDC,以使用增量传播。在此过程中,将使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com
admin 主体 = kws/admin
向 kdc.conf 中添加项。
需要启用增量传播,并选择主 KDC 将在日志中存储的更新数。有关更多信息,请参见 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 admin_keytab = /etc/krb5/kadm5.keytab 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 } |
创建 kiprop 主体。
kiprop 主体用于验证主 KDC 服务器和授权来自主 KDC 的更新。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: addprinc -randkey kiprop/kdc1.example.com Principal "kiprop/kdc1.example.com@EXAMPLE.COM" created. kadmin: addprinc -randkey kiprop/kdc2.example.com Principal "kiprop/kdc2.example.com@EXAMPLE.COM" created. kadmin: |
将 kiprop 主体添加到 kadmind 密钥表文件中
通过将 kiprop 主体添加到 kadm5.keytab 文件中,kadmind 命令可以在启动时对其自身进行验证。
kadmin: ktadd -k /etc/krb5/kadm5.keytab kiprop/kdc1.example.com Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kiprop/kdc1.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin: quit |
(可选的)在主 KDC 上,将 kiprop 项添加到 kpropd.acl 中
通过此项,主 KDC 可以接收对 kdc2 服务器的增量传播请求。
kdc1 # cat /etc/krb5/kpropd.acl host/kdc1.example.com@EXAMPLE.COM host/kdc2.example.com@EXAMPLE.COM */admin@EXAMPLE.COM * kiprop/kdc2.example.com@EXAMPLE.COM p |
注释掉 root crontab 文件中的 kprop 行。
此步骤禁止从 KDC 传播其 KDC 数据库副本。
kdc1 # crontab -e #ident "@(#)root 1.20 01/11/06 SMI" # # The root crontab should be used to perform accounting data collection. # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean #10 3 * * * /usr/lib/krb5kprop_script kdc2.example.sun.com #SUNWkr5ma |
重新启动 kadmind。
kdc1 # svcadm restart network/security/kadmin |
重新配置所有使用增量传播的从 KDC 服务器。
向 krb5.conf 中添加项。
这些新项启用增量传播并将轮询时间设置为 2 分钟。
kdc2 # cat /etc/krb5/kdc.conf [kdcdefaults] kdc_ports = 88,750 [realms] EXAMPLE.COM= { profile = /etc/krb5/krb5.conf database_name = /var/krb5/principal admin_keytab = /etc/krb5/kadm5.keytab 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 } |
将 kiprop 主体添加到 krb5.keytab 文件中。
kdc2 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: ktadd kiprop/kdc2.example.com 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: quit |
禁用 kpropd。
kdc2 # svcadm disable network/security/krb5_prop |
重新启动 KDC 服务器。
kdc2 # svcadm restart network/security/krb5kdc |
此过程说明如何重新配置运行 Solaris 10 发行版的从 KDC 服务器,以使用完全传播。通常,只有运行 Solaris 9 发行版或更早发行版的主 KDC 服务器才需要使用此过程。在这种情况下,主 KDC 服务器不支持增量传播,因此需要配置从 KDC 以允许进行传播。
在此过程中,将配置名为 kdc3 的从 KDC。此过程使用以下配置参数:
领域名称 = EXAMPLE.COM
DNS 域名 = example.com
主 KDC = kdc1.example.com
从 KDC = kdc2.example.com 和 kdc3.example.com
admin 主体 = kws/admin
联机帮助 URL = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
调整该 URL 以指向“SEAM Administration Tool”部分,如SEAM Administration Tool 中的联机帮助 URL中所述。
必须配置主 KDC。有关此从 KDC 是否可交换的特定说明,请参见交换主 KDC 和从 KDC。
在主 KDC 上,成为超级用户。
在主 KDC 上,启动 kadmin。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
kdc1 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
在主 KDC 上,编辑 Kerberos 配置文件 (krb5.conf)。
需要添加每个从 KDC 的项。有关此文件的完整说明,请参见 krb5.conf(4) 手册页。
kdc1 # cat /etc/krb5/krb5.conf . . [realms] EXAMPLE.COM = { kdc = kdc1.example.com kdc = kdc2.example.com kdc = kdc3.example.com admin_server = kdc1.example.com } |
在主 KDC 上,将主 KDC 和每个从 KDC 的项添加到 kpropd.acl 文件中。
有关此文件的完整说明,请参见 kprop(1M) 手册页。
kdc1 # cat /etc/krb5/kpropd.acl host/kdc1.example.com@EXAMPLE.COM host/kdc2.example.com@EXAMPLE.COM host/kdc3.example.com@EXAMPLE.COM |
在所有从 KDC 上,复制主 KDC 服务器的 KDC 管理文件。
由于主 KDC 服务器已更新每台 KDC 服务器所需的信息,因此需要在所有从 KDC 上执行此步骤。可以使用 ftp 或类似的传送机制从主 KDC 获取以下文件的副本:
/etc/krb5/krb5.conf
/etc/krb5/kdc.conf
/etc/krb5/kpropd.acl
在所有从 KDC 上,请确保未填充 Kerberos 访问控制列表文件 kadm5.acl。
未修改的 kadm5.acl 文件如下所示:
kdc2 # cat /etc/krb5/kadm5.acl */admin@___default_realm___ * |
如果此文件中包含 kiprop 项,请删除它们。
在新的从 KDC 上,启动 kadmin 命令。
必须使用在配置主 KDC 时创建的一个 admin 主体名称登录。
kdc2 # /usr/sbin/kadmin -p kws/admin Enter password: <Type kws/admin password> kadmin: |
使用 kadmin 将从 KDC 的 host 主体添加到从 KDC 的密钥表文件中。
此项可使 kprop 和其他基于 Kerberos 的应用程序正常工作。请注意,主体实例为主机名时,无论 /etc/resolv.conf 文件中的域名是大写还是小写,都必须以小写字母指定 FQDN。
kadmin: ktadd host/kdc3.example.com Entry for principal host/kdc3.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/kdc3.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/kdc3.example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab. Entry for principal host/kdc3.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: |
退出 kadmin。
kadmin: quit |
在主 KDC 上,将从 KDC 名称添加到 cron 作业中,该作业通过运行 crontab -e 自动运行备份。
在 kprop_script 行的结尾添加每个从 KDC 服务器的名称。
10 3 * * * /usr/lib/krb5/kprop_script kdc2.example.com kdc3.example.com |
您可能还希望更改备份的时间。此项将在每天上午的 3:10 启动备份过程。
在新的从 KDC 上,启动 Kerberos 传播守护进程。
kdc3 # svcadm enable network/security/krb5_prop |
在主 KDC 上,使用 kprop_script 备份并传播数据库。
如果已存在数据库的备份副本,则无需完成其他备份。有关进一步的说明,请参见如何手动将 Kerberos 数据库传播到从 KDC。
kdc1 # /usr/lib/krb5/kprop_script kdc3.example.com Database propagation to kdc3.example.com: SUCCEEDED |
在新的从 KDC 上,使用 kdb5_util 创建一个存储文件。
kdc3 # /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> |
(可选的)在新的从 KDC 上,使用 NTP 或其他时钟同步机制同步主 KDC 时钟。
安装和使用网络时间协议 (Network Time Protocol, NTP) 并非必需。但是,要成功验证,每个时钟必须处于 krb5.conf 文件的 libdefaults 部分中定义的缺省时间内。有关 NTP 的信息,请参见同步 KDC 和 Kerberos 客户机的时钟。
在新的从 KDC 上,启动 KDC 守护进程 (krb5kdc)。
kdc3 # svcadm enable network/security/krb5kdc |
如果配置了增量传播,则此过程可确保已更新从 KDC 上的信息。
在 KDC 主服务器上,运行 kproplog 命令。
kdc1 # /usr/sbin/kproplog -h |
在从 KDC 服务器上,运行 kproplog 命令。
kdc2 # /usr/sbin/kproplog -h |
检查最后一个序列号和最后一个时间标记的值是否匹配。
以下是在主 KDC 服务器上运行 kproplog 命令的结果样例。
kdc1 # /usr/sbin/kproplog -h Kerberos update log (/var/krb5/principal.ulog) Update log dump: Log version #: 1 Log state: Stable Entry block size: 2048 Number of entries: 2500 First serial #: 137966 Last serial #: 140465 First time stamp: Fri Nov 28 00:59:27 2004 Last time stamp: Fri Nov 28 01:06:13 2004 |
以下是在从 KDC 服务器上运行 kproplog 命令的结果样例。
kdc2 # /usr/sbin/kproplog -h Kerberos update log (/var/krb5/principal.ulog) Update log dump: Log version #: 1 Log state: Stable Entry block size: 2048 Number of entries: 0 First serial #: None Last serial #: 140465 First time stamp: None Last time stamp: Fri Nov 28 01:06:13 2004 |
请注意,最后一个序列号和最后一个时间标记的值相同,这表示从 KDC 服务器与主 KDC 服务器同步。
请注意,在从 KDC 服务器的输出中,从 KDC 服务器的更新日志中不存在任何更新项。这是因为与主 KDC 服务器不同,从 KDC 服务器不保留更新。此外,由于第一个序列号或第一个时间标记不是相关信息,因此从 KDC 服务器也不包括这些信息。
此过程说明如何使用 kprop 命令传播 Kerberos 数据库。如果需要在定期的 cron 作业之外将从 KDC 与主 KDC 同步,可使用此过程。与 kprop_script 不同,可以使用 kprop 仅传播当前数据库备份,而无需先创建 Kerberos 数据库的新备份。
如果使用的是增量传播,则不要使用此过程。
成为主 KDC 的超级用户。
(可选的)使用 kdb5_util 命令备份数据库。
# /usr/sbin/kdb5_util dump /var/krb5/slave_datatrans |
使用 kprop 命令将数据库传播到从 KDC。
# /usr/lib/krb5/kprop -f /var/krb5/slave_datatrans slave-KDC |
如果要备份数据库,并在定期的 cron 作业之外将数据库传播到从 KDC,则还可以按如下所示使用 kprop_script 命令:
# /usr/lib/krb5/kprop_script slave-KDC |
在大多数情况下,会以独占的方式使用主 KDC 将其 Kerberos 数据库传播到从 KDC。但是,如果站点上有很多从 KDC,则可以考虑共享装入传播进程,即所谓的并行传播。
如果使用的是增量传播,则不要使用此过程。
通过并行传播,特定的从 KDC 可以与主 KDC 共享传播功能。通过共享此功能,可以更快地完成传播并减轻主 KDC 的工作。
例如,假设站点上有一个主 KDC 和六个从 KDC(如图 22–2 中所示),其中,slave-1 到 slave-3 组成一个逻辑组,slave-4 到 slave-6 组成另一个逻辑组。要设置并行传播,可以使主 KDC 将数据库传播到 slave-1 和 slave-4。而这些从 KDC 又可将数据库传播到其组中的从 KDC。
以下不是详细的逐步过程,而是用于启用并行传播的配置步骤的高级列表。这些步骤包括:
在主 KDC 上,更改其 cron 作业的 kprop_script 项,以仅包括将执行后续传播的从 KDC(传播从 KDC)的参数。
在每个传播从 KDC 上,将 kprop_script 项添加到其 cron 作业中,其中必须包括要传播的从 KDC 的参数。要成功地以并行方式进行传播,应设置 cron 作业,使其在将新 Kerberos 数据库传播到从 KDC 本身之后再运行。
对传播从 KDC 进行传播所需的时间取决于多种因素,例如网络带宽和 Kerberos 数据库的大小。
在每个从 KDC 上,设置相应的传播权限。通过将从 KDC 传播的 KDC 的主机主体名称添加到其 kpropd.acl 文件中,可完成此步骤。
以图 22–2 为例,主 KDC 的 kprop_script 项与以下示例类似:
0 3 * * * /usr/lib/krb5/kprop_script slave-1.example.com slave-4.example.com |
slave-1 的 kprop_script 项与以下示例类似:
0 4 * * * /usr/lib/krb5/kprop_script slave-2.example.com slave-3.example.com |
请注意,从 KDC 上的传播在主 KDC 将数据库传播到它一小时后开始。
传播从 KDC 上的 kpropd.acl 文件将包含以下项:
host/master.example.com@EXAMPLE.COM |
要由 slave-1 传播的从 KDC 上的 kpropd.acl 文件将包含以下项:
host/slave-1.example.com@EXAMPLE.COM |
存储文件包含 Kerberos 数据库的主密钥,该密钥在创建 Kerberos 数据库时自动创建。如果存储文件损坏,则可以使用 kdb5_util 实用程序的 stash 命令替换损坏的文件。仅在使用 kdb5_util 的 destroy 命令删除 Kerberos 数据库之后,才应删除存储文件。由于存储文件不会随数据库一起自动删除,所以必须删除存储文件以完成清除。
成为包含存储文件的 KDC 的超级用户。
删除存储文件。
# rm stash-file |
其中,stash-file 是存储文件的路径。缺省情况下,存储文件位于 /var/krb5/.k5. realm 中。
如果需要重新创建存储文件,则可以使用 kdb5_util 命令的 -f 选项。
执行以下步骤以增强 Kerberos 应用程序服务器和 KDC 服务器的安全性。
此过程限制对正在运行 telnet、ftp、rcp、rsh 和 rlogin 的服务器的网络访问,以便仅执行经过 Kerberos 验证的事务。
更改 telnet 服务的 exec 属性。
将 -a user 选项添加到 telnet 的 exec 属性,以将访问权限限制为可以提供有效验证信息的那些用户。
# inetadm -m svc:/network/telnet:default exec="/usr/sbin/in.telnetd -a user" |
(可选的)如果尚未配置,则更改 telnet 服务的 exec 属性。
将 -a 选项添加到 ftp 的 exec 属性,以仅允许经过 Kerberos 验证的连接。
# inetadm -m svc:/network/ftp:default exec="/usr/sbin/in.ftpd -a" |
禁用其他服务。
应禁用 in.rshd 和 in.rlogind 守护进程。
# svcadm disable network/shell # svcadm disable network/login:rlogin |
主 KDC 服务器和从 KDC 服务器都包含存储在本地的 KDC 数据库副本。限制对这些服务器的访问(以便保证数据库安全)对于 Kerberos 安装的整体安全非常重要。
根据需要,禁用远程服务。
要提供安全的 KDC 服务器,应禁用所有不必要的网络服务。根据配置不同,可能已禁用其中某些服务。使用 svcs 命令检查服务状态。在大多数情况下,只需运行 time 和 krdb5_kprop 服务。此外,使用回送 TLI(ticlts、ticotsord 和 ticots)的任何服务可以保持启用状态。
# svcadm disable network/comsat # svcadm disable network/dtspc/tcp # svcadm disable network/finger # svcadm disable network/login:rlogin # svcadm disable network/rexec # svcadm disable network/shell # svcadm disable network/talk # svcadm disable network/tname # svcadm disable network/uucp # svcadm disable network/rpc_100068_2-5/rpc_udp |
限制对支持 KDC 的硬件的访问。
要限制物理访问,请确保 KDC 服务器及其监视器位于安全的设备中。用户应不能以任何方式访问此服务器。
在本地磁盘或从 KDC 上存储 KDC 数据库备份。
仅在可以安全存储磁带时创建 KDC 的磁带备份。该做法同样适用于创建密钥表文件的副本。最好在未与其他系统共享的本地文件系统上存储这些文件。存储文件系统可以位于主 KDC 服务器或任何从 KDC 上。
本章将分析使用 Kerberos 服务时可能收到的错误消息,另外还针对各种问题提供一些疑难解答提示。以下是本章中错误消息和疑难解答信息的列表。
本节介绍有关 Kerberos 错误消息的信息,包括每个错误出现的原因以及解决此错误的方法。
Unable to view the list of principals or policies; use the Name field.
原因:登录时使用的 admin 主体在 Kerberos ACL 文件 (kadm5.acl) 中没有列出权限 (l)。因此,无法查看主体列表或策略列表。
解决方法:必须在 "Name" 字段中键入主体名称和策略名称才能对其进行处理,或者需要使用具有相应权限的主体登录。
JNI: Java array creation failed
JNI: Java class lookup failed
JNI: Java field lookup failed
JNI: Java method lookup failed
JNI: Java object lookup failed
JNI: Java object field lookup failed
JNI: Java string access failed
JNI: Java string creation failed
原因:SEAM Administration Tool (gkadmin) 使用的 Java 本机接口存在严重问题。
解决方法:退出 gkadmin 然后重新启动。如果问题仍然存在,请报告错误。
本节按字母顺序 (A-M) 列出了 Kerberos 命令、Kerberos 守护进程、PAM 框架、GSS 接口、NFS 服务和 Kerberos 库的常见错误消息。
All authentication systems disabled; connection refused
原因:此版本的 rlogind 不支持任何验证机制。
解决方法:请确保调用的 rlogind 带有 -k 选项。
Another authentication mechanism must be used to access this host
原因:无法进行验证。
解决方法:请确保客户机使用 Kerberos V5 机制进行验证。
Authentication negotiation has failed, which is required for encryption. Good bye.
原因:无法与服务器协商验证。
解决方法:请通过使用 toggle authdebug 命令调用 telnet 命令,启动验证调试并查看调试消息以获取更多线索。另外,请确保具有有效凭证。
Bad krb5 admin server hostname while initializing kadmin interface
原因:在 krb5.conf 文件中为 admin_server 配置了无效的主机名。
解决方法:请确保在 krb5.conf 文件的 admin_server 行中为主 KDC 指定了正确的主机名。
Bad lifetime value
原因:提供的生命周期值无效或格式不正确。
解决方法:请确保提供的值与 kinit(1) 手册页中的“时间格式”一节相符。
Bad start time value
原因:提供的开始时间值无效或格式不正确。
解决方法:请确保提供的值与 kinit(1) 手册页中的“时间格式”一节相符。
Cannot contact any KDC for requested realm
原因:请求的领域中没有 KDC 响应。
解决方法:请确保至少可访问一个 KDC(主 KDC 或从 KDC),或 krb5kdc 守护进程正在 KDC 上运行。有关已配置 KDC 的列表 (kdc = kdc-name),请检查 /etc/krb5/krb5.conf 文件。
Cannot determine realm for host
原因:Kerberos 无法确定主机的领域名称。
解决方法:请确保存在缺省领域名称,或在 Kerberos 配置文件 (krb5.conf) 中设置了域名映射。
Cannot find KDC for requested realm
原因:在请求的领域中找不到 KDC。
解决方法:请确保 Kerberos 配置文件 (krb5.conf) 在 realm 部分中指定了 KDC。
cannot initialize realm realm_name
原因:KDC 可能没有存储文件。
解决方法:请确保 KDC 具有存储文件。否则,请使用 kdb5_util 命令创建一个存储文件,然后尝试重新启动 krb5kdc 命令。
Cannot resolve KDC for requested realm
原因:Kerberos 无法确定该领域的任何 KDC。
解决方法:请确保 Kerberos 配置文件 (krb5.conf) 在 realm 部分中指定了 KDC。
Cannot reuse password
原因:指定的口令之前已被此主体使用。
解决方法:请选择一个以前尚未选用的口令,至少不要是 KDC 数据库中为每个主体保存的那些口令。此策略由该主体的策略强制执行。
Can't get forwarded credentials
原因:无法建立凭证转发。
解决方法:请确保主体具有可转发的凭证。
Can't open/find Kerberos configuration file
原因:Kerberos 配置文件 (krb5.conf) 不可用。
解决方法:请确保 krb5.conf 文件在正确的位置中可用,并且具有正确的权限。此文件应可由 root 写入,并可由其他用户读取。
Client did not supply required checksum--connection rejected
原因:未与客户机协商使用校验和进行验证。客户机使用的可能是不支持初始连接支持的早期 Kerberos V5 协议。
解决方法:请确保客户机使用的是支持初始连接支持的 Kerberos V5 协议。
Client/server realm mismatch in initial ticket request
原因:在初始票证请求中,客户机与服务器之间的领域不匹配。
解决方法:请确保正在与您通信的服务器与客户机位于同一领域中,或确保领域配置正确。
Client or server has a null key
原因:主体拥有空密钥。
解决方法:请使用 kadmin 的 cpw 命令修改主体,使其拥有非空密钥。
Communication failure with server while initializing kadmin interface
原因:为管理服务器指定的主机(也称为主 KDC)没有运行 kadmind 守护进程。
解决方法:请确保为主 KDC 指定正确的主机名。如果指定了正确的主机名,请确保 kadmind 正在指定的主 KDC 上运行。
Credentials cache file permissions incorrect
原因:您对凭证高速缓存 (/tmp/krb5cc_ uid) 没有相应的读写权限。
解决方法:请确保具有对凭证高速缓存的读写权限。
Credentials cache I/O operation failed XXX
原因:Kerberos 在向系统的凭证高速缓存 (/tmp/krb5cc_uid) 进行写入时出现问题。
解决方法:请使用 df 命令确保尚未删除凭证高速缓存,并且设备中还有剩余空间。
Decrypt integrity check failed
原因:您的票证可能无效。
解决方法:请检验下列两种情况:
确保您的凭证有效。请使用 kdestroy 销毁票证,然后使用 kinit 创建新票证。
确保目标主机的密钥表文件的服务密钥版本正确。请使用 kadmin 查看 Kerberos 数据库中服务主体(例如 host/FQDN-hostname)的密钥版本号。另外,请在目标主机上使用 klist -k,以确保该主机具有相同的密钥版本号。
Encryption could not be enabled. Goodbye.
原因:无法与服务器协商加密。
解决方法:请通过使用 toggle encdebug 命令调用 telnet 命令,启动验证调试并查看调试消息以获取更多线索。
failed to obtain credentials cache
原因:在 kadmin 初始化过程中,kadmin 尝试获取 admin 主体的凭证时失败。
解决方法:请确保在执行 kadmin 时使用正确的主体和口令。
Field is too long for this implementation
原因:基于 Kerberos 的应用程序所发送的消息太长。如果传输协议是 UDP,则可能会生成此错误。UDP 的缺省最大消息长度是 65535 字节。此外,对通过 Kerberos 服务发送的协议消息中的单个字段也有限制。
解决方法:请检验是否已在 KDC 服务器的 /etc/krb5/kdc.conf 文件中将传输协议限制为 UDP。
GSS-API (or Kerberos) error
原因:此消息是通用的 GSS-API 或 Kerberos 错误消息,可能由几种不同的问题所导致。
解决方法:请检查 /var/krb5/kdc.log 文件,查找出现此错误时记录的更具体的错误消息。
Hostname cannot be canonicalized
原因:Kerberos 无法设置全限定主机名。
解决方法:请确保在 DNS 中定义了该主机名,并且主机名至地址的映射和地址至主机名的映射保持一致。
Illegal cross-realm ticket
原因:发送的票证所跨的领域不正确。领域可能未设置正确的信任关系。
解决方法:请确保使用的领域具有正确的信任关系。
Improper format of Kerberos configuration file
原因:Kerberos 配置文件包含无效项。
解决方法:请确保 krb5.conf 文件中的所有关系后面都跟有 "=" 符号和值。另外,请检验每个子段中的括号是否成对出现。
Inappropriate type of checksum in message
原因:消息中包含无效的校验和类型。
解决方法:请检查在 krb5.conf 和 kdc.conf 文件中指定的有效校验和类型。
Incorrect net address
原因:网络地址不匹配。正在转发的票证中的网络地址与处理该票证的网络地址不同。转发票证时可能会出现此消息。
解决方法:请确保网络地址正确。请使用 kdestroy 销毁票证,然后使用 kinit 创建新票证。
Invalid credential was supplied
Service key not available
原因:凭证高速缓存中的服务票证可能不正确。
解决方法:请在尝试使用此服务之前,销毁当前凭证高速缓存并重新运行 kinit。
Invalid flag for file lock mode
原因:出现内部 Kerberos 错误。
解决方法:请报告错误。
Invalid message type specified for encoding
原因:Kerberos 无法识别基于 Kerberos 的应用程序发送的消息类型。
解决方法:如果使用的基于 Kerberos 的应用程序是由您的站点或供应商开发的,请确保此应用程序正确使用 Kerberos。
Invalid number of character classes
原因:指定的主体口令没有按照主体策略的强制要求包含足够的口令类。
解决方法:请确保指定的口令包含策略要求的最少口令类数。
KADM err: Memory allocation failure
原因:用于运行 kadmin 的内存不足。
解决方法:请释放内存,然后再次尝试运行 kadmin。
KDC can't fulfill requested option
原因:KDC 不允许请求的选项。一种可能是正在请求以后生效或可转发的选项,而 KDC 不允许这些选项。另一种可能是请求了 TGT 更新,但没有可更新的 TGT。
解决方法:请确定是要请求 KDC 不允许的选项,还是请求不可用的票证类型。
KDC policy rejects request
原因:KDC 策略不允许该请求。例如,向 KDC 发出的请求中没有 IP 地址。或者请求了转发,但 KDC 不允许转发。
解决方法:请确保使用带有正确选项的 kinit。如有必要,请修改与主体关联的策略或更改主体的属性以允许该请求。通过使用 kadmin,可以修改策略或主体。
KDC reply did not match expectations
原因:KDC 回复未包含期望的主体名称,或者响应中的其他值不正确。
解决方法:请确保正在与您通信的 KDC 符合 RFC1510,正在发送的请求是 Kerberos V5 请求或该 KDC 可用。
kdestroy: Could not obtain principal name from cache
原因:凭证高速缓存缺失或已损坏。
解决方法:请检查提供的高速缓存位置是否正确。如有必要,请使用 kinit 删除 TGT 并获取新的 TGT。
kdestroy: No credentials cache file found while destroying cache
原因:凭证高速缓存 (/tmp/krb5c_ uid) 缺失或已损坏。
解决方法:请检查提供的高速缓存位置是否正确。如有必要,请使用 kinit 删除 TGT 并获取新的 TGT。
kdestroy: TGT expire warning NOT deleted
原因:凭证高速缓存缺失或已损坏。
解决方法:请检查提供的高速缓存位置是否正确。如有必要,请使用 kinit 删除 TGT 并获取新的 TGT。
Kerberos authentication failed
原因:Kerberos 口令不正确,或该口令可能与 UNIX 口令不同步。
解决方法:如果口令不同步,则必须指定其他口令才能完成 Kerberos 验证。用户可能会忘记其原始口令。
Kerberos V5 refuses authentication
原因:无法与服务器协商验证。
解决方法:请通过使用 toggle authdebug 命令调用 telnet 命令,启动验证调试并查看调试消息以获取更多线索。另外,请确保具有有效凭证。
Key table entry not found
原因:网络应用程序服务器的密钥表文件中不存在服务主体项。
解决方法:请将相应的服务主体添加到服务器的密钥表文件中,以便该文件可提供基于 Kerberos 的服务。
Key version number for principal in key table is incorrect
原因:密钥表文件中主体的密钥版本与 Kerberos 数据库中的版本不同。可能已更改了服务密钥,也可能正在使用旧服务票证。
解决方法:如果服务密钥已被更改(例如通过使用 kadmin),则需要提取新密钥并将其存储在正在运行该服务的主机的密钥表文件中。
或者,您也可能正在使用具有较旧密钥的旧服务票证。在这种情况下,可能需要运行 kdestroy 命令,然后再次运行 kinit 命令。
kinit: gethostname failed
原因:本地网络配置中的错误导致 kinit 失败。
解决方法:请确保主机配置正确。
login: load_modules: can not open module /usr/lib/security/pam_krb5.so.1
原因:Kerberos PAM 模块可能缺失,也可能该模块不是有效的可执行二进制文件。
解决方法:请确保 Kerberos PAM 模块位于 /usr/lib/security 目录中,并且是有效的可执行二进制文件。另外,请确保 /etc/pam.conf 文件包含 pam_krb5.so.1 的正确路径。
Looping detected inside krb5_get_in_tkt
原因:Kerberos 多次尝试获取初始票证,但均失败。
解决方法:请确保至少有一个 KDC 正在响应验证请求。
Master key does not match database
原因:未从包含主密钥的数据库创建装入的数据库转储。主密钥位于 /var/krb5/.k5.REALM 中。
解决方法:请确保装入的数据库转储中的主密钥与 /var/krb5/.k5. REALM 中的主密钥匹配。
Matching credential not found
原因:未找到与请求匹配的凭证。凭证高速缓存中没有请求需要的凭证。
解决方法:请使用 kdestroy 销毁票证,然后使用 kinit 创建新票证。
Message out of order
原因:使用顺序保密性发送的消息到达时顺序混乱。某些消息可能已在传输过程中丢失。
解决方法:应重新初始化 Kerberos 会话。
Message stream modified
原因:计算出的校验和与消息校验和不匹配。消息在传输过程中可能已被修改,这表明存在安全泄露。
解决方法:请确保消息在网络中正确发送。由于此消息还可表明消息在发送过程中被篡改,因此请使用 kdestroy 销毁票证,然后重新初始化所使用的 Kerberos 服务。
本节按字母顺序 (N-Z) 列出了 Kerberos 命令、Kerberos 守护进程、PAM 框架、GSS 接口、NFS 服务和 Kerberos 库的常见错误消息。
No credentials cache file found
原因:Kerberos 无法找到凭证高速缓存 (/tmp/krb5cc_uid)。
解决方法:请确保该凭证文件存在并且可以读取。否则,请再次尝试执行 kinit。
No credentials were supplied, or the credentials were unavailable or inaccessible
No credential cache found
原因:用户的凭证高速缓存不正确或不存在。
解决方法:用户应在尝试启动服务之前运行 kinit。
No credentials were supplied, or the credentials were unavailable or inaccessible
No principal in keytab matches desired name
原因:尝试验证服务器时出现错误。
解决方法:请确保主机或服务主体位于服务器的密钥表文件中。
Operation requires “privilege” privilege
原因:正在使用的 admin 主体未在 kadm5.acl 文件中配置相应的权限。
解决方法:请使用具有相应权限的主体。或者,请通过修改 kadm5.acl 文件来配置所使用的主体,使其具有相应的权限。通常,名称中包含 /admin 的主体具有相应的权限。
PAM-KRB5 (auth): krb5_verify_init_creds failed: Key table entry not found
原因:远程应用程序尝试在本地 /etc/krb5/krb5.keytab 文件中读取主机的服务主体,但不存在任何主体。
解决方法:请将主机的服务主体添加到主机的密钥表文件中。
Password is in the password dictionary
原因:指定的口令位于正在使用的口令字典中。您选择的口令不适合用作口令。
解决方法:请选用包含混合口令类的口令。
Permission denied in replay cache code
原因:无法打开系统的重放高速缓存。首次运行服务器时所使用的用户 ID 可能与当前的用户 ID 不同。
解决方法:请确保重放高速缓存具有相应的权限。重放高速缓存存储在运行基于 Kerberos 的服务器应用程序的主机上。对于非 root 用户,重放高速缓存文件称为 /var/krb5/rcache/rc_service_name_ uid。对于 root 用户,重放高速缓存文件称为 /var/krb5/rcache/root/rc_ service_name。
Protocol version mismatch
原因:很可能向 KDC 发送了 Kerberos V4 请求。Kerberos 服务仅支持 Kerberos V5 协议。
解决方法:请确保应用程序使用的是 Kerberos V5 协议。
Request is a replay
原因:请求已发送到此服务器并进行了处理。票证可能已被盗用,并且其他用户正在尝试重新使用这些票证。
解决方法:请等待几分钟,然后重新发出请求。
Requested principal and ticket don't match
原因:您正在连接的服务主体与您所拥有的服务票证不匹配。
解决方法:请确保 DNS 正常运行。如果使用的是其他供应商的软件,请确保该软件使用的主体名称正确。
Requested protocol version not supported
原因:很可能向 KDC 发送了 Kerberos V4 请求。Kerberos 服务仅支持 Kerberos V5 协议。
解决方法:请确保应用程序使用的是 Kerberos V5 协议。
Server refused to negotiate authentication, which is required for encryption. Good bye.
原因:远程应用程序无法接受或已配置为不接受来自客户机的 Kerberos 验证。
解决方法:请提供可以协商验证的远程应用程序,或配置该应用程序以使用相应标志来打开验证。
Server refused to negotiate encryption. Good bye.
原因:无法与服务器协商加密。
解决方法:请通过使用 toggle encdebug 命令调用 telnet 命令,启动验证调试并查看调试消息以获取更多线索。
Server rejected authentication (during sendauth exchange)
原因:您正在尝试与其通信的服务器拒绝验证。此错误通常出现在 Kerberos 数据库传播过程中。一些常见的原因可能是 kpropd.acl 文件、DNS 或密钥表文件存在问题。
解决方法:如果在运行 kprop 以外的应用程序时收到此错误,请检查服务器的密钥表文件是否正确。
The ticket isn't for us
Ticket/authenticator don't match
原因:票证与验证者不匹配。请求中的主体名称可能与服务主体的名称不匹配,因为发送票证使用的是主体的 FQDN 名称,而服务期望非 FQDN 名称,反之亦然。
解决方法:如果在运行 kprop 以外的应用程序时收到此错误,请检查服务器的密钥表文件是否正确。
Ticket expired
原因:票证时间已到期。
解决方法:请使用 kdestroy 销毁票证,然后使用 kinit 创建新票证。
Ticket is ineligible for postdating
原因:主体不允许其票证以后生效。
解决方法:请使用 kadmin 修改主体以允许以后生效。
Ticket not yet valid
原因:以后生效的票证仍然无效。
解决方法:请使用正确的日期创建新票证,或等待当前票证生效。
Truncated input file detected
原因:操作中使用的数据库转储文件不是完整的转储文件。
解决方法:请重新创建转储文件,或使用其他数据库转储文件。
Unable to securely authenticate user ... exit
原因:无法与服务器协商验证。
解决方法:请通过使用 toggle authdebug 命令调用 telnet 命令,启动验证调试并查看调试消息以获取更多线索。另外,请确保具有有效凭证。
Wrong principal in request
原因:票证中包含无效的主体名称。此错误可能表明 DNS 或 FQDN 存在问题。
解决方法:请确保服务主体与票证中的主体匹配。
如果 krb5.conf 文件的格式不正确,telnet 命令将会失败。但是,dtlogin 和 login 命令仍将成功,即使按这些命令的要求指定 krb5.conf 文件也是如此。如果出现此问题,则会显示以下错误消息:
Error initializing krb5: Improper format of Kerberos configuration |
此外,格式不正确的 krb5.conf 文件还会阻止使用 GSSAPI 的应用程序使用 krb5 机制。
如果 krb5.conf 文件的格式存在问题,则安全性很容易受到破坏。您应首先解决该问题,然后再允许使用 Kerberos 功能。
如果传播 Kerberos 数据库失败,请在从 KDC 与主 KDC 之间尝试使用 /usr/bin/rlogin -x,反之亦然。
如果 KDC 已设置为限制访问,则会禁用 rlogin,因此无法使用它来解决此问题。要在 KDC 上启用 rlogin,必须启用 eklogin 服务。
# svcadm enable svc:/network/login:eklogin |
解决此问题后,需要禁用 eklogin 服务。
如果 rlogin 无法运行,则可能是因为 KDC 上的密钥表文件存在问题。如果 rlogin 可以运行,则问题不在于密钥表文件或名称服务,因为 rlogin 和传播软件使用相同的 host/host-name 主体。在这种情况下,请确保 kpropd.acl 文件正确。
如果挂载基于 Kerberos 的 NFS 文件系统失败,请确保 NFS 服务器上存在 /var/rcache/root 文件。如果该文件系统不属于 root,请将其删除并再次尝试挂载。
如果访问基于 Kerberos 的 NFS 文件系统时出现问题,请确保系统和 NFS 服务器上启用了 gssd 服务。
如果在尝试访问基于 Kerberos 的 NFS 文件系统时出现 invalid argument 或 bad directory 错误消息,则可能是因为在尝试挂载 NFS 文件系统时未使用全限定 DNS 名称。正在挂载的主机与服务器的密钥表文件中的服务主体的主机名部分不相同。
如果服务器有多个以太网接口,并且已将 DNS 设置为使用“每个接口一个名称”的方案,而不是“每台主机多条地址记录”的方案,则也可能会出现此问题。对于 Kerberos 服务,应为每台主机设置多条地址记录,如下所示 [Ken Hornstein,"Kerberos FAQ",[http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html],访问时间:1998 年 12 月 11 日。] :
my.host.name. A 1.2.3.4 A 1.2.4.4 A 1.2.5.4 my-en0.host.name. A 1.2.3.4 my-en1.host.name. A 1.2.4.4 my-en2.host.name. A 1.2.5.4 4.3.2.1 PTR my.host.name. 4.4.2.1 PTR my.host.name. 4.5.2.1 PTR my.host.name.
在本示例中,此设置允许引用服务器的密钥表文件中的不同接口和一个服务主体(而非三个服务主体)一次。
如果在尝试成为系统超级用户时验证失败,并且已将 root 主体添加到主机的密钥表文件中,则需要检查两个可能的问题。首先,请确保密钥表文件中的 root 主体具有一个全限定主机名作为其实例。如果具有该名称,请检查 /etc/resolv.conf 文件,以确保系统已正确设置为 DNS 客户机。
为了可以监视凭证映射,请首先在 /etc/gss/gsscred.conf 文件中取消对以下行的注释。
SYSLOG_UID_MAPPING=yes |
然后,指示 gssd 服务从 /etc/gss/gsscred.conf 文件中获取信息。
# pkill -HUP gssd |
现在,您应该可以在 gssd 请求凭证映射时对其进行监视。如果针对 auth 系统功能将 syslog.conf 文件设置为 debug 严重级别,则可通过 syslogd 记录这些映射。
本章介绍有关管理主体及与其关联的策略的过程。本章还将说明如何管理主机的密钥表文件。
需要管理主体和策略的用户应该阅读本章。阅读本章之前,应熟悉主体和策略,包括所有规划注意事项。请分别参阅第 20 章,Kerberos 服务介绍和第 21 章,规划 Kerberos 服务。
以下是本章中信息的列表。
主 KDC 上的 Kerberos 数据库包含您所在领域的所有 Kerberos 主体、主体口令、策略和其他管理信息。 创建和删除主体以及修改其属性时,可以使用 kadmin 或 gkadmin 命令。
kadmin 命令提供一个交互式的命令行界面,用于维护 Kerberos 主体、策略和密钥表文件。kadmin 命令具有以下两个版本:
除 kadmin 使用 Kerberos 来验证用户外,这两个版本的功能完全相同。如果要设置足够的数据库以便使用远程版本,则必须使用本地版本。
另外,Solaris 发行版还提供了 SEAM Administration Tool (gkadmin),这是一个交互式的图形用户界面 (graphical user interface, GUI),其功能基本上与 kadmin 命令相同。有关更多信息,请参见SEAM Administration Tool。
SEAM Administration Tool (SEAM Tool) 是一个交互式的图形用户界面 (graphical user interface, GUI),用于维护 Kerberos 主体和策略。此工具提供的功能与 kadmin 命令基本相同。但是,此工具不支持密钥表文件管理。必须使用 kadmin 命令来管理密钥表文件,如管理密钥表文件中所述。
与 kadmin 命令类似,SEAM Tool 使用 Kerberos 验证和加密 RPC 从网络中的任何位置安全操作。SEAM Tool 可以执行以下操作:
创建基于缺省值或现有主体的新主体。
创建基于现有策略的新策略。
为主体添加注释。
设置缺省值以创建新主体。
在不退出工具的情况下以其他主体身份登录。
打印或保存主体列表和策略列表。
查看和搜索主体列表和策略列表。
SEAM Tool 还会提供关联说明和一般联机帮助。
以下任务列表提供了指向可借助 SEAM Tool 完成的各种任务的链接:
此外,还可转至SEAM Tool 面板说明,了解可在 SEAM Tool 中指定或查看的所有主体属性和策略属性的说明。
本节列出了一些 kadmin 命令,其提供的功能与 SEAM Tool 相同。无需运行 X 窗口系统,便可使用这些命令。尽管本章中的大多数过程使用 SEAM Tool,但其中许多过程还提供了使用等效命令行的对应示例。
表 24–1 SEAM Tool 的等效命令行
SEAM Tool 过程 |
等效的 kadmin 命令 |
---|---|
查看主体列表。 |
list_principals 或 get_principals |
查看主体属性。 |
get_principal |
创建新主体。 |
add_principal |
复制主体。 |
无等效命令行 |
修改主体。 |
modify_principal 或 change_password |
删除主体。 |
delete_principal |
设置缺省值以创建新主体。 |
无等效命令行 |
查看策略列表。 |
list_policies 或 get_policies |
查看策略属性。 |
get_policy |
创建新策略。 |
add_policy |
复制策略。 |
无等效命令行 |
修改策略。 |
modify_policy |
删除策略。 |
delete_policy |
SEAM Tool 修改的唯一文件是 $HOME/.gkadmin 文件。该文件包含用于创建新主体的缺省值。通过从 "Edit" 菜单中选择 "Properties",可以更新该文件。
SEAM Tool 提供了打印功能和联机帮助功能。通过 "Print" 菜单,可将以下各项发送至打印机或文件:
通过 "Help" 菜单,可以访问关联说明和一般帮助。从 "Help" 菜单中选择 "Context-Sensitive Help" 时,将显示 "Context-Sensitive Help" 窗口并且工具会切换为帮助模式。在帮助模式下,如果单击该窗口中的任何字段、标签或按钮,将在 "Help" 窗口中显示有关该项的帮助。要切换回工具的一般模式,请在 "Help" 窗口中单击 "Dismiss"。
此外,还可选择 "Help Contents",这将打开一个 HTML 浏览器,其中会提供指向本章中介绍的一般概述和任务信息的链接。
随着站点开始积累大量主体和策略,使用 SEAM Tool 装入并显示主体和策略列表所需的时间将会越来越长。因此,使用该工具时的工作效率会下降。解决此问题有多种办法。
首先,通过使 SEAM Tool 不装入列表,可以完全省去装入列表的时间。可以设置此选项,方法是从 "Edit" 菜单中选择 "Properties",然后取消选中 "Show Lists" 字段。当然,如果该工具不装入列表,则不能显示这些列表,因此将无法再使用列表面板来选择主体或策略。而必须在提供的新 "Name" 字段中键入主体或策略名称,然后选择要对其执行的操作。键入名称与从列表中选择项的结果相同。
处理大型列表的另一种方法是对其进行高速缓存。实际上,已将 SEAM Tool 的缺省行为设置为将列表高速缓存一段时间。最初 SEAM Tool 还是必须将这些列表装入高速缓存。但在此后,该工具就可以使用高速缓存,而不必再次获取列表。这样便无需不断从服务器装入列表(正是此操作占用了大量时间)。
通过从 "Edit" 菜单中选择 "Properties",可以设置列表高速缓存。有两种高速缓存设置。可以选择将列表永久高速缓存;也可以指定必须将列表从服务器重新装入高速缓存的时间限制。
对列表进行高速缓存时,仍然可以使用列表面板来选择主体和策略,因此该方法不会像第一种方法那样影响 SEAM Tool 的使用方式。另外,尽管使用高速缓存使您无法查看其他用户所做的更改,但您仍可以根据自己所做的更改查看最新列表信息,因为您所做的更改会对服务器和高速缓存中的列表进行更新。而且,如果要更新高速缓存以查看其他更改并获取最新列表副本,可在需要从服务器刷新高速缓存时使用 "Refresh" 菜单。
使用 gkadmin 命令启动 SEAM Tool。
$ /usr/sbin/gkadmin |
此时会显示 "SEAM Administration Login" 窗口。
如果不想使用现有的缺省值,请指定新的缺省值。
该窗口会自动使用缺省值填充。缺省主体名称 (username/admin) 是通过从 USER 环境变量获取当前身份并在其后附加 /admin 确定的。缺省的 "Realm" 和 "Master KDC" 字段选自 /etc/krb5/krb5.conf 文件。如果要恢复这些缺省值,请单击 "Start Over"。
每个主体名称可以执行的管理操作在 Kerberos ACL 文件 /etc/krb5/kadm5.acl 中指定。有关受限权限的信息,请参见以受限 Kerberos 管理权限使用 SEAM Tool。
键入指定主体名称的口令。
单击 "OK"。
此时会显示以下窗口:
本节提供使用 SEAM Tool 管理主体的逐步说明,还提供等效命令行示例(如果有)。
任务 |
说明 |
参考 |
---|---|---|
查看主体列表。 |
通过单击 "Principals" 选项卡来查看主体列表。 | |
查看主体属性。 |
通过在 "Principal List" 中选择 "Principal",然后单击 "Modify" 按钮来查看主体的属性。 | |
创建新主体。 |
通过单击 "Principal List" 面板中的 "Create New" 按钮来创建新主体。 | |
复制主体。 |
通过在 "Principal List" 中选择要复制的主体,然后单击 "Duplicate" 按钮来复制主体。 | |
修改主体。 |
通过在 "Principal List" 中选择要修改的主体,然后单击 "Modify" 按钮来修改主体。 请注意,不能修改主体的名称。要重命名主体,必须首先复制该主体,为其指定一个新名称并保存,然后删除旧主体。 | |
删除主体。 |
通过在 "Principal List" 中选择要删除的主体,然后单击 "Delete" 按钮来删除主体。 | |
设置缺省值以创建新主体。 |
通过从 "Edit" 菜单中选择 "Properties" 来设置缺省值以创建新主体。 | |
修改 Kerberos 管理权限(kadm5.acl 文件)。 |
仅限命令行。Kerberos 管理权限确定主体可对 Kerberos 数据库执行的操作,如添加和修改。 要修改每个主体的 Kerberos 管理权限,需要编辑 /etc/krb5/kadm5.acl 文件。 |
尽管 SEAM Tool 使用方便,但它不提供自动创建新主体的方法。如果需要在短时间内添加 10 个甚至 100 个新主体,则自动创建尤其有用。而在 Bourne shell 脚本中使用 kadmin.local 命令正好可满足这一需要。
以下 shell 脚本行示例说明了如何自动创建新主体:
awk '{ print "ank +needchange -pw", $2, $1 }' < /tmp/princnames | time /usr/sbin/kadmin.local> /dev/null |
为了方便阅读,已将此示例拆分为两行。该脚本将读入一个称为 princnames 的文件(其中包含主体名称及其口令)然后将其添加到 Kerberos 数据库。您必须创建 princnames 文件,并在每一行上包含一个主体名称及其口令,中间用一个或多个空格分隔。+needchange 选项用于配置主体,以便在用户第一次使用该主体登录时提示其输入新口令。此做法有助于确保 princnames 文件中的口令不会引入安全风险。
可以生成更详细的脚本。例如,脚本可使用名称服务中的信息来获取主体名称的用户名列表。所执行的操作和执行操作的方式取决于站点的需要以及脚本编制技术。
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
此时会显示主体列表。
显示特定主体或主体子列表。
在 "Filter" 字段中键入过滤字符串,然后按 "Return"。如果过滤操作成功,则会显示与过滤器匹配的主体列表。
过滤字符串必须由一个或多个字符组成。由于过滤机制区分大小写,因此需要对过滤器使用正确的大小写字母。例如,如果键入过滤字符串 ge,则过滤机制仅显示包含 ge 字符串的主体(如 george 或 edge)。
如果要显示主体的完整列表,请单击 "Clear Filter"。
在以下示例中,kadmin 的 list_principals 命令用于列出与 test* 匹配的所有主体。通配符可与 list_principals 命令一起使用。
kadmin: list_principals test* test1@EXAMPLE.COM test2@EXAMPLE.COM kadmin: quit |
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
在列表中选择要查看的主体,然后单击 "Modify"。
此时会显示包含该主体某些属性的 "Principal Basics" 面板。
继续单击 "Next" 以查看该主体的所有属性。
有三个窗口包含属性信息。请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关每个窗口中各种属性的信息。或者,转至SEAM Tool 面板说明,了解所有主体属性说明。
查看完毕后,单击 "Cancel"。
以下示例显示了查看 jdb/admin 主体时的第一个窗口。
在以下示例中,kadmin 的 get_principal 命令用于查看 jdb/admin 主体的属性。
kadmin: getprinc jdb/admin Principal: jdb/admin@EXAMPLE.COM Expiration date: Fri Aug 25 17:19:05 PDT 2004 Last password change: [never] Password expiration date: Wed Apr 14 11:53:10 PDT 2003 Maximum ticket life: 1 day 16:00:00 Maximum renewable life: 1 day 16:00:00 Last modified: Thu Jan 14 11:54:09 PST 2003 (admin/admin@EXAMPLE.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 1 Key: vno 1, DES cbc mode with CRC-32, no salt Attributes: REQUIRES_HW_AUTH Policy: [none] kadmin: quit |
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
如果要创建一个可能需要新策略的新主体,则应在创建新主体之前创建新策略。请转至如何创建新的 Kerberos 策略。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
单击 "New"。
此时会显示包含某些主体属性的 "Principal Basics" 面板。
指定主体名称和口令。
必须提供主体名称和口令。
指定该主体属性的值,然后继续单击 "Next" 以指定其他属性。
有三个窗口包含属性信息。请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关每个窗口中各种属性的信息。或者,转至SEAM Tool 面板说明,了解所有主体属性说明。
单击 "Save" 以保存主体,或在最后一个面板上单击 "Done"。
如有必要,在 /etc/krb5/kadm5.acl 文件中为新主体设置 Kerberos 管理权限。
有关更多详细信息,请参见如何修改 Kerberos 管理权限。
以下示例显示了创建称为 pak 的新主体时的 "Principal Basics" 面板。该策略设置为 testuser。
在以下示例中,kadmin 的 add_principal 命令用于创建称为 pak 的新主体。该主体的策略设置为 testuser。
kadmin: add_principal -policy testuser pak Enter password for principal "pak@EXAMPLE.COM": <Type the password> Re-enter password for principal "pak@EXAMPLE.COM": <Type the password again> Principal "pak@EXAMPLE.COM" created. kadmin: quit |
此过程说明如何使用某个现有主体的全部或部分属性来创建新主体。此过程没有等效命令行。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
在列表中选择要复制的主体,然后单击 "Duplicate"。
此时会显示 "Principal Basics" 面板。除空的 "Principal Name" 和 "Password" 字段之外,选定主体的其他属性都将被复制。
指定主体名称和口令。
必须提供主体名称和口令。要完全复制选定主体,请单击 "Save" 并跳至步骤 7。
指定该主体属性的其他值,然后继续单击 "Next" 以指定其他属性。
有三个窗口包含属性信息。请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关每个窗口中各种属性的信息。或者,转至SEAM Tool 面板说明,了解所有主体属性说明。
单击 "Save" 以保存主体,或在最后一个面板上单击 "Done"。
如有必要,在 /etc/krb5/kadm5.acl 文件中为主体设置 Kerberos 管理权限。
有关更多详细信息,请参见如何修改 Kerberos 管理权限。
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
在列表中选择要修改的主体,然后单击 "Modify"。
此时会显示包含该主体某些属性的 "Principal Basics" 面板。
修改该主体的属性,然后继续单击 "Next" 以修改其他属性。
有三个窗口包含属性信息。请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关每个窗口中各种属性的信息。或者,转至SEAM Tool 面板说明,了解所有主体属性说明。
不能修改主体的名称。要重命名主体,必须首先复制该主体,为其指定一个新名称并保存,然后删除旧主体。
单击 "Save" 按钮以保存主体,或在最后一个面板上单击 "Done"。
在 /etc/krb5/kadm5.acl 文件中,修改该主体的 Kerberos 管理权限。
有关更多详细信息,请参见如何修改 Kerberos 管理权限。
在以下示例中,kadmin 的 change_password 命令用于修改 jdb 主体的口令。change_password 命令不允许将口令更改为主体口令历史记录中的口令。
kadmin: change_password jdb Enter password for principal "jdb": <Type the new password> Re-enter password for principal "jdb": <Type the password again> Password for "jdb@EXAMPLE.COM" changed. kadmin: quit |
要修改主体的其他属性,必须使用 kadmin 的 modify_principal 命令。
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Principals" 选项卡。
在列表中选择要删除的主体,然后单击 "delete"。
确认删除后,将删除该主体。
从 Kerberos 访问控制列表 (access control list, ACL) 文件 /etc/krb5/kadm5.acl 中删除该主体。
有关更多详细信息,请参见如何修改 Kerberos 管理权限。
在以下示例中,kadmin 的 delete_principal 命令用于删除 jdb 主体。
kadmin: delete_principal pak Are you sure you want to delete the principal "pak@EXAMPLE.COM"? (yes/no): yes Principal "pak@EXAMPLE.COM" deleted. Make sure that you have removed this principal from all ACLs before reusing. kadmin: quit |
此过程没有等效命令行。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
从 "Edit" 菜单中选择 "Properties"。
此时会显示 "Properties" 窗口。
选择要在创建新主体时使用的缺省值。
请从 "Help" 菜单中选择 "Context-Sensitive Help",以获取有关每个窗口中各种属性的信息。
单击 "Save"。
尽管您的站点可能有许多用户主体,但您通常只希望一小部分用户能够管理 Kerberos 数据库。管理 Kerberos 数据库的权限由 Kerberos 访问控制列表 (access control list, ACL) 文件 kadm5.acl 确定。通过 kadm5.acl 文件,可以允许或禁用各个主体的权限。或者,可在主体名称中使用 "*" 通配符来指定主体组的权限。
成为主 KDC 的超级用户。
编辑 /etc/krb5/kadm5.acl 文件。
principal privileges [principal-target] |
principal |
指定要为其授予权限的主体。 主体名称的任何部分都可以包含 "*" 通配符,这在为一组主体提供相同权限时很有用。例如,如果要指定包含 admin 实例的所有主体,则可使用 */admin@realm。 请注意,admin 实例常用于将单独的权限(如对 Kerberos 数据库的管理访问权限)授予单独的 Kerberos 主体。 例如,用户 jdb 可能具有用于管理的主体 jdb/admin。这样,用户 jdb 便仅在实际需要使用这些权限时,才会获取 jdb/admin 票证。 |
|
privileges |
指定主体能够执行和不能执行的操作。 此字段由一个或多个下列字符或其对应大写形式的字符组成。 如果字符为大写形式(或未指定),则不允许执行该操作。 如果字符为小写形式,则允许执行该操作。 |
|
|
a |
[不]允许添加主体或策略。 |
|
d |
[不]允许删除主体或策略。 |
|
m |
[不]允许修改主体或策略。 |
|
c |
[不]允许更改主体的口令。 |
|
i |
[不]允许查询 Kerberos 数据库。 |
|
l |
[不]允许列出 Kerberos 数据库中的主体或策略。 |
|
x 或 * |
允许所有权限 (admcil)。 |
principal-target |
在此字段中指定主体时,privileges 仅在 principal 对 principal-target 进行操作时,才应用于 principal。主体名称的任何部分都可以包含 "*" 通配符,这在对主体分组时很有用。 |
kadm5.acl 文件中的以下项授予 EXAMPLE.COM 领域中包含 admin 实例的任何主体对 Kerberos 数据库的所有权限:
*/admin@EXAMPLE.COM * |
kadm5.acl 文件中的以下项授予 jdb@EXAMPLE.COM 主体添加、列出和查询包含 root 实例的任何主体的权限。
jdb@EXAMPLE.COM ali */root@EXAMPLE.COM |
本节提供使用 SEAM Tool 管理策略的逐步说明,还提供等效命令行示例(如果有)。
任务 |
说明 |
参考 |
---|---|---|
查看策略列表。 |
通过单击 "Policies" 选项卡来查看策略列表。 | |
查看策略属性。 |
通过在 "Policy List" 中选择策略,然后单击 "Modify" 按钮来查看策略的属性。 | |
创建新策略。 |
通过单击 "Policy List" 面板中的 "Create New" 按钮来创建新策略。 | |
复制策略。 |
通过在 "Policy List" 中选择要复制的策略,然后单击 "Duplicate" 按钮来复制策略。 | |
修改策略。 |
通过在 "Policy List" 中选择要修改的策略,然后单击 "Modify" 按钮来修改策略。 请注意,不能修改策略的名称。要重命名策略,必须首先复制该策略,为其指定一个新名称并保存,然后删除旧策略。 | |
删除策略。 |
通过在 "Policy List" 中选择要删除的策略,然后单击 "Delete" 按钮来删除策略。 |
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
此时会显示策略列表。
显示特定策略或策略子列表。
在 "Filter" 字段中键入过滤字符串,然后按 "Return"。如果过滤操作成功,则会显示与过滤器匹配的策略列表。
过滤字符串必须由一个或多个字符组成。由于过滤机制区分大小写,因此需要对过滤器使用正确的大小写字母。例如,如果键入过滤字符串 ge,则过滤机制仅显示包含 ge 字符串的策略(如 george 或 edge)。
如果要显示策略的完整列表,请单击 "Clear Filter"。
在以下示例中,kadmin 的 list_policies 命令用于列出与 *user* 匹配的所有策略。通配符可与 list_policies 命令一起使用。
kadmin: list_policies *user* testuser enguser kadmin: quit |
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
在列表中选择要查看的策略,然后单击 "Modify"。
此时会显示 "Policy Details" 面板。
查看完毕后,单击 "Cancel"。
以下示例显示了查看 test 策略时的 "Policy Details" 面板。
在以下示例中,kadmin 的 get_policy 命令用于查看 enguser 策略的属性。
kadmin: get_policy enguser Policy: enguser Maximum password life: 2592000 Minimum password life: 0 Minimum password length: 8 Minimum number of password character classes: 2 Number of old keys kept: 3 Reference count: 0 kadmin: quit |
引用计数是使用此策略的主体数。
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
单击 "New"。
此时会显示 "Policy Details" 面板。
在 "Policy Name" 字段中指定策略的名称。
必须提供策略名称。
指定策略属性的值。
请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关此窗口中各种属性的信息。或者,转至表 24–5,了解所有策略属性说明。
单击 "Save" 按钮以保存策略,或单击 "Done"。
在以下示例中,创建了一个称为 build11 的新策略。"Minimum Password Classes" 设置为 3。
在以下示例中,kadmin 的 add_policy 命令用于创建 build11 策略。此策略要求口令中至少有 3 类字符。
$ kadmin kadmin: add_policy -minclasses 3 build11 kadmin: quit |
此过程说明如何使用某个现有策略的全部或部分属性来创建新策略。此过程没有等效命令行。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
在列表中选择要复制的策略,然后单击 "Duplicate"。
此时会显示 "Policy Details" 面板。除空的 "Policy Name" 字段以外,选定策略的其他所有属性都将被复制。
在 "Policy Name" 字段中指定复制策略的名称。
必须提供策略名称。要完全复制选定策略,请跳至步骤 6。
指定策略属性的其他值。
请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关此窗口中各种属性的信息。或者,转至表 24–5,了解所有策略属性说明。
单击 "Save" 按钮以保存策略,或单击 "Done"。
此过程后附等效命令行示例。
如有必要,启动 SEAM Tool。
有关详细信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
在列表中选择要修改的策略,然后单击 "Modify"。
此时会显示 "Policy Details" 面板。
修改该策略的属性。
请从 "Help" 菜单中选择 "Context-Sensitive Help",获取有关此窗口中各种属性的信息。或者,转至表 24–5,了解所有策略属性说明。
不能修改策略的名称。要重命名策略,必须首先复制该策略,为其指定一个新名称并保存,然后删除旧策略。
单击 "Save" 按钮以保存策略,或单击 "Done"。
在以下示例中,kadmin 的 modify_policy 命令用于将 build11 策略的最小口令长度修改为 5 个字符。
$ kadmin kadmin: modify_policy -minlength 5 build11 kadmin: quit |
此过程后附等效命令行示例。
删除某策略之前,必须从当前正在使用该策略的所有主体取消该策略。为此,需要修改这些主体的策略属性。如果有任何主体在使用该策略,则无法将其删除。
如有必要,启动 SEAM Tool。
有关更多信息,请参见如何启动 SEAM Tool。
$ /usr/sbin/gkadmin |
单击 "Policies" 选项卡。
在列表中选择要删除的策略,然后单击 "Delete"。
确认删除后,将删除该策略。
在以下示例中,kadmin 的 delete_policy 命令用于删除 build11 策略。
kadmin: delete_policy build11 Are you sure you want to delete the policy "build11"? (yes/no): yes kadmin: quit |
删除某策略之前,必须从当前正在使用该策略的所有主体取消该策略。为此,需要对受影响的主体使用 kadmin 的 modify_principal - policy 命令。如果主体正在使用该策略,则 delete_policy 命令将会失败。
本节为 SEAM Tool 中的每个面板提供说明。另外,还提供有关以受限权限使用 SEAM Tool 的信息。
本节提供可在 SEAM Tool 中指定或查看的每个主体和策略属性的说明。这些属性按显示它们的面板进行组织。
表 24–2 SEAM Tool 的 "Principal Basics" 面板中的属性
属性 |
说明 |
---|---|
Principal Name |
主体的名称(全限定主体名称的 primary/instance 部分)。主体是 KDC 可以为其指定票证的唯一标识。 修改主体时不能编辑其名称。 |
Password |
主体的口令。可使用 "Generate Random Password" 按钮为主体创建随机口令。 |
Policy |
主体的可用策略菜单。 |
Account Expires |
主体帐户的失效日期和时间。帐户失效后,主体就无法再获取票证授予票证 (Ticket-Granting Ticket, TGT),并且可能无法登录。 |
Last Principal Change |
上次修改主体信息的日期。(只读) |
Last Changed By |
上次更改此主体帐户的主体的名称。(只读) |
注释 |
与主体有关的注释(如“临时帐户”)。 |
表 24–3 SEAM Tool 的 "Principal Details" 面板中的属性
属性 |
说明 |
---|---|
Last Success |
主体上次登录成功的日期和时间。(只读) |
Last Failure |
主体上次登录失败的日期和时间。(只读) |
Failure Count |
主体登录失败的次数。(只读) |
Last Password Change |
上次更改主体口令的日期和时间。(只读) |
Password Expires |
主体当前口令失效的日期和时间。 |
Key Version |
主体的密钥版本号。通常,只有在口令已泄漏的情况下才会更改此属性。 |
Maximum Lifetime (seconds) |
可将票证授予主体的最长时间(不续用)。 |
Maximum Renewal (seconds) |
主体可续用现有票证的最长时间。 |
表 24–4 SEAM Tool 的 "Principal Flags" 面板中的属性
属性(单选按钮) |
说明 |
---|---|
Disable Account |
选中此项后,将禁止主体登录。此属性提供了一种临时冻结主体帐户的简便方法。 |
Require Password Change |
选中此项后,将使主体的当前口令失效,这将会强制用户使用 kpasswd 命令来创建新口令。如果安全性被破坏,并且需要确保替换旧口令,则此属性很有用。 |
Allow Postdated Tickets |
选中此项后,将允许主体获取以后生效的票证。 例如,如果 cron 作业必须在几小时后运行,但您又因为票证的生命周期不够长而无法提前获取票证,则可能需要对其使用以后生效的票证。 |
Allow Forwardable Tickets |
选中此项后,将允许主体获取可转发的票证。 可转发的票证即可转发至远程主机以提供单点登录会话的票证。例如,如果使用可转发的票证并且通过 ftp 或 rsh 进行自我验证,则可使用其他服务(如 NFS 服务),而不会提示您输入其他口令。 |
Allow Renewable Tickets |
选中此项后,将允许主体获取可续用的票证。 主体可以自动延长可续用票证的失效日期或时间,而不必在票证首次失效后获取新的票证。目前,NFS 服务是可以续用票证的票证服务。 |
Allow Proxiable Tickets |
选中此项后,将允许主体获取可代理的票证。 可代理票证即可被服务以客户机名义执行客户机操作时使用的票证。借助可代理票证,服务可采用客户机的身份来获取其他服务的票证。但是,该服务不能获取票证授予票证 (Ticket-Granting Ticket, TGT)。 |
Allow Service Tickets |
选中此项后,将允许为主体颁发服务票证。 不允许为 kadmin/hostname 和 changepw/hostname 主体颁发服务票证。此做法可确保只有这些主体才能更新 KDC 数据库。 |
Allow TGT-Based Authentication |
选中此项后,将允许服务主体为其他主体提供服务。具体而言,此属性允许 KDC 为服务主体颁发服务票证。 此属性仅对服务主体有效。如果取消选中此项,将无法为服务主体颁发服务票证。 |
Allow Duplicate Authentication |
选中此项后,将允许用户主体获取其他用户主体的服务票证。 此属性仅对用户主体有效。如果取消选中此项,用户主体将仍可获取服务主体的服务票证,但不能获取其他用户主体的服务票证。 |
Required Preauthentication |
选中此项后,KDC 在验证(通过软件)主体确为请求 TGT 的主体之前,不会将请求的票证授予票证 (Ticket-Granting Ticket, TGT) 发送给该主体。此预验证通常通过附加口令(如 DES 卡)完成。 如果取消选中此项,则 KDC 不必在向主体发送请求的 TGT 之前预先验证主体。 |
Required Hardware Authentication |
选中此项后,KDC 在验证(通过硬件)主体确为请求 TGT 的主体之前,不会将请求的票证授予票证 (Ticket-Granting Ticket, TGT) 发送给该主体。例如,可对 Java 环形阅读器进行硬件预验证。 如果取消选中此项,则 KDC 不必在向主体发送请求的 TGT 之前预先验证主体。 |
表 24–5 SEAM Tool 的 "Policy Basics" 面板中的属性
属性 |
说明 |
---|---|
Policy Name |
策略的名称。策略是一组用于管理主体口令和票证的规则。 修改策略时不能编辑其名称。 |
Minimum Password Length |
主体口令的最小长度。 |
Minimum Password Classes |
主体口令中要求使用的最少不同字符类型数。 例如,最少类值为 2 表示口令必须至少使用两种不同的字符类型,如字母和数字 (hi2mom)。值为 3 表示口令必须至少使用三种不同的字符类型,如字母、数字和标点符号 (hi2mom!)。依此类推。 值为 1 则表示对口令字符类型数未设置任何限制。 |
Saved Password History |
主体先前使用的口令数,以及无法重新使用的先前口令的列表。 |
Minimum Password Lifetime (seconds) |
口令在可更改之前必须经历的最短时间。 |
Maximum Password Lifetime (seconds) |
口令在必须更改之前可以经历的最长时间。 |
Principals Using This Policy |
当前应用此策略的主体数。(只读) |
如果 admin 主体拥有管理 Kerberos 数据库的所有权限,则可使用 SEAM Administration Tool 的所有功能。但是,您的权限可能受到限制,如仅允许查看主体列表或更改主体口令。借助受限 Kerberos 管理权限,仍然可以使用 SEAM Tool。但是,SEAM Tool 的各个部分会基于未拥有的 Kerberos 管理权限而变化。表 24–6 显示了 SEAM Tool 基于 Kerberos 管理权限变化的情况。
没有列表权限时,SEAM Tool 会发生最直观的变化。如果没有列表权限,列表面板便不会显示供您处理的主体和策略列表。相反,您必须使用列表面板中的 "Name" 字段来指定要处理的主体或策略。
如果您登录到 SEAM Tool,但却没有足够的权限来使用它执行任务,则会显示以下消息并且会返回到 "SEAM Administration Login" 窗口:
Insufficient privileges to use gkadmin: ADMCIL. Please try using another principal. |
要更改主体的权限以便它可管理 Kerberos 数据库,请转至如何修改 Kerberos 管理权限。
表 24–6 以受限 Kerberos 管理权限使用 SEAM Tool
禁用的权限 |
SEAM Tool 如何变化 |
---|---|
a(添加) |
"Principal List" 和 "Policy List" 面板中的 "Create New" 和 "Duplicate" 按钮不可用。如果没有添加权限,则无法创建新主体或策略,也不能复制它们。 |
d(删除) |
"Principal List" 和 "Policy List" 面板中的 "Delete" 按钮不可用。如果没有删除权限,则无法删除主体或策略。 |
m(修改) |
"Principal List" 和 "Policy List" 面板中的 "Modify" 按钮不可用。如果没有修改权限,则无法修改主体或策略。 而且,如果 "Modify" 按钮不可用,则即使您拥有更改口令的权限,也不能修改主体的口令。 |
c(更改口令) |
"Principal Basics" 面板中的 "Password" 字段处于只读状态,无法更改。如果没有更改口令的权限,则无法修改主体的口令。 请注意,即使您拥有更改口令的权限,还必须同时拥有修改权限才能更改主体的口令。 |
i(查询数据库) |
"Principal List" 和 "Policy List" 面板中的 "Modify" 和 "Duplicate" 按钮不可用。如果没有查询权限,则无法修改或复制主体或策略。 而且,如果 "Modify" 按钮不可用,则即使您拥有更改口令的权限,也不能修改主体的口令。 |
l(列出) |
列表面板中的主体和策略列表不可用。如果没有列表权限,则必须使用列表面板中的 "Name" 字段来指定要处理的主体或策略。 |
提供服务的每台主机都必须包含称为 keytab(密钥表)的本地文件,keytab(密钥表)是“key table(密钥表)”的缩写。密钥表包含相应服务的主体,称为服务密钥。服务使用服务密钥向 KDC 进行自我验证,并且只有 Kerberos 和服务本身知道服务密钥。例如,如果您有基于 Kerberos 的 NFS 服务器,则该服务器必须具有包含其 nfs 服务主体的密钥表文件。
要将服务密钥添加至密钥表文件,应使用 kadmin 的 ktadd 命令,将相应的服务主体添加至主机的密钥表文件。由于要将服务主体添加至密钥表文件,因此该主体必须已存在于 Kerberos 数据库中,以便 kadmin 可验证其存在。在主 KDC 上,密钥表文件的缺省位置为:/etc/krb5/kadm5.keytab。在提供基于 Kerberos 的服务的应用程序服务器上,密钥表文件的缺省位置为:/etc/krb5/krb5.keytab。
密钥表类似于用户的口令。正如用户保护其口令很重要一样,应用程序服务器保护其密钥表文件同样也很重要。应始终将密钥表文件存储在本地磁盘上,并且只允许 root 用户读取这些文件。另外,绝不要通过不安全的网络发送密钥表文件。
还有一种特殊情况需要将 root 主体添加至主机的密钥表文件。如果希望 Kerberos 客户机用户挂载基于 Kerberos 的 NFS 文件系统(要求与超级用户等效的权限),则必须将客户机的 root 主体添加至客户机的密钥表文件。否则,每当用户要使用 root 权限挂载基于 Kerberos 的 NFS 文件系统时,即使正在使用自动挂载程序,也必须以 root 身份使用 kinit 命令来获取客户机 root 主体的凭证。
设置主 KDC 时,需要将 kadmind 和 changepw 主体添加至 kadm5.keytab 文件。
可用于管理密钥表文件的另一个命令是 ktutil 命令。使用此交互式命令,可在没有 Kerberos 管理权限的情况下管理本地主机的密钥表文件,因为 ktutil 不会像 kadmin 那样与 Kerberos 数据库交互,因此,将主体添加至密钥表文件后,可使用 ktutil 来查看密钥表文件中的密钥列表,或临时禁用对服务的验证。
使用 kadmin 中的 ktadd 命令更改密钥表文件中的主体时,将生成一个新的密钥并将其添加至密钥表文件。
任务 |
说明 |
参考 |
---|---|---|
将服务主体添加至密钥表文件。 |
使用 kadmin 的 ktadd 命令将服务主体添加至密钥表文件。 | |
从密钥表文件中删除服务主体。 |
使用 kadmin 的 ktremove 命令从密钥表文件中删除服务主体。 | |
显示密钥表文件中的密钥列表(主体列表)。 |
使用 ktutil 命令来显示密钥表文件中的密钥列表。 | |
临时禁用对主机上的服务的验证。 |
此过程可以快速地临时禁用对主机上的服务的验证,而不需要 kadmin 权限。 使用 ktutil 从服务器的密钥表文件中删除服务主体之前,应将原始密钥表文件复制到一个临时位置。如果要再次启用该服务,请将原始密钥表文件复制回其相应的位置。 |
确保 Kerberos 数据库中已存在该主体。
有关更多信息,请参见如何查看 Kerberos 主体列表。
成为需要将主体添加至其密钥表文件的主机的超级用户。
启动 kadmin 命令。
# /usr/sbin/kadmin |
kadmin: ktadd [-e enctype] [-k keytab] [-q] [principal | -glob principal-exp] |
覆盖 krb5.conf 文件中定义的加密类型列表。
指定密钥表文件。缺省情况下,使用 /etc/krb5/krb5.keytab。
显示简要信息。
指定要添加至密钥表文件的主体。可以添加以下服务主体:host、root、nfs 和 ftp。
指定主体表达式。与 principal-exp 匹配的所有主体都将添加至密钥表文件。主体表达式的规则与 kadmin 的 list_principals 命令的规则相同。
退出 kadmin 命令。
kadmin: quit |
在以下示例中,kadmin/admin 和 kadmin/changepw 主体被添加至主 KDC 的密钥表文件。对于该示例,密钥表文件必须是在 kdc.conf 文件中指定的文件。
kdc1 # /usr/sbin/kadmin.local kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/admin kadmin/changepw EnEntry for principal kadmin/admin@example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/admin@example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/admin@example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/admin@example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw@example.com with kvno 3, encryption type AES-128 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw@example.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw@example.com with kvno 3, encryption type ARCFOUR with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. Entry for principal kadmin/changepw@example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab. kadmin.local: quit |
在以下示例中,denver 的 host 主体被添加至 denver 的密钥表文件,以便 KDC 验证 denver 的网络服务。
denver # /usr/sbin/kadmin kadmin: ktadd host/denver@example.com@EXAMPLE.COM 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: quit |
成为包含必须从其密钥表文件中删除的服务主体的主机的超级用户。
启动 kadmin 命令。
# /usr/sbin/kadmin |
(可选的)要显示密钥表文件中的当前主体(密钥)列表,请使用 ktutil 命令。
有关详细说明,请参见如何显示密钥表文件中的密钥列表(主体)。
kadmin: ktremove [-k keytab] [-q] principal [kvno | all | old ] |
指定密钥表文件。缺省情况下,使用 /etc/krb5/krb5.keytab。
显示简要信息。
指定要从密钥表文件中删除的主体。
删除密钥版本号与 kvno 匹配的指定主体的所有项。
删除指定主体的所有项。
删除指定主体(具有最高密钥版本号的主体除外)的所有项。
退出 kadmin 命令。
kadmin: quit |
在以下示例中,从 denver 的密钥表文件中删除了 denver 的 host 主体。
denver # /usr/sbin/kadmin kadmin: ktremove host/denver.example.com@EXAMPLE.COM kadmin: Entry for principal host/denver.example.com@EXAMPLE.COM with kvno 3 removed from keytab WRFILE:/etc/krb5/krb5.keytab. kadmin: quit |
成为包含密钥表文件的主机的超级用户。
尽管可以创建由其他用户拥有的密钥表文件,但使用密钥表文件的缺省位置需要 root 拥有权。
启动 ktutil 命令。
# /usr/bin/ktutil |
ktutil: read_kt keytab |
ktutil: list |
此时会显示当前的密钥列表缓冲区。
退出 ktutil 命令。
ktutil: quit |
以下示例显示了 denver 主机的 /etc/krb5/krb5.keytab 文件中的密钥列表。
denver # /usr/bin/ktutil ktutil: read_kt /etc/krb5/krb5.keytab ktutil: list slot KVNO Principal ---- ---- --------------------------------------- 1 5 host/denver@EXAMPLE.COM ktutil: quit |
有时可能需要在网络应用程序服务器上,临时禁用对服务(如 rlogin 或 ftp)的验证机制。例如,可能希望在执行维护过程时禁止用户登录到系统。使用 ktutil 命令,可以通过从服务器的密钥表文件中删除服务主体来完成此任务,而不需要 kadmin 权限。要再次启用验证,只需要将保存的原始密钥表文件复制回其原始位置。
缺省情况下,大多数服务都被设置为要求验证。如果某服务未设置为要求验证,则即使对该服务禁用验证,该服务仍然会运行。
成为包含密钥表文件的主机的超级用户。
尽管可以创建由其他用户拥有的密钥表文件,但使用密钥表文件的缺省位置需要 root 拥有权。
将当前密钥表文件保存到临时文件。
启动 ktutil 命令。
# /usr/bin/ktutil |
ktutil: read_kt keytab |
ktutil: list |
此时会显示当前的密钥列表缓冲区。请注意要禁用的服务的槽号。
要临时禁用主机的服务,请使用 delete_entry 命令从密钥列表缓冲区中删除特定的服务主体。
ktutil: delete_entry slot-number |
其中,slot-number 指定要删除的服务主体的槽号,可使用 list 命令来显示它。
使用 write_kt 命令,将密钥列表缓冲区写入新的密钥表文件。
ktutil: write_kt new-keytab |
退出 ktutil 命令。
ktutil: quit |
移动新的密钥表文件。
# mv new-keytab keytab |
如果要再次启用该服务,请将临时(原始)密钥表文件复制回其原始位置。
在以下示例中,临时禁用了 denver 主机上的 host 服务。要重新启用 denver 上的主机服务,应将 krb5.keytab.temp 文件复制到 /etc/krb5/krb5.keytab 文件中。
denver # cp /etc/krb5/krb5.keytab /etc/krb5/krb5.keytab.temp denver # /usr/bin/ktutil ktutil:read_kt /etc/krb5/krb5.keytab ktutil:list slot KVNO Principal ---- ---- --------------------------------------- 1 8 root/denver@EXAMPLE.COM 2 5 host/denver@EXAMPLE.COM ktutil:delete_entry 2 ktutil:list slot KVNO Principal ---- ---- -------------------------------------- 1 8 root/denver@EXAMPLE.COM ktutil:write_kt /etc/krb5/new.krb5.keytab ktutil: quit denver # cp /etc/krb5/new.krb5.keytab /etc/krb5/krb5.keytab |
本章适用于其系统中配置了 Kerberos 服务的人员。本章介绍如何使用提供的基于 Kerberos 的命令和服务。阅读本章中的这些命令之前,您应该对非基于 Kerberos 的版本中的这些命令比较熟悉。
由于本章适用于一般读者,因此其中包含有关票证的信息:获取、查看和销毁票证。本章还包含有关选择或更改 Kerberos 口令的信息。
以下是本章中信息的列表:
有关 Solaris Kerberos 产品的概述,请参见第 20 章,Kerberos 服务介绍。
本节介绍如何获取、查看和销毁票证。有关票证的介绍,请参见Kerberos 服务的工作方式。
安装任何 SEAM 发行版或 Solaris 10 发行版后,Kerberos 便内置在 login 命令中,并且您将在登录时自动获取票证。通常,由于会将基于 Kerberos 的命令 rsh、rcp、rdist、telnet 和 rlogin 设置为将票证副本转发到其他计算机,因此您不必显式请求票证来访问这些计算机。配置中可能不包括此自动转发,但这是缺省行为。有关转发票证的更多信息,请参见基于 Kerberos 的命令概述和转发 Kerberos 票证。
有关票证生命周期的信息,请参见票证生命周期。
通常,如果 PAM 配置正确,则会在登录时自动创建票证,并且无需执行任何特殊操作即可获取票证。但是,如果票证到期,则可能需要创建票证。另外,可能还需要使用缺省主体以外的其他主体,例如,如果使用 rlogin -l 以其他人的身份登录到计算机。
要创建票证,请使用 kinit 命令。
% /usr/bin/kinit |
kinit 命令将提示您输入口令。有关 kinit 命令的完整语法,请参见 kinit(1) 手册页。
本示例说明用户 jennifer 如何在自己的系统上创建票证。
% kinit Password for jennifer@ENG.EXAMPLE.COM: <Type password> |
在以下示例中,用户 david 使用 -l 选项创建了一个有效期为三个小时的票证。
% kinit -l 3h david@EXAMPLE.ORG Password for david@EXAMPLE.ORG: <Type password> |
本示例说明用户 david 如何使用 -f 选项为其自身创建可转发票证。例如,该用户可以使用此可转发票证登录到第二个系统,然后 telnet 到第三个系统。
% kinit -f david@EXAMPLE.ORG Password for david@EXAMPLE.ORG: <Type password> |
有关转发票证如何工作的更多信息,请参见转发 Kerberos 票证和票证类型。
并非所有票证都相同。例如,一个票证可能是可转发票证,另一个票证则可能是以后生效的票证,而第三个票证既可能是可转发票证,又可能是以后生效的票证。使用带有 -f 选项的 klist 命令,可以查看所拥有的票证以及这些票证的属性:
% /usr/bin/klist -f |
以下符号表示与每个票证关联的属性,如 klist 输出所示:
已预验证
可以后生效
以后生效
可转发
已转发
初始
无效
可代理
代理
可更新
票证类型介绍了票证可以具有的各种属性。
本示例说明用户 jennifer 拥有一个初始票证,该票证是可转发 (F) 和以后生效的 (d) 票证,但尚未经过验证 (i)。
% /usr/bin/klist -f Ticket cache: /tmp/krb5cc_74287 Default principal: jennifer@ENG.EXAMPLE.COM Valid starting Expires Service principal 09 Mar 04 15:09:51 09 Mar 04 21:09:51 nfs/EXAMPLE.SUN.COM@EXAMPLE.SUN.COM renew until 10 Mar 04 15:12:51, Flags: Fdi |
以下示例说明用户 david 拥有两个从另一台主机转发 (f) 到其主机的票证。这些票证也是可转发 (F) 票证。
% klist -f Ticket cache: /tmp/krb5cc_74287 Default principal: david@EXAMPLE.SUN.COM Valid starting Expires Service principal 07 Mar 04 06:09:51 09 Mar 04 23:33:51 host/EXAMPLE.COM@EXAMPLE.COM renew until 10 Mar 04 17:09:51, Flags: fF Valid starting Expires Service principal 08 Mar 04 08:09:51 09 Mar 04 12:54:51 nfs/EXAMPLE.COM@EXAMPLE.COM renew until 10 Mar 04 15:22:51, Flags: fF |
以下示例说明如何使用 -e 选项显示会话密钥和票证的加密类型。如果名称服务可以执行转换操作,则可使用 -a 选项将主机地址映射至主机名。
% klist -fea Ticket cache: /tmp/krb5cc_74287 Default principal: david@EXAMPLE.SUN.COM Valid starting Expires Service principal 07 Mar 04 06:09:51 09 Mar 04 23:33:51 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 10 Mar 04 17:09:51, Flags: FRIA Etype(skey, tkt): DES cbc mode with RSA-MD5, DES cbc mode with CRC-32 Addresses: client.example.com |
如果要销毁在当前会话期间获取的所有 Kerberos 票证,请使用 kdestroy 命令。该命令可销毁凭证高速缓存,从而销毁所有凭证和票证。虽然通常不必销毁凭证高速缓存,但运行 kdestroy 可减少您未登录期间凭证高速缓存遭受破坏的机会。
要销毁票证,请使用 kdestroy 命令。
% /usr/bin/kdestroy |
kdestroy 命令将销毁所有票证。不能使用此命令来有选择性地销毁特定票证。
如果要离开系统而又担心入侵者会使用您的权限,则应使用 kdestroy 或用于锁定屏幕的屏幕保护程序。
配置 Kerberos 服务后,您即会拥有两个口令:常规 Solaris 口令和 Kerberos 口令。可以将这两个口令设置为相同,也可以不同。
口令几乎可以包括能够键入的任何字符,但 Ctrl 键和回车键除外。好口令是易于记忆而其他人不容易猜到的口令。以下是一些不合适的口令示例:
可在字典中找到的单词
任何常见名称或通俗名称
名人的姓名或字符
您的姓名或用户名的任何形式(例如:反向拼写您的姓名、姓名重复两次等)
配偶姓名、子女姓名或宠物名称
您的生日或亲戚的生日
您的社会安全号、驾照号、护照号或其他类似的身份标识号
本手册或任何其他手册中出现的任何口令样例
一个好的口令的长度至少为八个字符。此外,口令还应包含混合字符,如大小写字母、数字和标点符号。以下是一些好的口令示例(如果未出现在本手册中):
首字母缩略词,如 "I2LMHinSF"(全称为 "I too left my heart in San Francisco")
发音容易的无意义单词,如 "WumpaBun" 或 "WangDangdoodle!"
故意拼错的短语,如 "6o'cluck" 或 "RrriotGrrrlsRrrule!"
请勿使用这些示例。手册中出现的口令是入侵者将首先尝试的口令。
如果 PAM 配置正确,则可以采用以下两种方法来更改 Kerberos 口令:
使用常见的 UNIX passwd 命令。配置 Kerberos 服务后,Solaris passwd 命令还会自动提示您输入新的 Kerberos 口令。
使用 passwd 而非 kpasswd 的优点在于可以同时设置 UNIX 口令和 Kerberos 口令。但是,在一般情况下,无需使用 passwd 同时更改这两个口令。通常,只能更改 UNIX 口令并保持 Kerberos 口令不变,反之亦然。
passwd 的行为取决于 PAM 模块的配置方式。在某些配置中,可能会要求您同时更改这两个口令。对于一些站点,必须更改 UNIX 口令,而对于其他站点,则要求更改 Kerberos 口令。
使用 kpasswd 命令。kpasswd 与 passwd 非常类似。这两个命令的一个区别是 kpasswd 仅更改 Kerberos 口令。如果要更改 UNIX 口令,则必须使用 passwd。
另一个区别是 kpasswd 可以更改非有效 UNIX 用户的 Kerberos 主体的口令。例如,david/admin 是 Kerberos 主体,但不是实际的 UNIX 用户,因此必须使用 kpasswd 而非 passwd。
更改口令后,所做更改在系统中传播需要一些时间(尤其是通过大型网络传播)。此延迟可能需要几分钟到一个小时或更长时间,具体取决于系统的设置方式。如果需要在更改口令后立刻获取新的 Kerberos 票证,请首先尝试新口令。如果新口令无效,请使用旧口令重试。
通过 Kerberos V5 协议,系统管理员可以设置允许每个用户使用的口令的条件。此类条件由为每个用户设置的策略(或缺省策略)定义。有关策略的更多信息,请参见管理 Kerberos 策略。
例如,假定用户 jennifer 的策略(称为 jenpol)要求口令长度至少为八个字母,并且至少由两种类型的字符混合组成。这样,kpasswd 便会拒绝尝试使用 "sloth" 作为口令。
% kpasswd kpasswd: Changing password for jennifer@ENG.EXAMPLE.COM. Old password: <Jennifer types her existing password> kpasswd: jennifer@ENG.EXAMPLE.COM's password is controlled by the policy jenpol which requires a minimum of 8 characters from at least 2 classes (the five classes are lowercase, uppercase, numbers, punctuation, and all other characters). New password: <Jennifer types 'sloth'> New password (again): <Jennifer re-types 'sloth'> kpasswd: New password is too short. Please choose a password which is at least 4 characters long. |
在以下示例中,jennifer 使用 "slothrop49" 作为口令。由于 "slothrop49" 的长度超过八个字母,并且包含两种不同类型的字符(数字和小写字母),因此此口令符合条件。
% kpasswd kpasswd: Changing password for jennifer@ENG.EXAMPLE.COM. Old password: <Jennifer types her existing password> kpasswd: jennifer@ENG.EXAMPLE.COM's password is controlled by the policy jenpol which requires a minimum of 8 characters from at least 2 classes (the five classes are lowercase, uppercase, numbers, punctuation, and all other characters). New password: <Jennifer types 'slothrop49'> New password (again): <Jennifer re-types 'slothrop49'> Kerberos password changed. |
在以下示例中,用户 david 使用 passwd 同时更改其 UNIX 口令和 Kerberos 口令。
% passwd passwd: Changing password for david Enter login (NIS+) password: <Type the current UNIX password> New password: <Type the new UNIX password> Re-enter password: <Confirm the new UNIX password> Old KRB5 password: <Type the current Kerberos password> New KRB5 password: <Type the new Kerberos password> Re-enter new KRB5 password: <Confirm the new Kerberos password> |
请注意,passwd 需要 UNIX 口令和 Kerberos 口令。此行为由缺省配置确定。在这种情况下,用户 david 必须使用 kpasswd 将其 Kerberos 口令设置为其他内容,如下所示。
本示例说明用户 david 如何使用 kpasswd 仅更改其 Kerberos 口令。
% kpasswd kpasswd: Changing password for david@ENG.EXAMPLE.COM. Old password: <Type the current Kerberos password> New password: <Type the new Kerberos password> New password (again): <Confirm the new Kerberos password> Kerberos password changed. |
在本示例中,用户 david 更改了 Kerberos 主体 david/admin(非有效的 UNIX 用户)的口令。该用户必须使用 kpasswd。
% kpasswd david/admin kpasswd: Changing password for david/admin. Old password: <Type the current Kerberos password> New password: <Type the new Kerberos password> New password (again): <Type the new Kerberos password> Kerberos password changed. |
如果需要授予某个用户访问权限以登录到您的帐户(以您的身份),则可以通过 Kerberos 执行此操作而不必显示您的口令,方法是将 .k5login 文件放置在起始目录中。.k5login 文件是一个列表,其中包含一个或多个与要为其授予访问权限的各用户对应的 Kerberos 主体。每个主体都必须单独占一行。
假定用户 david 在其起始目录中按如下所示保存了一个 .k5login 文件:
jennifer@ENG.EXAMPLE.COM joe@EXAMPLE.ORG |
如果用户 jennifer 和 joe 在其各自的领域中已经拥有 Kerberos 票证,则此文件允许这两个用户采用 david 的身份。例如,jennifer 可以使用 david 的身份远程登录到 david 的计算机 (boston),而不必提供 david 的口令。
如果 david 的起始目录使用 Kerberos V5 协议从另一台(第三台)计算机挂载了 NFS,则 jennifer 必须具有可转发票证才能访问 david 的起始目录。有关使用可转发票证的示例,请参见创建 Kerberos 票证。
如果您要通过网络登录到其他计算机,则需要在这些计算机上的 .k5login 文件中包括您自己的 Kerberos 主体。
您可以随时通过从 .k5login 文件中删除主体来收回访问权限。
虽然在您的起始目录的 .k5login 文件中指定的用户主体对您在该计算机(或一组计算机,例如如果通过 NFS 共享 .k5login 文件)上的帐户拥有完全访问权限,但是,所有基于 Kerberos 的服务都将根据该用户的身份而不是您的身份来授权访问。因此,jennifer 可以登录到 joe 的计算机并在其中执行任务。但是,如果该用户使用基于 Kerberos 的程序(如 ftp 或 rlogin),则将以其自身身份执行此操作。
Kerberos 会记录获取票证的用户,以便系统管理员在必要时查找在特定时间可以使用您的用户身份的人员。
使用 .k5login 文件的一种常见方法是将其放置在 root 的起始目录中,从而为列出的 Kerberos 主体提供对该计算机的 root 访问权限。此配置允许系统管理员成为本地 root,或以 root 身份远程登录,而不必公布 root 口令,并且不需要任何人通过网络键入 root 口令。
假定 jennifer 决定以 root 身份登录到计算机 boston.example.com。由于在 boston.example.com 的 root 起始目录的 .k5login 文件中存在该用户的主体名称项,因此不必再次键入其口令。
% rlogin boston.example.com -l root -x This rlogin session is using DES encryption for all data transmissions. Last login: Thu Jun 20 16:20:50 from daffodil SunOS Release 5.7 (GENERIC) #2: Tue Nov 14 18:09:31 EST 1998 boston[root]% |
Kerberos V5 产品是一个单点登录系统,这表示只需键入一次口令即可。Kerberos V5 程序将为您执行验证操作(并可以选择执行加密操作),因为 Kerberos 已内置在每个熟知的现有网络程序套件中。 Kerberos V5 应用程序是添加了 Kerberos 功能的现有 UNIX 网络程序的版本。
例如,使用基于 Kerberos 的程序连接到远程主机时,该程序、KDC 和远程主机将执行一组快速协商。完成这些协商后,该程序便已代表您向远程主机证明了您的身份,并且远程主机已授予您访问权限。
请注意,基于 Kerberos 的命令会首先尝试使用 Kerberos 进行验证。如果 Kerberos 验证失败,将会出现错误或尝试 UNIX 验证,具体取决于和命令一起使用的选项。有关更多详细信息,请参阅每个 Kerberos 命令手册页中的 Kerberos Security 部分。
基于 Kerberos 的网络服务是一些连接到 Internet 中某个位置的其他计算机的程序。这些程序如下:
ftp
rcp
rdist
rlogin
rsh
ssh
telnet
这些程序具有可透明地使用 Kerberos 票证与远程主机协商验证并选择协商加密的功能。在大多数情况下,您只会注意到不必再键入口令即可使用这些程序,因为 Kerberos 将为您提供身份证明。
Kerberos V5 网络程序包括可用于执行以下操作的选项:
将票证转发到其他主机(如果最初已获取可转发票证)。
加密在您的主机和远程主机之间传输的数据。
本节假定您已经熟悉这些程序的非 Kerberos 版本,并且将重点介绍 Kerberos V5 软件包添加的 Kerberos 功能。有关此处描述的命令的详细说明,请参阅其各自的手册页。
已将下列 Kerberos 选项添加至 ftp、rcp、rlogin、rsh 和 telnet:
尝试使用现有票证自动登录。如果 getlogin() 返回的用户名与当前用户 ID 相同,则使用该用户名。有关详细信息,请参见 telnet(1) 手册页。
将不可重新转发的票证转发到远程主机。此选项与 -F 选项互斥。在同一命令中不能同时使用这两个选项。
如果您有理由相信需要向第三台主机中其他基于 Kerberos 的服务验证您的身份,则应转发票证。例如,您可能要远程登录到另一台计算机,然后从该计算机远程登录到第三台计算机。
如果远程主机上的起始目录使用 Kerberos V5 机制挂载了 NFS,则必须使用可转发票证。否则,将无法访问起始目录。也就是说,假定您最初登录到系统 1,然后从系统 1 远程登录到您的主机(系统2),该主机从系统 3 挂载您的起始目录。在这种情况下,除非在 rlogin 中使用 -f 或 -F 选项,否则将无法访问起始目录,因为您的票证无法转发到系统 3。
缺省情况下,kinit 会获取可转发票证授予票证 (Ticket-Granting Ticket, TGT)。但是,您的配置在这方面可能会有所不同。
有关转发票证的更多信息,请参见转发 Kerberos 票证。
将 TGT 的可重新转发副本转发到远程系统。此选项与 -f 类似,但它允许访问更多(如第四台或第五台)计算机。因此,可将 -F 选项视为 -f 选项的超集。-F 选项与 -f 选项互斥。在同一命令中不能同时使用这两个选项。
有关转发票证的更多信息,请参见转发 Kerberos 票证。
|
ftp |
rcp |
rlogin |
rsh |
telnet |
---|---|---|---|---|---|
-a |
|
|
|
|
X |
-f |
X |
|
X |
X |
X |
-F |
|
|
X |
X |
X |
-k |
|
X |
X |
X |
X |
-K |
|
|
|
|
X |
-m |
X |
|
|
|
|
-x |
X |
X |
X |
X |
X |
-X |
|
|
|
|
X |
也可以通过键入 protect,并后跟以上所示的任何保护级别(clear、private 或 safe),在 ftp 提示符下设置保护级别。
如基于 Kerberos 的命令概述中所述,某些命令允许您使用 -f 或 -F 选项转发票证。通过转发票证,可以“链接”网络事务。例如,可以远程登录到一台计算机,然后从该计算机远程登录到另一台计算机。使用 -f 选项可转发票证,而使用 -F 选项则可重新转发已转发的票证。
在图 25–2 中,用户 david 使用 kinit 获取了一个不可转发票证授予票证 (Ticket-Granting Ticket, TGT)。由于该用户未指定 -f 选项,因此该票证不可转发。在方案 1 中,该用户可以远程登录到计算机 B,但不能再登录到其他计算机。在方案 2 中,由于该用户尝试转发一个不可转发票证,因此 rlogin -f 命令失败。
实际上,已设置了 Kerberos 配置文件,以便 kinit 在缺省情况下可获取可转发票证。但是,您的配置可能有所不同。为了便于说明,假定 kinit 不会获取可转发 TGT,除非使用 kinit -f 调用该命令。另请注意,kinit 不包含 -F 选项。TGT 可以是可转发,也可以是不可转发。
在图 25–3 中,用户 david 使用 kinit -f 获取了可转发 TGT。在方案 3 中,由于该用户在 rlogin 中使用了可转发票证,因此可以访问计算机 C。在方案 4 中,由于票证不可重新转发,因此第二个 rlogin 失败。如方案 5 中所示,改用 -F 选项后,第二个 rlogin 将成功,并且票证可重新转发到计算机 D。
以下示例说明基于 Kerberos 的命令的选项的工作方式。
在本示例中,用户 david 已经登录,并且要 telnet 到计算机 denver.example.com。该用户使用 -f 选项转发其现有票证,使用 -x 选项加密会话,并使用 -a 选项自动执行登录。由于该用户不打算使用第三台主机的服务,因此可使用 -f 而非 -F。
% telnet -a -f -x denver.example.com Trying 128.0.0.5... Connected to denver.example.com. Escape character is '^]'. [ Kerberos V5 accepts you as "david@eng.example.com" ] [ Kerberos V5 accepted forwarded credentials ] SunOS 5.9: Tue May 21 00:31:42 EDT 2004 Welcome to SunOS % |
请注意,david 的计算机使用 Kerberos 来向 denver.example.com 进行自我验证,并且以自己的身份自动登录。该用户具有一个加密会话(即该用户已有的票证副本),因此永远不必键入其口令。如果该用户使用了非 Kerberos 版本的 telnet,则可能会提示其输入口令,并将此口令在未加密的情况下通过网络发送。如果入侵者在此期间一直在观察网络通信流量,则可能会知道 david 的口令。
如果转发 Kerberos 票证,则 telnet(以及此处讨论的其他命令)将会在退出时销毁这些票证。
在此示例中,用户 jennifer 希望登录到自己的计算机 boston.example.com。该用户使用 -F 选项转发其现有票证,并使用 -x 选项加密会话。由于该用户在登录到 boston 后,可能希望执行需要重新转发票证的其他网络事务,因此会选择 -F 而非 -f。另外,由于该用户要转发其现有票证,因此不必键入其口令。
% rlogin boston.example.com -F -x This rlogin session is using encryption for all transmissions. Last login Mon May 19 15:19:49 from daffodil SunOS Release 5.9 (GENERIC) #2 Tue Nov 14 18:09:3 EST 2003 % |
假定 joe 要使用 ftp 从计算机 denver.example.com 的目录 ~joe/MAIL 中获取其邮件并加密该会话。交换过程如下所示:
% ftp -f denver.example.com Connected to denver.example.com 220 denver.example.org FTP server (Version 6.0) ready. 334 Using authentication type GSSAPI; ADAT must follow GSSAPI accepted as authentication type GSSAPI authentication succeeded Name (daffodil.example.org:joe) 232 GSSAPI user joe@MELPOMENE.EXAMPLE.COM is authorized as joe 230 User joe logged in. Remote system type is UNIX. Using BINARY mode to transfer files. ftp> protect private 200 Protection level set to Private ftp> cd ~joe/MAIL 250 CWD command successful. ftp> get RMAIL 227 Entering Passive Mode (128,0,0,5,16,49) 150 Opening BINARY mode data connection for RMAIL (158336 bytes). 226 Transfer complete. 158336 bytes received in 1.9 seconds (1.4e+02 Kbytes/s) ftp> quit % |
要加密该会话,joe 需要将保护级别设置为 private。
本章列出了许多属于 Kerberos 产品的文件、命令和守护进程。另外,本章还介绍了有关 Kerberos 验证的工作方式的详细信息。
以下是本章中参考信息的列表。
文件名 |
说明 |
---|---|
~/.gkadmin | |
~/.k5login | |
/etc/krb5/kadm5.acl | |
/etc/krb5/kadm5.keytab | |
/etc/krb5/kdc.conf | |
/etc/krb5/kpropd.acl | |
/etc/krb5/krb5.conf | |
/etc/krb5/krb5.keytab | |
/etc/krb5/warn.conf | |
/etc/pam.conf | |
/tmp/krb5cc_uid | |
/tmp/ovsec_adm.xxxxxx | |
/var/krb5/.k5.REALM | |
/var/krb5/kadmin.log | |
/var/krb5/kdc.log | |
/var/krb5/principal | |
/var/krb5/principal.kadm5 | |
/var/krb5/principal.kadm5.lock | |
/var/krb5/principal.ok | |
/var/krb5/principal.ulog | |
/var/krb5/slave_datatrans | |
/var/krb5/slave_datatrans_slave |
本节列出了 Kerberos 产品中包括的部分命令。
表 26–2 Kerberos 命令
下表列出了 Kerberos 产品使用的守护进程。
表 26–3 Kerberos 守护进程
守护进程 |
说明 |
---|---|
/usr/sbin/in.ftpd |
文件传输协议守护进程 |
/usr/lib/krb5/kadmind | |
/usr/lib/krb5/kpropd | |
/usr/lib/krb5/krb5kdc | |
/usr/lib/krb5/ktkt_warnd | |
/usr/sbin/in.rlogind |
远程登录守护进程 |
/usr/sbin/in.rshd |
远程 shell 守护进程 |
/usr/sbin/in.telnetd |
telnet 守护进程 |
下一节介绍了 Kerberos 术语及其定义。这些术语可用于整个 Kerberos 文档。要理解 Kerberos 概念,必须先了解这些术语。
要管理 KDC,您需要了解本节中的术语。
Key Distribution Center, KDC(密钥分发中心)是负责颁发凭证的 Kerberos 组件。这些凭证是使用 KDC 数据库中存储的信息创建的。每个领域至少需要两个 KDC,一个主 KDC 以及至少一个从 KDC。所有 KDC 都可生成凭证,但仅有主 KDC 才能处理对 KDC 数据库所做的任何更改。
stash file(存储文件)包含 KDC 的主密钥。当重新启动服务器以便在启动 kadmind 和 krb5kdc 命令之前自动验证 KDC 时,将使用此密钥。由于此文件包含主密钥,因此应将此文件及其所有备份安全保存。此文件是使用 root 的只读权限创建的。要确保此文件安全,请勿更改相应的权限。如果此文件已被破坏,则其他用户可能会使用主密钥来访问或修改 KDC 数据库。
要了解验证过程,您需要理解本节中的术语。程序员和系统管理员应熟悉这些术语。
client(客户机)是在用户工作站上运行的软件。在客户机上运行的 Kerberos 软件会在此过程中发出许多请求。因此,区分此软件的操作和用户非常重要。
术语 server(服务器)和 service(服务)通常可互换使用。具体而言,术语服务器用于定义运行 Kerberos 软件的物理系统。术语服务对应于服务器支持的特定功能(例如 ftp 或 nfs)。文档通常会将服务器描述为服务的一部分,但此定义会混淆了这些术语的含义。因此,术语服务器是指物理系统,而术语服务则是指软件。
Kerberos 产品使用两种类型的密钥。 一种密钥类型是口令派生密钥。 口令派生密钥会被指定给每个用户主体,并仅对该用户和 KDC 公开。 Kerberos 产品使用的另一种密钥类型是与口令无关联的随机密钥,因此不适合用户主体使用。 随机密钥通常用于在密钥表中具有相应项并具有 KDC 生成的会话密钥的服务主体。 服务主体可以使用随机密钥,因为服务可以访问密钥表中允许其以非交互方式运行的密钥。 会话密钥由 KDC 生成,并在客户机和服务之间共享,可用于在两者之间提供安全事务。
ticket(票证)是一种信息包,用于将用户身份安全地传递到服务器或服务。一个票证仅对一台客户机以及某台特定服务器上的一项特殊服务有效。票证包含以下内容:
服务的主体名称
用户的主体名称
用户主机的 IP 地址
时间标记
定义票证生命周期的值
会话密钥的副本
所有此类数据都使用服务器的服务密钥进行加密。 请注意,KDC 可颁发嵌入在以下介绍的凭证中。 颁发票证之后,可重用票证直到其到期为止。
credential(凭证)是一种信息包,其中包含票证和匹配的会话密钥。凭证使用发出请求的主体的密钥进行加密。通常,KDC 会生成凭证以响应客户机的票证请求。
authenticator(验证者)是服务器用于验证客户机用户主体的信息。 验证者包含用户的主体名称、时间标记和其他数据。 与票证不同,验证者只能使用一次,通常在请求访问服务时使用。 验证者使用客户机和服务器共享的会话密钥进行加密。 通常,客户机会创建验证者,并将其与服务器或服务的票证一同发送,以便向服务器或服务进行验证。
票证具有可管理其使用方式的属性。这些属性是在创建票证时指定给票证的,但稍后可修改票证的属性。例如,可将票证从 forwardable 更改为 forwarded。可以使用 klist 命令查看票证属性。请参见查看 Kerberos 票证。
以下一个或多个术语对票证进行了描述:
可转发票证可以从一台主机发送到另一台主机,从而使客户机无需对其自身进行重新验证。例如,如果用户 david 在用户 jennifer 的计算机上时获取了一个可转发票证,则前者可登录到自己的计算机,而不必获取新的票证(从而对自身进行重新验证)。有关可转发票证的示例,请参见示例-创建 Kerberos 票证。
初始票证是一种直接颁发的票证,而并非基于票证授予票证的票证。某些服务(如用于更改口令的应用程序)可能会要求将票证标记为初始,以便向这些程序本身确保客户机可知道其私钥。初始票证表明客户机最近已进行了自我验证,而并非依赖于已长期使用的票证授予票证。
无效票证是一个尚未变为可用的未生效的票证。应用程序服务器会拒绝无效票证,直到其经过验证为止。要进行验证,必须在票证开始时间已过之后由客户机将设置了 VALIDATE 标志的票证放置在票证授予服务请求的 KDC 中。
以后生效的票证是一种在其创建之后的某个指定时间之前不会生效的票证。例如,此类票证对于计划在深夜运行的批处理作业非常有用,因为如果该票证被盗,则在运行批处理作业之前,将无法使用该票证。颁发以后生效的票证时,该票证未生效,并在其开始时间已过且客户机请求 KDC 进行验证之前一直保持此状态。通常,以后生效的票证在票证授予票证的到期时间之前会一直有效。但是,如果将以后生效的票证标记为可更新,则通常会将其生命周期设置为等于票证授予票证的整个生命周期的持续时间。
有时,主体需要允许服务代表其执行操作。创建该票证时,必须指定代理的主体名称。Solaris 发行版不支持可代理票证或代理票证。
可代理票证与可转发票证类似,但前者仅对单个服务有效,而可转发票证授予服务对客户机身份的完全使用权限。因此,可以将可转发票证视为一种超级代理。
由于拥有很长生命周期的票证存在安全风险,因此可将票证指定为可更新票证。可更新票证具有两个到期时间:票证当前实例的到期时间以及任意票证的最长生命周期(一周)。如果客户机要继续使用票证,则可在第一个到期时间之前更新票证。例如,某个票证的有效期可为一个小时,而所有票证的最长生命周期为 10 个小时。如果持有该票证的客户机要将该票证再保留几个小时,则此客户机必须在有效的小时数内更新票证。如果票证到达最长票证生命周期(10 个小时),则该票证将自动到期且无法更新。
有关如何查看票证属性的信息,请参见查看 Kerberos 票证。
每当主体获取包括票证授予票证 (Ticket–Granting Ticket, TGT) 在内的票证时,都会将票证的生命周期设置为以下生命周期值中的最小值:
通过 kinit 的 -l 选项指定的生命周期值,前提是使用 kinit 获取票证。缺省情况下,kinit 使用最长生命周期值。
Kerberos 数据库中为提供票证的服务主体指定的最长生命周期值。如果使用 kinit,则服务主体为 krbtgt/realm。
Kerberos 数据库中为请求票证的用户主体指定的最长生命周期值。
图 26–1 说明了如何确定 TGT 的生命周期以及四个生命周期值的来源。虽然该图说明的是如何确定 TGT 的生命周期,但所有主体获取票证时的情况基本相同。唯一的区别在于,kinit 不提供生命周期值,而提供票证的服务主体(非 krbtgt/realm 主体)会提供最长生命周期值。
可更新票证生命周期也是由四个值中的最小值确定的,但是使用的却是可更新的生命周期值,如下所示:
通过 kinit 的 -r 选项指定的可更新生命周期值,前提是使用 kinit 获取或更新票证。
Kerberos 数据库中为提供票证的服务主体指定的最长可更新生命周期值。如果使用 kinit,则服务主体为 krbtgt/realm。
Kerberos 数据库中为请求票证的用户主体指定的最长可更新生命周期值。
每个票证都使用主体名称进行标识。主体名称可以标识用户或服务。以下是一些主体名称的示例:
表 26–4 Kerberos 主体名称示例
主体名称 |
说明 |
---|---|
changepw/kdc1.example.com@EXAMPLE.COM |
更改口令时,允许访问 KDC 的主 KDC 服务器的主体。 |
clntconfig/admin@EXAMPLE.COM |
kclient 安装实用程序使用的主体。 |
ftp/boston.example.com@EXAMPLE.COM |
ftp 服务使用的主体。此主体可用于替代 host 主体。 |
host/boston.example.com@EXAMPLE.COM |
基于 Kerberos 的应用程序(例如 klist 和 kprop)和服务(例如 ftp 和 telnet)使用的主体。此主体称为 host 主体或服务主体,用于验证 NFS 挂载。 |
K/M@EXAMPLE.COM |
主密钥名称主体。一个主密钥名称主体可与每个主 KDC 关联。 |
kadmin/history@EXAMPLE.COM |
一种主体,其中包含用于保存其他主体的口令历史记录的密钥。每个主 KDC 都具有这些主体之一。 |
kadmin/kdc1.example.com@EXAMPLE.COM |
允许使用 kadmind 访问 KDC 的主 KDC 服务器的主体。 |
kadmin/changepw.example.com@EXAMPLE.COM |
一种主体,用于接受来自未运行 Solaris 发行版的客户机的口令更改请求。 |
krbtgt/EXAMPLE.COM@EXAMPLE.COM |
生成票证授予票证时使用的主体。 |
krbtgt/EAST.EXAMPLE.COM@WEST.EXAMPLE.COM |
此主体是跨领域的票证授予票证的示例。 |
nfs/boston.example.com@EXAMPLE.COM |
NFS 服务使用的主体。此主体可用于替代 host 主体。 |
root/boston.example.com@EXAMPLE.COM |
与客户机的 root 帐户关联的主体。此主体称作 root 主体,用于向已挂载 NFS 的文件系统提供 root 访问权限。 |
username@EXAMPLE.COM |
用户的主体。 |
username/admin@EXAMPLE.COM |
admin 主体,可用于管理 KDC 数据库。 |
如果您可以提供证明您身份的票证和匹配的会话密钥,则应用程序允许您登录到远程系统。会话密钥包含特定于用户以及要访问的服务的信息。所有用户首次登录时,KDC 都会为其创建票证和会话密钥。票证和匹配的会话密钥可组成凭证。使用多个网络服务时,用户可以收集许多凭证。对于在特定服务器上运行的每个服务,用户都需要拥有一个凭证。例如,访问名为 boston 的服务器中的 ftp 服务需要凭证。访问其他服务器中的 ftp 服务需要对应于该服务的凭证。
创建和存储凭证的过程是透明的。凭证是由将凭证发送到请求程序的 KDC 创建的。收到凭证后,会将其存储在凭证高速缓存中。
要访问特定服务器上的特定服务,用户必须获取两个凭证。第一个凭证用于票证授予票证(称为 TGT)。票证授予服务对此凭证进行解密之后,该服务即可为用户请求访问的服务器创建第二个凭证。然后,可使用第二个凭证来请求访问该服务器中的相应服务。该服务器成功解密第二个凭证后,便会授予用户访问权限。以下各节详细介绍了此过程。
要启动验证过程,客户机需要向验证服务器发送针对特定用户主体的验证请求。该请求在发送时未加密。由于请求中未包含安全信息,因此无需加密。
验证服务收到该请求后,将在 KDC 数据库中查找该用户的主体名称。如果主体与数据库中的项匹配,则验证服务可获取该主体的私钥。然后,验证服务将生成一个供客户机和票证授予服务使用的会话密钥(称为会话密钥 1),以及一个用于票证授予服务的票证(票证 1)。此票证也称作票证授予票证 (Ticket-Granting Ticket, TGT)。会话密钥和票证均使用该用户的私钥进行加密,并且会将信息发回客户机。
客户机通过该用户主体的私钥,使用此信息对会话密钥 1 和票证 1 进行解密。由于该私钥仅对此用户和 KDC 数据库公开,因此包中的信息应是安全的。客户机将该信息存储在凭证高速缓存中。
在此过程中,通常会提示用户输入口令。如果用户指定的口令与用于生成存储在 KDC 数据库中的私钥的口令相同,则客户机可以成功解密验证服务发送的信息。现在,客户机便拥有了用于票证授予服务的凭证。客户机现在可以请求用于服务器的凭证。
要请求访问特定服务器,客户机必须首先从验证服务获取用于该服务器的凭证。请参见获取用于票证授予服务的凭证。然后,客户机会向票证授予服务发送请求,其中包含服务主体名称、票证 1 以及使用会话密钥 1 加密的验证者。票证 1 最初是由验证服务使用票证授予服务的服务密钥加密的。
由于票证授予服务的服务密钥对票证授予服务公开,因此可以解密票证 1。票证 1 中的信息包括会话密钥 1,因此票证授予服务可以解密验证者。此时,可使用票证授予服务验证用户主体。
成功验证后,票证授予服务将为用户主体和服务器生成一个会话密钥(会话密钥 2),以及一个用于服务器的票证(票证 2)。然后,使用会话密钥 1 加密会话密钥 2 和票证 2。由于会话密钥 1 仅对该客户机和票证授予服务公开,因此此信息是安全的并可在网络上安全发送。
客户机收到此信息包后,将使用存储在凭证高速缓存中的会话密钥 1 解密此信息。客户机即获取用于服务器的凭证。现在,客户机可以请求访问该服务器中的特定服务。
要请求访问特定服务,客户机必须首先从验证服务器获取用于票证授予服务的凭证,然后从票证授予服务获取服务器凭证。请参见获取用于票证授予服务的凭证和获取用于服务器的凭证。然后,客户机可将包含票证 2 和另一个验证者的请求发送到该服务器。该验证者使用会话密钥 2 进行加密。
票证 2 是由票证授予服务使用该服务的服务密钥进行加密的。由于服务密钥对服务主体公开,因此该服务可以解密票证 2 并获取会话密钥 2。然后,可使用会话密钥 2 解密验证者。如果成功解密验证者,则可授予客户机对该服务的访问权限。
加密类型可标识执行加密操作时要使用的加密算法和模式。使用 aes、des3-cbc-sha1 和 rc4–hmac 加密类型可以创建用于较高强度加密操作的密钥。这些较高强度的操作可增强 Kerberos 服务的整体安全性。
如果安装了非随附的强加密软件包,则可以将 aes256-cts-hmac-sha1-96 加密类型用于 Kerberos 服务。
客户机从 KDC 请求票证时,KDC 必须使用其加密类型与客户机和服务器兼容的密钥。尽管 Kerberos 协议允许客户机请求 KDC 对客户机的票证回复部分使用特定的加密类型,但该协议不允许服务器为 KDC 指定加密类型。
如果安装了未运行 Solaris 10 发行版的主 KDC,则在升级主 KDC 之前,必须将从 KDC 升级到 Solaris 10 发行版。Solaris 10 主 KDC 将使用新的加密类型,而较早版本的从 KDC 将无法处理这些加密类型。
以下列出了更改加密类型之前必须考虑的一些问题:
KDC 假定服务器支持与主体数据库中的服务器主体项关联的第一个密钥/加密类型。
在 KDC 上,应确保生成的主体密钥与将验证主体的系统兼容。 缺省情况下,kadmin 命令将为所有支持的加密类型创建密钥。 如果验证主体的系统不支持该缺省加密类型集,则在创建主体时应限制加密类型。通过在 kadmin addprinc 中使用 -e 标志,或在 kdc.conf 文件中将 supported_enctypes 参数设置为此子集,可以限制加密类型。如果 Kerberos 领域中的大多数系统都支持缺省加密类型集的子集,则应使用 supported_enctypes 参数。如果设置 supported_enctypes,则将指定 kadmin addprinc 在为特定领域创建主体时使用的加密类型的缺省集。 一般情况下,最好使用这两种方法之一来控制 Kerberos 使用的加密类型。
确定系统支持的加密类型时,请考虑系统中运行的 Kerberos 版本,以及为其创建服务器主体的服务器应用程序所支持的加密算法。 例如,创建 nfs/hostname 服务主体时,应将加密类型限制为相应主机中的 NFS 服务器所支持的类型。 请注意,在 Solaris 10 发行版中,NFS 服务器也支持所有受支持的 Kerberos 加密类型。
kdc.conf 文件中的 master_key_enctype 参数可用于控制加密主体数据库中各项的主密钥的加密类型。 如果已创建 KDC 主体数据库,请勿使用此参数。可在创建数据库时使用 master_key_enctype 参数,以便将缺省主密钥加密类型从 des-cbc-crc 更改为更强的加密类型。配置从 KDC 时,请确保所有从 KDC 都支持选择的加密类型,并且其 kdc.conf 中具有相同的 master_key_enctype 项。 另外,如果在 kdc.conf 中设置了 supported_enctypes,则还应确保将 master_key_enctype 设置为 supported_enctypes 中的加密类型之一。如果未正确处理其中任一问题,则主 KDC 可能无法使用从 KDC。
在客户机上,可以控制客户机在通过 krb5.conf 中的多个参数从 KDC 获取票证时请求的加密类型。 default_tkt_enctypes 参数用于指定客户机在通过 KDC 请求票证授予票证 (Ticket-Granting Ticket, TGT) 时要使用的加密类型。 客户机可使用 TGT 以一种更有效的方式获取其他服务器票证。 如果客户机使用 TGT 请求服务器票证(称为 TGS 请求),则设置 default_tkt_enctypes 将提供客户机对加密类型(用于保护客户机和 KDC 之间的通信)的部分控制。 请注意,default_tkt_enctypes 中指定的加密类型必须至少与 KDC 中存储的主体数据库中的一种主体密钥加密类型匹配。否则,TGT 请求将会失败。 在大多数情况下,最好不要设置 default_tkt_enctypes,因为此参数会导致互操作性问题。 缺省情况下,客户机代码会请求所有受支持的加密类型,而 KDC 会基于在主体数据库中找到的密钥来选择加密类型。
default_tgs_enctypes 参数可限制客户机在其 TGS 请求(用于获取服务器票证)中请求的加密类型。 另外,此参数还可限制 KDC 在创建客户机和服务器共享的会话密钥时使用的加密类型。例如,如果客户机要在执行安全 NFS 时仅使用 3DES 加密,则应将 default_tgs_enctypes 设置为 des3-cbc-sha1。请确保客户机主体和服务器主体在主体数据库中具有 des-3-cbc-sha1 密钥。 与 default_tkt_enctype 一样,在大多数情况下,最好不要设置此参数,因为如果在 KDC 和服务器上未正确设置凭证,则此参数会导致互操作性问题。
在服务器上,可使用 kdc.conf 中的 permitted_enctypes 来控制服务器可接受的加密类型。 此外,还可指定创建 keytab 项时使用的加密类型。 同样,一般情况下最好不要使用其中任一方法来控制加密类型,而应由 KDC 来确定要使用的加密类型,因为 KDC 不会与服务器应用程序进行通信以确定要使用的密钥或加密类型。
如果缺省映射不满足要求,则 NFS 服务器尝试标识 Kerberos 用户时,将使用 gsscred 表。NFS 服务使用 UNIX ID 来标识用户。这些 ID 不属于用户主体或凭证。gsscred 表提供从 GSS 凭证到 UNIX UID 的其他映射(通过口令文件)。填充 KDC 数据库后,必须创建和管理该表。有关更多信息,请参见将 GSS 凭证映射到 UNIX 凭证。
接收到客户机请求时,NFS 服务便会尝试将凭证名称映射到 UNIX ID。如果映射失败,则会检查 gsscred 表。
Kerberos 服务的 Solaris 10 版本基于 MIT Kerberos 版本 1.2.1。以下列出了 Solaris 10 发行版中提供的增强功能,在 MIT 1.2.1 版本中不会提供这些功能:
Solaris 远程应用程序的 Kerberos 支持
KDC 数据库的增量传播
客户机配置脚本
已本地化的错误消息
BSM 审计记录支持
Kerberos 通过 GSS-API 安全使用线程
使用密码学的加密框架
此版本还包括某些已发布的 MIT 1.2.1 错误修复。特别是,添加了 1.2.5 二叉树错误修复和 1.3 TCP 支持。