11.2. 配置 Kerberos KDC
首先安装主 KDC,然后在设置主服务器后安装任何必要的次要服务器。
重要
不建议手动设置 Kerberos KDC。在 Red Hat Enterprise Linux 环境中引入 Kerberos 的建议方法是使用身份管理功能。
11.2.1. 配置主 KDC 服务器 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
重要
KDC 系统应为专用计算机。此计算机需要非常安全 - 如果可能,它不应运行 KDC 以外的任何服务。
- 为 KDC 安装所需的软件包:
yum install krb5-server krb5-libs krb5-workstation
[root@server ~]# yum install krb5-server krb5-libs krb5-workstation
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑
/etc/krb5.conf
和/var/kerberos/krb5kdc/kdc.conf
配置文件,以反映 realm 名称和 domain-to-realm 映射。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可以通过将 EXAMPLE.COM 和 example.com 的实例替换为正确的域名来构建一个简单的域 - 务必使大写和小写名称保留正确的格式 - 并通过将 KDC 从 kerberos.example.com 更改为 Kerberos 服务器的名称。按照惯例,所有域名均为大写,所有 DNS 主机名和域名均为小写。这些配置文件的 man page 提供有关文件格式的完整详情。 - 使用 kdb5_util 实用程序创建数据库。
kdb5_util create -s
[root@server ~]# kdb5_util create -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow create 命令创建为 Kerberos 域存储密钥的数据库。-s 参数会创建一个存储主服务器密钥的 stash 文件。如果没有从中读取密钥的 stash 文件,则 Kerberos 服务器(krb5kdc)会提示用户输入 master 服务器密码(可用于重新生成密钥)。 - 编辑
/var/kerberos/krb5kdc/kadm5.acl
文件。kadmind 使用此文件来确定哪些主体对 Kerberos 数据库及其访问级别具有管理访问权限。例如:*/admin@EXAMPLE.COM *
*/admin@EXAMPLE.COM *
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 大多数用户在数据库中由一个主体(使用 NULL 或空实例,如 joe@EXAMPLE.COM)表示。在这个配置中,具有第二个主体的用户 ( 例如 joe/admin@EXAMPLE.COM)可以全面控制域的 Kerberos 数据库。在服务器上启动 kadmind 后,任何用户都可以在域中的任何客户端或服务器上运行 kadmin 来访问其服务。但是,除了更改自己的密码外,只有kadm5.acl
文件中列出的用户才能以任何方式修改数据库。注意kadmin 工具通过网络与 kadmind 服务器通信,并使用 Kerberos 处理身份验证。因此,第一个主体必须已经存在,然后才能通过网络连接到服务器来管理它。使用 kadmin.local 命令创建第一个主体,该命令专门设计为在与 KDC 相同的主机上使用,且不使用 Kerberos 进行身份验证。 - 在 KDC 终端中使用 kadmin.local 创建第一个主体:
kadmin.local -q "addprinc username/admin"
[root@server ~]# kadmin.local -q "addprinc username/admin"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用以下命令启动 Kerberos:
systemctl start krb5kdc.service systemctl start kadmin.service
[root@server ~]# systemctl start krb5kdc.service [root@server ~]# systemctl start kadmin.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 kadmin 中使用 addprinc 命令为用户添加主体。kadmin 和 kadmin.local 是 KDC 的命令行界面。因此,启动 kadmin 程序后,可以使用许多命令,如 addprinc -。如需更多信息,请参阅 kadmin 手册页。
- 验证 KDC 是否在签发票据。首先,运行 kinit 以获取 ticket 并将其存储在凭证缓存中。接下来,使用 klist 查看缓存中凭据列表,并使用 kdestroy 销毁缓存及其包含的凭证。注意默认情况下,kinit 会尝试使用相同的系统登录用户名(而不是 Kerberos 服务器)进行身份验证。如果该用户名与 Kerberos 数据库中的主体没有对应,则 kinit 会发出错误消息。如果发生这种情况,请在命令行中以正确的主体名称作为参数提供 kinit :
kinit principal
kinit principal
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2.2. 设置第二个 KDC 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当给定域有多个 KDC 时,一个 KDC ( 主 KDC)会保留 realm 数据库的可写副本并运行 kadmind。主 KDC 也是域的 管理服务器。其他辅助 KDC 保留数据库的只读副本,并运行 kpropd。
主和从属传播过程要求主 KDC 将其数据库转储到临时转储文件中,然后将该文件传输到每个从卷,然后使用转储文件的内容覆盖之前收到的数据库只读副本。
设置二级 KDC:
- 为 KDC 安装所需的软件包:
yum install krb5-server krb5-libs krb5-workstation
[root@slavekdc ~]# yum install krb5-server krb5-libs krb5-workstation
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将主 KDC 的
krb5.conf
和kdc.conf
文件复制到辅助 KDC 中。 - 从主 KDC 上的 root shell 启动 kadmin.local。
- 使用 kadmin.local add_principal 命令为主 KDC 的主机服务创建新条目。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 kadmin.local ktadd 命令为服务设置随机密钥,并将随机密钥存储在 master 的默认 keytab 文件中。注意kprop 命令使用此密钥向次要服务器进行身份验证。无论您安装多少次要 KDC 服务器,您只需执行此操作一次。
- 从辅助 KDC 上的 root shell 启动 kadmin。
- 使用 kadmin.local add_principal 命令为辅助 KDC 的主机服务创建新条目。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 kadmin.local ktadd 命令为服务设置随机密钥,并将随机密钥存储在次要 KDC 服务器的默认 keytab 文件中。在验证客户端时,kpropd 服务使用此密钥。
- 借助其服务密钥,次要 KDC 可以验证要与之连接的任何客户端。显然,并非所有潜在的客户端都应被允许为 kprop 服务提供新的 realm 数据库。要限制访问,二级 KDC 上的 kprop 服务将只接受来自
/var/kerberos/krb5kdc/kpropd.acl
中列出的主体名称的客户端。将主 KDC 主机服务的名称添加到该文件中。echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl
[root@slavekdc ~]# echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 辅助 KDC 获取数据库的副本后,还需要用于加密的主密钥。如果 KDC 数据库的主密钥存储在主 KDC 上的 stash 文件中(通常称为
/var/kerberos/krb5kdc/.k5.REALM
),则将其复制到辅助 KDC 中,或使用任何可用的安全方法将其复制到辅助 KDC 中,或者通过运行 kdb5_util create -s 并提供相同的密码。dummy 数据库将被第一次成功数据库传播覆盖。 - 确保辅助 KDC 的防火墙允许主 KDC 使用端口 754 (krb5_prop)上的 TCP 联系,并启动 kprop 服务。
- 验证 kadmin 服务 是否已禁用。
- 通过将主 KDC 上的 realm 数据库转储到要读取的默认数据文件(
/var/kerberos/krb5kdc/slave_datatrans
)来执行手动数据库传播测试。kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
[root@masterkdc ~]# kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 kprop 命令将其内容传输到辅助 KDC。
kprop slavekdc.example.com
[root@masterkdc ~]# kprop slavekdc.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 kinit,验证客户端系统是否能够从 KDC 正确获取初始凭证。客户端的
/etc/krb5.conf
应该只列出 KDC 列表中的辅助 KDC。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建一个转储 realm 数据库的脚本,并运行 kprop 命令将数据库传送到每个辅助 KDC 中,并将 cron 服务配置为定期运行脚本。
11.2.3. Kerberos 密钥分发中心代理 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
有些管理员可能选择使其部署无法访问默认的 Kerberos 端口。要允许用户、主机和服务获取 Kerberos 凭据,您可以使用 HTTPS 服务作为通过
HTTPS
端口 443 与 Kerberos 通信的代理。
在 Identity Management(IdM)中,Kerberos 密钥分发中心代理 (KKDCP)提供此功能。
KKDCP 服务器
在 IdM 服务器上,KKDCP 默认启用。如果目录中存在属性和值对 ipaConfigString=kdcProxyEnabled,则 KKDCP 每次启动时会自动启用。在这种情况下,会创建符号链接
/etc/httpd/conf.d/ipa-kdc-proxy.conf
。因此,您可以通过检查是否存在符号链接来验证在 IdM 服务器中是否启用了 KKDCP。
ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
$ ls -l /etc/httpd/conf.d/ipa-kdc-proxy.conf
lrwxrwxrwx. 1 root root 36 Aug 15 09:37 /etc/httpd/conf.d/ipa-kdc-proxy.conf -> /etc/ipa/kdcproxy/ipa-kdc-proxy.conf
更多详情请见以下示例服务器配置。
例 11.1. 配置 KKDCP 服务器 I
使用以下示例配置,您可以启用 TCP 作为 IdM KKDCP 和 Active Directory 域之间的传输协议,其中使用多个 Kerberos 服务器:
- 在
/etc/ipa/kdcproxy/kdcproxy.conf
文件中,将 [global] 部分中的use_dns
参数设置为 false :[global] use_dns = false
[global] use_dns = false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将代理域信息放在
/etc/ipa/kdcproxy/kdcproxy.conf
文件中。对于 [AD.EXAMPLE.COM] realm with proxy,例如:[AD.EXAMPLE.COM] kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88 kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
[AD.EXAMPLE.COM] kerberos = kerberos+tcp://1.2.3.4:88 kerberos+tcp://5.6.7.8:88 kpasswd = kpasswd+tcp://1.2.3.4:464 kpasswd+tcp://5.6.7.8:464
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要realm 配置参数必须列出由空格分隔的多个服务器,而不是/etc/krb5.conf
和kdc.conf
,其中某些选项可以多次指定。 - 重启 IdM 服务:
ipactl restart
# ipactl restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例 11.2. 配置 KKDCP 服务器 II
这个示例服务器配置依赖于 DNS 服务记录来查找要与之通信的 AD 服务器。
- 在
/etc/ipa/kdcproxy/kdcproxy.conf
文件中,使用 [global] 部分,将use_dns
参数设置为 true :[global] configs = mit use_dns = true
[global] configs = mit use_dns = true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow configs
参数允许您载入其他配置模块。在这种情况下,配置是从 MITlibkrb5
库读取的。 - 可选: 如果您不想使用 DNS 服务记录,请将显式 AD 服务器添加到
/etc/krb5.conf
文件的 [realms] 部分。如果带有代理的域为:AD.EXAMPLE.COM,请添加:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启 IdM 服务:
ipactl restart
# ipactl restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
KKDCP 客户端
客户端系统通过其
/etc/krb5.conf
文件指向 KDC 代理。按照以下步骤访问 AD 服务器。
- 在客户端上,打开
/etc/krb5.conf
文件,并将 AD 域的名称添加到 [realms] 部分:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 打开
/etc/sssd/sssd.conf
文件,并将 krb5_use_kdcinfo = False 行添加到您的 IdM 域部分:[domain/example.com] krb5_use_kdcinfo = False
[domain/example.com] krb5_use_kdcinfo = False
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重启
SSSD
服务:systemctl restart sssd.service
# systemctl restart sssd.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其它资源
- 有关为 Active Directory 域配置 KKDCP 的详情,请参阅在红帽知识库 中将 IPA 服务器配置为用于 AD Kerberos 通信的 KDC 代理。