文档编写目的
在使用CDH的过程中,集群启用了Kerberos认证后,集群中的一些组件的Web UI也会启用Kerberos认证,例如HDFS、Yarn、Hive等组件,此时如果在Windows上对这些页面进行访问,是无法正常访问的,需要在Windows本地安装上Kerberos客户端,并进行配置后才能够访问这些需要Kerberos认证的Web UI,本文档将介绍如何在Windows 10安装Kerberos客户端并配置FireFox浏览器访问CDH集群组件的Web UI。
- 测试环境:
1.CM和CDH版本为6.2.0
2.本地操作系统环境为Windows10
3.集群服务均正常运行
4.集群启用Kerberos
5.集群操作系统版本为RedHat7.2
Kerberos安装
1.在Kerberos官网下载安装包,下载地址:
代码语言:javascript复制http://web.mit.edu/kerberos/dist/
2.本文档下载了64位的 安装包,下面按步骤进行安装
至此安装完成
3.配置C:ProgramDataMITKerberos5krb5.ini文件
将安装KDC Server的服务器上的/etc/krb5.conf配置文件中的部分内容拷贝到该文件中
注意:不要直接替换krb5.ini文件,否则会出现文件格式问题,建议拷贝部分内容到krb5.ini文件中,然后保存文件
4.配置完成后,启动MIT Kerberos客户端,如下图所示:
在Windows下使用kinit测试
1.在KDC Server上创建一个用户
代码语言:javascript复制[root@cdh178 ~]# kadmin.local
Authenticating as principal solr/admin@MACRO.COM with password.
kadmin.local: addprinc test_krb
WARNING: no policy specified for test_krb@MACRO.COM; defaulting to no policy
Enter password for principal "test_krb@MACRO.COM":
Re-enter password for principal "test_krb@MACRO.COM":
Principal "test_krb@MACRO.COM" created.
测试正常
2.在Winodw端,通过MIT Kerberos客户Get Ticket
在如下列表中可以看到获取的ticket
3.销毁获取到的Ticket
4.命令行下初始化
在客户端可以看到初始化成功的Ticket
5.命令行下kdestroy
客户端数据已kdestroy
使用keytab文件测试Kerberos
1.在KDC Server上生成keytab文件,使用test_krb@MACRO.COM账号
代码语言:javascript复制[root@cdh178 ~]# kadmin.local
Authenticating as principal test_krb/admin@MACRO.COM with password.
kadmin.local: xst -norandkey -k test_krb.keytab test_krb@MACRO.COM
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:test_krb.keytab.
Entry for principal test_krb@MACRO.COM with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:test_krb.keytab.
生成成功
测试keytab文件
测试成功
2.将生成的keytab文件拷贝到本地Windows环境,进行kinit测试
初始化成功,在客户端查看
配置FireFox浏览器访问
1.打开FireFox浏览器,在地址栏输入about:config
2.修改配置
代码语言:javascript复制network.negotiate-auth.trusted-uris = cdh178.macro.com,cdh177.macro.com,cdh176.macro.com
network.auth.use-sspi = false
network.negotiate-auth.trusted-uris这个参数配置的是访问服务的hostname,配置多个的话以“,”分隔
测试访问集群服务
6.1 测试访问HDFS和Yarn
1.由于此时未初始化HDFS的Ticket,所以无法访问
2.进入到/var/run/cloudera-scm-agent目录下,到最新的HDFS的目录中找到HDFS的keytab文件
3.测试HDFS的keytab文件是否能够正常使用
代码语言:javascript复制[root@cdh177 1298-hdfs-NAMENODE]# kinit -kt hdfs.keytab hdfs/cdh177.macro.com@MACRO.COM
[root@cdh177 1298-hdfs-NAMENODE]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/cdh177.macro.com@MACRO.COM
Valid starting Expires Service principal
08/04/2019 10:08:39 08/05/2019 10:08:39 krbtgt/MACRO.COM@MACRO.COM
renew until 08/09/2019 10:08:39
初始化成功
4.将HDFS的keytab文件拷贝到Windows本地,并进行kinit
5.再次通过FireFox访问HDFS服务,能够正常访问
6.访问Yarn资源管理服务,访问正常
6.2 keytab合并使用
1.将需要合并的keytab文件同意的放在同一个目录下
2.使用ktutil命令合并keytab文件,操作如下:
代码语言:javascript复制[root@cdh177 0804]# ktutil
ktutil: rkt hbase.keytab
ktutil: rkt hdfs.keytab
ktutil: rkt hive.keytab
ktutil: rkt yarn.keytab
ktutil: wkt test-new.keytab
ktutil: exit
keytab合并成功,默认生成的keytab文件权限是600,如果事应非root用户执行需要注意权限问题
3.将生成的合并后的keytab文件拷贝到本地Windows环境进行测试
使用hdfs凭证进行初始化
访问HDFS服务成功
使用hive凭证进行初始化
访问HDFS服务成功
使用hbase凭证进行初始化
访问HDFS服务成功
使用yarn凭证进行初始化
访问HDFS服务成功
通过测试可以看出,使用合并后的keytab文件,无论用哪个系统用户的身份进行认证,配置成功后都能够通过FireFox浏览器访问服务的页面
总结
1.Windows本地的krb5.ini文件不能直接使用krb5.conf文件更名替换,否则会出现文件格式的问题导致MIT Kerberos客户端无法正常启动。
2.在生成keytab文件时需要加上”-norandkey”参数,否则会导致kinit时密码错误。
3.在Windows本地安装了Java环境后,由于Java里也有kinit、klist等命令,所以需要在Path环境变量里面,将Kerberos的环境变量位置调整到Java环境变量的前面,保证在Windows本地使用的kinit、klist等命令是使用的Kerberos的命令,否则就会导致命令冲突,如下图,将Kerberos的环境变量调整到最前面即可。