Contained WithinFind More DocumentationFeatured Support Resources | Download this book in PDF (5216 KB)
第 6 部分 Kerberos 服务本部分提供有关 Kerberos 服务的配置、管理和使用方法的信息。 第 20 章 Kerberos 服务介绍本章介绍 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 会话后,Kerberos 服务通常不可见。一些命令(如 rsh 或 ftp)也是如此。初始化 Kerberos 会话通常仅包括登录和提供 Kerberos 口令。 Kerberos 系统的工作围绕票证的概念展开。票证是一组标识用户或服务(如 NFS 服务)的电子信息。正如您的驾驶证可标识您的身份并表明您的驾驶级别一样,票证也可标识您的身份以及您的网络访问权限。执行基于 Kerberos 的事务时(例如,远程登录到另一台计算机),您将透明地向密钥分发中心 (KDC) 发送票证请求。KDC 将访问数据库以验证您的身份,然后返回授予您访问其他计算机的权限的票证。“透明”意味着您无需显式请求票证。请求是在执行 rlogin 命令过程中进行的。因为只有通过验证的客户机可以获取特定服务的票证,所以其他客户机不能以虚假身份使用 rlogin。 票证具有一些与其关联的属性。例如,票证可以是可转发的,这意味着它可以在其他计算机上使用,而不必进行新的验证。票证也可以是以后生效的,这意味着它要到指定时间后才会生效。票证的使用方式(例如,如何指定允许哪些用户获取哪些类型的票证)由策略设置。策略在安装或管理 Kerberos 服务时确定。 注 – 您可能会经常看到术语凭证和票证。在更为广泛的 Kerberos 范围内,两者通常可互换使用。但是,从技术上讲,凭证指的是票证和会话的会话密钥。使用 Kerberos 获取服务访问权限中对此区别进行了更详细的说明。 以下各节将进一步说明 Kerberos 验证过程。 初始验证:票证授予票证Kerberos 验证分为两个阶段:允许进行后续验证的初始验证以及所有后续验证自身。 下图显示了如何进行初始验证。 图 20–1 Kerberos 会话的初始验证
后续 Kerberos 验证客户机收到初始验证后,每个后续验证都按下图所示的模式进行。 图 20–2 使用 Kerberos 验证获取对服务的访问权
从这些步骤来看,服务器似乎并未与 KDC 通信。但服务器实际上与 KDC 进行了通信,并向 KDC 注册了其自身,正如第一台客户机所执行的操作。为简单起见,该部分已省略。 Kerberos 远程应用程序用户(如 joe)可以使用的基于 Kerberos 的(即 "Kerberized")命令包括:
这些应用程序与同名的 Solaris 应用程序相同。但是,它们已扩展为使用 Kerberos 主体来验证事务,因此会提供基于 Kerberos 的安全性。有关主体的信息,请参见Kerberos 主体。 Kerberos 用户命令中将进一步介绍这些命令。 Kerberos 主体Kerberos 服务中的客户机由其主体标识。主体是 KDC 可以为其指定票证的唯一标识。主体可以是用户(如 joe)或服务(如 nfs 或 telnet)。 根据约定,主体名称分为三个部分:主名称、实例和领域。例如,典型的 Kerberos 主体可以是 joe/admin@ENG.EXAMPLE.COM。在本示例中:
以下都是有效的主体名称:
Kerberos 领域领域是定义属于同一主 KDC 的一组系统的逻辑网络,类似于域。图 20–3 显示了各领域相互之间的关系。有些领域是分层的,其中,一个领域是另一个领域的超集。另外一些领域是不分层(或“直接”)的,必须定义两个领域之间的映射。Kerberos 服务的一种功能是它允许进行跨领域验证。每个领域只需在其 KDC 中有对应于另一个领域的主体项即可。此 Kerberos 功能称为跨领域验证。 图 20–3 Kerberos 领域
Kerberos 领域和服务器每个领域都必须包括一台用于维护主体数据库的主副本的服务器。此服务器称为主 KDC 服务器。此外,每个领域还应至少包含一台从 KDC 服务器,该服务器包含主体数据库的多个副本。主 KDC 服务器和从 KDC 服务器都可创建用于建立验证的票证。 领域还可以包含两种其他类型的 Kerberos 服务器。Kerberos 网络的应用程序服务器是用于提供对基于 Kerberos 的应用程序(如 ftp、telnet 和 rsh)的访问的服务器。领域还可以包括 NFS 服务器,该服务器使用 Kerberos 验证来提供 NFS 服务。如果安装了 SEAM 1.0 或 1.0.1,则领域可能会包括 Kerberos 网络应用程序服务器。 图 20–4 典型的 Kerberos 领域
Kerberos 安全服务除了提供安全的用户验证外,Kerberos 服务还会提供两种安全服务:
当前,在属于 Kerberos 服务的各种基于 Kerberos 的应用程序中,仅有 ftp 命令允许用户在运行时(“即时”)更改安全服务。开发者可以设计基于 RPC 的应用程序,以便使用 RPCSEC_GSS 编程接口来选择安全服务。 各种 Kerberos 发行版的组件许多发行版中已包括 Kerberos 服务组件。Kerberos 服务以及对用于支持 Kerberos 服务的基本操作系统进行的更改最初都使用产品名 "Sun Enterprise Authentication Mechanism"(缩写为 SEAM)来发行。由于 Solaris 软件中包括的 SEAM 产品部件越来越多,因此 SEAM 发行版的内容会相应减少。Solaris 10 发行版中包括了 SEAM 产品的所有部件,因此不再需要 SEAM 产品。由于历史原因,文档中仍存在 SEAM 产品名。 下表说明了每个发行版中包括的组件。各个产品发行版按时间顺序列出。以下各节中对所有组件进行了说明。 表 20–1 Kerberos 发行版内容
Kerberos 组件与 MIT 发布的 Kerberos V5 产品类似,Solaris Kerberos 服务也包括以下内容:
此外,Solaris Kerberos 服务还包括:
Solaris 10 发行版中的 Kerberos 增强功能Solaris 10 发行版中包括以下 Kerberos 增强功能。其中的一些增强功能已在先前的 Software Express 发行版中引入,并在 Solaris 10 Beta 版中进行了更新。
Solaris 10 6/06 发行版的 Kerberos 新增功能在 Solaris 10 6/06 发行版中,ktkt_warnd 守护进程可以自动更新凭证,而不是在凭证即将到期时才向用户发出警告。用户必须登录才能自动更新凭证。 Solaris 9 发行版中的 Kerberos 组件Solaris 9 发行版包括Kerberos 组件中除远程应用程序外的所有组件。 SEAM 1.0.2 组件SEAM 1.0.2 发行版包括远程应用程序。这些应用程序是 Solaris 9 发行版唯一未包括的部分 SEAM 1.0。远程应用程序的组件如下:
Solaris 8 发行版中的 Kerberos 组件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 来分发票证,则客户端组件将不起作用。此发行版中包括以下组件:
SEAM 1.0.1 组件SEAM 1.0.1 发行版包括 Solaris 8 发行版中未包括的所有 SEAM 1.0 发行版组件。这些组件包括:
SEAM 1.0 组件SEAM 1.0 发行版包括Kerberos 组件中的所有项以及以下各项:
第 21 章 规划 Kerberos 服务参与安装和维护 Kerberos 服务的管理员应学习本章。本章介绍管理员在安装或配置服务之前必须确定的一些安装和配置选项。 以下是系统管理员或其他技术支持人员应学习的主题的列表: 为什么要规划 Kerberos 部署?在安装 Kerberos 服务之前,必须解决几个配置问题。虽然在初始安装后可以更改配置,但每向系统中添加一台新客户机便会增加执行此操作的难度。而且某些更改可能需要进行完全重新安装,所以在规划 Kerberos 配置时最好应考虑长期目标。 部署 Kerberos 基础结构涉及以下任务:安装 KDC、为主机创建密钥以及迁移用户。 重新配置 Kerberos 部署与执行初始部署一样困难,因此要认真规划部署以避免必须进行重新配置。 Kerberos 领域领域是一个类似于域的逻辑网络,用于定义一组系统,这些系统位于同一主 KDC 下。与建立 DNS 域名一样,在配置 Kerberos 服务之前,应解决以下问题以便进行跨领域验证:领域名称、领域数和每个领域的大小以及各领域之间的关系。 领域名称领域名称可以由任何 ASCII 字符串组成。通常,领域名称与 DNS 域名相同,只不过领域名称采用大写。使用常见的名称时,这种约定有助于将 Kerberos 服务问题与 DNS 名称空间问题区分开来。如果不使用 DNS 或选择使用其他字符串,则可以使用任何字符串。但是,配置过程需要更多工作。采用符合标准 Internet 名称结构的领域名称是明智之举。 领域数安装需要的领域数取决于下列因素:
建议将 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。 KDC 端口和管理服务端口缺省情况下,端口 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。 将 GSS 凭证映射到 UNIX 凭证对于需要 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 服务工作。如果缺省映射不满足要求(例如,如果要映射包含实例部分的主体名称),应使用其他方法。有关更多信息,请参见: 自动将用户迁移到 Kerberos 领域可以使用 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 服务中使用的加密算法、加密模式和散列算法的标识符。Kerberos 服务中的密钥具有关联的加密类型,用于标识服务使用该密钥执行加密操作时要使用的加密算法和模式。以下是 Solaris 10 发行版中支持的加密类型:
注 – 此外,如果安装了非捆绑强加密软件包,则可以将 aes256-cts-hmac-sha1-96 加密类型用于 Kerberos 服务。 如果要更改加密类型,则应在创建新的主体数据库时进行更改。由于 KDC 服务器与 KDC 客户机之间存在交互,所以在现有数据库上更改加密类型很困难。除非您要重新创建数据库,否则不要设置这些参数。有关更多信息,请参阅使用 Kerberos 加密类型。 注 – 如果安装了未运行 Solaris 10 发行版的主 KDC,则在升级主 KDC 之前,必须将从 KDC 升级到 Solaris 10 发行版。Solaris 10 主 KDC 将使用新的加密类型,而较早版本的从 KDC 将无法处理这些加密类型。 SEAM Administration Tool 中的联机帮助 URLSEAM Administration Tool 将使用联机帮助 URL,因此应正确定义该 URL,以使“帮助内容“菜单正常工作。可以在任何合适的服务器上安装本手册的 HTML 版本。或者,可以决定使用 http://docs.sun.com 中的文档集。 该 URL 是在配置主机以使用 Kerberos 服务时在 krb5.conf 文件中指定的。该 URL 应指向本书的“管理主体和策略(任务)”章中标题为 "SEAM Administration Tool" 的一节。如果存在更适合的位置,可以选择另一个 HTML 页面。 第 22 章 配置 Kerberos 服务(任务)本章介绍 KDC 服务器、网络应用程序服务器、NFS 服务器和 Kerberos 客户机的配置过程。其中许多过程都要求超级用户访问权限,因此这些过程应由系统管理员或高级用户来执行。本章还将介绍跨领域配置过程以及与 KDC 服务器相关的其他主题。 本章包含以下主题: 配置 Kerberos 服务(任务列表)部分配置过程依赖于其他配置过程,且必须按特定顺序执行。这些过程通常会建立使用 Kerberos 服务所需的服务。其他过程不依赖于任何顺序,且可以在适当的情况下执行。以下任务列表给出了 Kerberos 安装的建议顺序。
配置其他 Kerberos 服务(任务列表)
配置 KDC 服务器安装 Kerberos 软件后,必须配置 KDC 服务器。配置一个主 KDC 和至少一个从 KDC 以提供颁发凭证的服务。这些凭证是 Kerberos 服务的基础,因此在尝试其他任务之前必须安装 KDC。 主 KDC 和从 KDC 之间的最大差别是,只有主 KDC 可以处理数据库管理请求。例如,更改口令或添加新的主体必须在主 KDC 上完成。然后可以将这些更改传播到从 KDC。从 KDC 和主 KDC 都可生成凭证。此功能可在主 KDC 无法响应时提供冗余性。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 的主体之前,不 |