本文档的这一节描述了将作为 KDC 的机器和软件的安装与配置。 您可能想要对建议的配置进行一些调整,但是这里提出了一些关键点,在配置 KDC 时牢记这些关键点非常重要。 因此,如果您确实决定采用替代配置策略,请确保您理解此处介绍的材料。
这些机器将运行 Kerberos 守护进程并存储密码和策略数据。 因此,对于网络安全而言,这些服务器保持安全非常重要。 我们应该采取一切可能的措施来防止这些服务器被入侵。 请特别注意本节中给出的安全建议。
该安全建议的关键点是,您应该使用专用硬件来提供 Kerberos KDC 服务。 您应该对该硬件进行物理安全保护,并且您应该尽可能地加固该硬件上的 GNU/Linux。 如果 KDC 被入侵,您的整个 Kerberos 基础设施都将受到威胁。
Kerberos 服务对硬件的要求不高,并且 Kerberos 服务具有冗余能力,因此服务器硬件可以尽可能精简。 对于我部署的 Kerberos 服务器,我使用了配备两个硬件 RAID 1 驱动器的单处理器 PIII 机器。 这些机器旨在处理每天 4 万到 10 万次身份验证。 虽然服务器可以部署冗余网卡,但应避免同时激活两张网卡。 Kerberos 在票证中包含 KDC 的 IP,因此如果在身份验证会话期间客户端通过多个接口联系 KDC,则可能会发生身份验证困难。
重要的是要注意,Kerberos 服务应在专用硬件上运行。 将机器专用于 Kerberos 意味着只有 Kerberos 管理员需要登录这些机器。 这也意味着除了 SSH 之外,不会在这些机器上运行其他服务。 由于您的所有用户密码都存储在 Kerberos 服务器上,因此最好尽可能限制对硬件的访问。 除了将服务器专用于 Kerberos 之外,您还应该尽可能地对服务器进行物理安全保护。 对于 Kerberos 服务器,这可能包括将服务器锁定在机柜中并连接专用终端。
为了利用 Kerberos 内置的冗余能力,您必须至少有两台机器作为 KDC 运行。 Kerberos 设计为部署一个主服务器和一个或多个辅助从服务器。 您可以根据需要拥有任意数量的辅助服务器。
我们要在其上安装 GNU/Linux 的服务器将专用于执行 Kerberos 服务,因此我们可以采取一些额外的步骤来保护它们。
首先,我们只会安装 Kerberos 服务绝对必需的软件。 这包括基本操作系统和 Kerberos 软件包。 我们不应安装 X 或任何 GUI 应用程序。 SSH 是可选的。 如果您希望能够远程管理服务器,则可以安装 SSH。 但是,如果您仅通过连接的终端向它们提供登录访问权限,则服务器将更加安全。
在基于 Fedora Core 的 GNU/Linux 中,提供 Kerberos 服务所需的软件包是
krb5-server krb5-libs |
文档和开发库不应安装在 KDC 上,因为我们不希望将此机器用于 KDC 服务性能以外的任何用途。
下一步将是确保没有不需要打开的端口处于打开状态,并且应用了任何必要的安全补丁。 确定需要应用哪些安全补丁的方法取决于安装了哪些软件包管理软件。 要确定机器当前正在侦听哪些端口,可以使用 netstat 命令。 例如,在仅运行 ssh 的机器上,我们应该看到以下内容
bash$ netstat -an | grep -i listen | less tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN |
最后,我们将配置服务器以仅限制对需要与其通信以进行身份验证的服务器的访问。 这应该通过编辑/etc/hosts.allow和/etc/hosts.deny以及使用iptables.
Realm 名称区分大小写,并且在您的网络上必须是唯一的。 最佳实践标准是以全大写字母形式使用您的二级域名作为您的 realm 名称。 如果您仅为子网而不是整个网络设置 Kerberos,则应使用子网的尾部域名。
在确定您的 realm 拓扑时,您应该考虑您组织的整体结构。 如果您的组织有一个或多个远程办公室或独立的子组,它们最好包含在单独的 realm 下。 Kerberos realm 拓扑应反映系统管理拓扑,而不是物理网络拓扑。
最后,还应考虑遗留系统。 例如,遗留的 Kerberos 部署或您希望保留的现有网络拓扑分组(即 Windows NT 域)。
如果您在已在整个网络或子网中部署 Kerberos 的网络上安装 Kerberos,则必须避免 realm 名称冲突。 在具有预先存在的 Kerberos 安装的网络上部署 Kerberos 最常见的情况是使用包含 IBM SP 集群的网络。 最好的解决方案是在第三级或更高级域名级别专门为 SP 集群创建一个 realm,然后使用二级域名作为您的主 Kerberos realm。
在本文档中,我们将使用一个示例来帮助说明基础设施的设计和配置。 对于我们的示例,我们将使用一所神话般的大学,该大学的成立宗旨是教育人们并研究自由内容领域 - 爱尔兰都柏林 GNU 大学。 都柏林 GNU 大学示例将包括两台 Kerberos 服务器,用于验证学生和教职员工的身份。 该大学的 TLD 是 gnud.ie,因此我们将使用 GNUD.IE 的 Kerberos realm。
现在,您需要配置 Kerberos,创建管理员,确定策略,并初始化 Kerberos 主体数据库。
第一步是编辑/etc/krb5.conf配置文件。 在此文件中,您需要设置您的 realm,通过指定 Kerberos 服务器来扩展 realm 定义,最后设置域 realm。 对于我们的示例,操作如下
default_realm = GNUD.IE [realms] GNUD.IE = { kdc = kerberos1.gnud.ie:88 kdc = kerberos2.gnud.ie:88 admin_server = kerberos1.gnud.ie:749 default_domain = gnud.ie } [domain_realm] .gnud.ie = GNUD.IE gnud.ie = GNUD.IE |
要初始化和创建 Kerberos 数据库,您必须运行以下命令
{Kerberos1}bash# /usr/Kerberos/sbin/kdb5_util create -s |
-s 标志告诉 KDC 创建一个隐藏文件以进行自我身份验证。 您也可以使用 -r 标志来指定 realm。 仅当您的krb5.conf文件中定义了多个 realm 时,才需要为新数据库指定 realm。
然后,Kerberos 将要求您设置 Kerberos 数据库的主密码。 记住这个密码非常重要。 如果您不记得主密码,您将无法管理您的服务器。
接下来在 KDC 上,您必须编辑 acl 文件以授予管理访问权限。 通常,此文件位于/var/Kerberos/krb5kdc/kadm5.acl。 如果有必要,请在您的kdc.conf文件中指定 acl 文件位置。 您的kdc.conf文件位置在您的/etc/krb5.conf文件中指定,默认为/var/Kerberos/krb5kdc/kdc.conf。 对于我们的都柏林 GNU 大学示例,我们将修改 acl 文件以包含以下内容
*/admin@GNUD.IE * |
这些 acl 内容的含义是,任何以 GNUD.IE realm 中的 /admin 结尾的帐户都被授予完全访问权限。
现在我们已经为我们的管理用户设置了访问权限,我们需要创建该管理用户。 您可以使用 KDC 上 root shell 中的 kadmin.local 命令,使用 addprinc 子命令来完成此操作。 标准是将管理帐户命名为 admin。 对于都柏林 GNU 大学 Kerberos 管理员,以下命令将完成此操作
{Kerberos1}bash# /usr/Kerberos/sbin/kadmin.local -q "addprinc admin/admin" |
必须在服务器上运行的守护进程是 krb5kdc 和 kadmin。 如果有必要,也可以运行 krb524 以提供对 Kerberos 4 客户端的向后兼容性。 但是,在启动 krb524 之前,请记住我们关于 Kerberos V4 的安全警告,并确保您确实需要提供该功能。 在 KDC 上,应配置 krb5kdc 和 kadmin 通过使用 chkconfig 命令启用它们来自动启动。
{Kerberos1}bash# /sbin/chkconfig krb5kdc on {Kerberos1}bash# /sbin/chkconfig kadmin on |
最后,我们可以使用以下命令手动启动它们
{Kerberos1}bash# /etc/rc.d/init.d/krb5kdc start {Kerberos1}bash# /etc/rc.d/init.d/kadmin start |
这样我们就有了一个可以工作的 KDC。