最近在倒腾Kerberos的东西,在CDH集群中启用Kerberos时,只有Linux客户端能够正常使用,Windows就会出各种问题,再次记录一下虚拟机中Windows使用Kerberos的过程。

安装Kerberos客户端

For more information, please see the release page .

下载kfw-4.1-amd64.msi后进行安装,安装过程一路无脑下一步即可。安装完成后会自动配置一个环境变量,但是它却追加到最后了,这里建议将其放在PATH这个环境变量最前面。

配置Kerberos

将CDH集群中的/etc/krb5.conf文件下载下来,打开C:\ProgramData\MIT\Kerberos5\krb5.ini/etc/krb5.conf中的内容填入其中,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Configuration snippets may be placed in this directory as well
#includedir /etc/krb5.conf.d/

#includedir /var/lib/sss/pubconf/krb5.include.d/
#[logging]
#default = FILE:/var/log/krb5libs.log
#kdc = FILE:/var/log/krb5kdc.log
#admin_server = FILE:/var/log/kadmind.log

[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
# pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
#default_ccache_name = KEYRING:persistent:%{uid}
default_realm = EXAMPLE.COM
udp_preference_limit=1
[realms]
EXAMPLE.COM = {
kdc = ad.example.com
admin_server = ad.example.com
}

[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM

这里一定注意,实际上我们只需要将libdefaultsrealmsdomain_realm这三个配置项拷贝进去即可。如果你是全部拷贝进去的,那么有关linux目录信息一定要注释掉,例如第一行的includedir /etc/krb5.conf.d/。在libdefaults中一定要加入udp_preference_limit=1这个配置项,避免因为UDP的缘故无法与KDC进行通信。

配置host文件

由于krb5.ini文件中的kdc,admin_server等都是主机名的形式进行配置的,那么此时就需要修改hosts,打开C:\Windows\System32\drivers\etc中的hosts文件,加入如下内容:

1
10.10.11.3 ad.example.com ad

生成票据

通常会提供一个keytab的文件来进行认证,通过后会生成票据缓存,如果不提供keytab那么也会提供一个账号密码来进行认证,具体如下所示。

keytab的形式

1
kinit -k -t test.keytab test@EXAMPLE.COM

如果很快就能执行通过,或者稍微卡顿一会儿那么就表示成功了。可以使用klist命令来查看。

账号密码的形式

1
2
kinit test@EXAMPLE.COM
# 然后输入密码

这两种方式都可以,认证通过后使用klist命令可以查看该缓存的有效期已经续期截止日期。

1
2
3
4
5
6
7
C:\Users\李阳>klist
Ticket cache: FILE:C:\Users\李阳\Documents\kerberos\krb5cc_0
Default principal: [email protected]

Valid starting Expires Service principal
10/25/20 17:57:51 10/26/20 03:57:51 krbtgt/[email protected]
renew until 11/01/20 17:57:35

这里我在系统之配置了Ticket cache的缓存路径,具体可以按照如下配置:

1
2
变量名:   KRB5CCNAME
变量值: C:\Users\李阳\Documents\kerberos\krb5cc_0 # 改成自己的路径即可

我遇到了默认打开cmd命令窗口时,执行klist一直无效的问题,后来我cd c:\后,再去执行又可以了。但是同事的电脑打开cmd默认就可以执行klist