Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

所有命令行中的 ${var} 代表用户需要填写的某个值。本配置的 域(Domain) 是 IN.NOPADDING.COM。COM。系统版本 Centos 7.6。Cloudera Manager 5.13.0。

本次部署使用的是基于 dnsmasq 的 配置方式,而不使用 FreeIPA 自带的 BIND 9(named),同时 Cloudera Manager 管理节点和 kdc 以及 slapd 不在同一台主机上。

...

Code Block
KRB5_TRACE=/dev/stderr kinit admin

CM 配置的 kerberos 的过程中,包含两个阶段,第一个是通过 kdc 管理者的账户和密码,导入凭据。实际上是一个生成 keytab 的过程。

第二个阶段是使用第一个阶段生成的凭据,在 kdc 上注册服务要使用的凭据。 

第一个阶段,我遇到的问题是通过 ktutil 无法生成 keytab。通过分析错误信息,确认是 kdc 生成 keytab 加入了 salt,而本地安装的版本:1.15.1 并不能生成这种带有随机盐值的 keytab。

于是分析 krb5kdc 如何配置 enctype 和 salt 的值。

在 krb5.conf 配置中可以看出,kdc 服务通过 ipa 的 ipadb.so 作为数据库端(kdb),具体实现在如下文件中 https://github.com/freeipa/freeipa/blob/release-4-6-5/daemons/ipa-kdb/ipa_kdb.cc#L444 。

把相关函数指针,写入 kdb_vftabl 的结构体中,导出 kdb_function_table。结构体定义在 table,此处查看 ipadb.so 的导出表也可以看到。结构体定义在 https://github.com/krb5/krb5/blob/krb5-1.15.1-final/src/include/kdb.h 。

通过部分代码可以看出,krbDefaultEncSaltTypes 通过这部分代码可以看出,krbDefaultEncSaltTypes 属性,影响生成 keytab 的加密方式。的加密方式。那么我尝试修改 ldap 中的这两个值。

修改部分 attrbutes,可以影响 kdc 的加密算法。

...

Code Block
#!/bin/bash

set -x
KEYTAB=$1
printf "addent -password -p admin -k 1 -e aes256-cts\nhadoop123\naddent -password -p admin -k 1 -e aes128-cts\nhadoop123\nwrite_kt $KEYTAB\nquit" | ktutil

比较这两个 keytab 是否相同即可。


krb5kdc - Kerberos V5 KDC

...