5. Kerberos 服务器复制

5.1. 复制的描述

Kerberos 被设计为允许主/从复制集群。虽然 Kerberos 集群可以由任意数量的主机组成,但建议您至少有两个。一个充当主服务器的主服务器,以及至少一个作为主服务器备份的从服务器。主服务器和从服务器可以分别被视为主服务器和辅助服务器。

Kerberos 将其所有信息,包括帐户和策略数据,存储在应用程序数据库中。Kerberos 软件发行版包含用于将此数据复制或拷贝到其他服务器的软件。

Kerberos 客户端应用程序被设计为在主服务器宕机时尝试针对辅助服务器进行身份验证。因此,在系统故障期间,您无需执行任何额外的工作即可将您的 Kerberos 身份验证服务故障转移到备份服务器。但是,Kerberos 的管理功能不提供自动故障转移。

如果您的主服务器发生故障,kadmind 将不可用。因此,在主服务器恢复或更换之前,管理功能将不可用。具体而言,主体管理、密钥创建和密钥更改在主服务器故障期间无法完成。

5.2. 实施

服务器复制由 kprop 命令处理。kprop 必须在主 KDC 上运行。它应该在计划的 cron 作业中运行,以保持所有服务器上的主体数据库同步。

设置复制的第一步是为 kpropd 设置 ACL。kpropd acl 文件名默认位于/var/Kerberos/krb5kdc/kpropd.acl。在我们的示例中,它将包含以下内容

host/kerberos1.gnud.ie@GNUD.IE
host/kerberos2.gnud.ie@GNUD.IE

kpropd.acl文件应该只存在于从 Kerberos 服务器上。在 Fedora 衍生的 GNU/Linux 中,kadmin 不会在安装了以下文件的 Kerberos 服务器上运行/var/Kerberos/krb5kdc/kpropd.acl存在的文件。

接下来,您需要为您的主和从 Kerberos 服务器创建主机密钥

{Kerberos1}bash# kadmin.local
{Kerberos1}kadmin.local:  addprinc -randkey host/kerberos1.gnud.ie
{Kerberos1}kadmin.local:  addprinc -randkey host/kerberos2.gnud.ie

下一步是将这些密钥提取到 keytab 文件中。keytab 文件是一个密钥环,其中包含与 KDC 身份验证所需的加密密钥。将密钥提取到 keytab 是通过 ktadd 子命令完成的

{Kerberos1}kadmin.local:  ktadd host/kerberos1.gnud.ie
{Kerberos1}kadmin.local:  ktadd host/kerberos2.gnud.ie

最后,我们想将 keytab 复制到从服务器,以便它拥有进行身份验证所需的密钥。

{Kerberos2}bash# scp root@kerberos1.gnud.ie:/etc/krb5.keytab /etc

这是来自主 Kerberos 服务器的 crontab 条目,用于每十五分钟同步主体数据库

15 * * * * /usr/local/bin/krb5prop.sh

以下是krb5prop.sh脚本

#!/bin/sh

/usr/Kerberos/sbin/kdb5_util dump /var/Kerberos/krb5kdc/slave_datatrans

/usr/Kerberos/sbin/kprop -f /var/Kerberos/krb5kdc/slave_datatrans kerberos2.gnud.ie > /dev/null

最初手动运行此命令时,您应该看到类似于以下内容

{Kerberos1}bash# /usr/Kerberos/sbin/kdb5_util dump /var/Kerberos/krb5kdc/slave_datatrans
{Kerberos1}bash# /usr/Kerberos/sbin/kprop -d -f /var/Kerberos/krb5kdc/slave_datatrans kerberos2.gnud.ie
3234 bytes sent.
Database propagation to kerberos2.gnud.ie: SUCCEEDED
{Kerberos1}bash#

从服务器现在将将其主体数据库与主服务器同步。

5.3. 维护

有了这些 cron 作业,主体传播应该足够自动化,以至于不需要维护。在主 KDC 发生故障时,除非故障将持续很长时间,否则无需人工干预。