基于CentOS7下的Kerberos集成Hadoop和Hive

Hadoop与Hive Kerberos认证配置
本文详细介绍了如何在Hadoop集群和Hive中配置Kerberos认证,包括Kerberos的基本原理、环境搭建、配置步骤以及常见问题解决。涵盖了从Kerberos服务器的部署到Hadoop和Hive的集成,以及遇到的具体错误和解决方案。

目的:新项目针对Hadoop集群以及Hive使用Kerberos做认证处理
版本:
Hadoop 2.7.2
Hive 1.2.1

Kerberos介绍

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为 客户机 / 服务器 应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

认证过程具体如下:客户机向认证服务器(AS)发送请求,要求得到某服务器的证书,然后 AS 的响应包含这些用客户端密钥加密的证书。证书的构成为: 1) 服务器 “ticket” ; 2) 一个临时加密密钥(又称为会话密钥 “session key”) 。客户机将 ticket (包括用服务器密钥加密的客户机身份和一份会话密钥的拷贝)传送到服务器上。会话密钥可以(现已经由客户机和服务器共享)用来认证客户机或认证服务器,也可用来为通信双方以后的通讯提供加密服务,或通过交换独立子会话密钥为通信双方提供进一步的通信加密服务

上述认证交换过程需要只读方式访问 Kerberos 数据库。但有时,数据库中的记录必须进行修改,如添加新的规则或改变规则密钥时。修改过程通过客户机和第三方 Kerberos 服务器(Kerberos 管理器 KADM)间的协议完成。有关管理协议在此不作介绍。另外也有一种协议用于维护多份 Kerberos 数据库的拷贝,这可以认为是执行过程中的细节问题,并且会不断改变以适应各种不同数据库技术。

Hadoop提供了两种安全配置simple和kerberos。

simple为简单认证控制用户名和所属组,很容易被冒充。

Kerberos为借助kerberos服务生成秘钥文件所有机器公用,有秘钥文件才是可信节点。本文主要介绍kerberos的配置。Kerberos也存在问题,配置复杂,切更改麻烦,需从新生成秘钥切分发所有机器。

环境依赖:Hadoop+Hive,基于之前博客部署做Kerberos
Hadoop和Hive可参照我之前的博客:
CentOS7 手动部署Hadoop集群2.7.2
CentOS7 手动部署Hive1.2.1

既然环境有了,那下面正式进入部署Kerberos!

环境信息

主机名 IP 部署内容
test-01 172.18.0.1 NameNode、SecondaryNameNode、ResourceManager、Hive、master KDC
test-02 172.18.0.2 NodeManager、DataNode、Kerberos Client
test-03 172.18.0.3 NodeManager、DataNode、Kerberos Client

注意以下两点:
hostname小写,要不然集成kerberos时会出错
关闭master及各worker防火墙

Kerberos安装部署

1、主节点部署(master KDC)

yum install krb5-server krb5-libs krb5-workstation -y

2、从节点部署(Kerberos Client)

yum install krb5-libs krb5-workstation -y

3、修改配置文件
a.配置kdc.conf(主节点)

[root@test-01 ~]# vim /var/kerberos/krb5kdc/kdc.conf

修改后内容如下,以下配置可直接拿来用

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
# EXAMPLE.COM = {
   
   
#  #master_key_type = aes256-cts
#  acl_file = /var/kerberos/krb5kdc/kadm5.acl
#  dict_file = /usr/share/dict/words
#  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
#  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
# }

 HIVE.COM = {
   
   
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  max_renewable_life = 7d
  supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

说明:
HIVE.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,一般全用大写
master_key_type,supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,这里暂不使用
acl_file:标注了admin的用户权限。文件格式是
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等
admin_keytab:KDC进行校验的keytab
supported_enctypes:支持的校验方式。注意把aes256-cts去掉

b.配置krb5.conf(主从节点都需要)

[root@test-01 ~]# vim /etc/krb5.conf

修改后内容如下,以下配置可直接拿来用

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.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_realm = EXAMPLE.COM
# default_ccache_name = KEYRING:persistent:%{uid}
 default_realm = HIVE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 clockskew = 120
 udp_preference_limit = 1

[realms]
# EXAMPLE.COM = {
   
   
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }
 HIVE.COM = {
   
   
  kdc = test-01
  admin_server = test-01
 }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
 .hive.com = HIVE.COM
 hive.com = HIVE.COM

说明:
[logging]:表示server端的日志的打印位置
udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
ticket_lifetime: 表明凭证生效的时限,一般为24小时。
renew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
clockskew:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据,单位是秒
修改其中的realm,把默认的EXAMPLE.COM修改为自己要定义的值,如:HIVE.COM。其中,以下参数需要修改:
default_realm:默认的realm。设置为realm。如SUERMAP.COM
kdc:代表要kdc的位置。添加格式是 机器名
admin_server:代表admin的位置。格式是机器名
default_domain:代表默认的域名。(设置master主机所对应的域名,如hive.com)

c.修改database administrator的ACL权限(主节点)

vim /var/kerberos/krb5kdc/kadm5.acl
#修改如下
*/admin@HIVE.COM  *

kadm5.acl 文件更多内容可参考:kadm5.acl文档
想要管理 KDC 的资料库有两种方式, 一种直接在 KDC 本机上面直接执行,可以不需要密码就登入资料库管理;一种则是需要输入账号密码才能管理~这两种方式分别是:
kadmin.local:需要在 KDC server 上面操作,无需密码即可管理资料库
kadmin:可以在任何一台 KDC 领域的系统上面操作,但是需要输入管理员密码

4.配置Kerberos服务相关文件
a.创建Kerberos数据库

创建Kerberos数据库,需要设置管理员密码,创建成功后会在/var/Kerberos/krb5kdc/下生成一系列文件,如果重新创建的话,需要先删除/var/kerberos/krb5kdc下面principal相关文件。

需在主节点的root用户下执行以下命令:

kdb5_util create -s -r HIVE.COM

b.启动kerberos并设置为开启启动

chkconfig krb5kdc on
chkconfig kadmin on
service krb5kdc start
service kadmin start
service krb5kdc status

c.创建 kerberos的管理员
在Master节点的root用户下分别执行以下命令:

kadmin.local
addprinc admin/admin@HIVE.COM

Hadoop集群配置Kerberos

一些概念:
Kerberos principal用于在kerberos加密系统中标记一个唯一的身份。
kerberos为kerberos principal分配tickets使其可以访问由kerberos加密的hadoop服务。
对于hadoop,principals的格式为username/fully.qualified.domain.name@YOUR-REALM.COM.

keytab是包含principals和加密principal key的文件。
keytab文件对于每个host是唯一的,因为key中包含hostname。keytab文件用于不需要人工交互和保存纯文本密码,实现到kerberos上验证一个主机上的principal。
因为服务器上可以访问keytab文件即可以以principal的身份通过kerberos的认证,所以,keytab文件应该被妥善保存,应该只有少数的用户可以访问。

hive配置kerberos的前提是Hadoop集群已经配置好Kerberos,因此我们先来配置Hadoop集群的认证。
1、在主节点与各个节点分别添加以下用户组和用户

#新建用户yarn,其中需设定userID<1000,命令如下:
useradd -u 502 yarn -g hadoop
#  并使用passwd命令为新建用户设置密码
passwd yarn 输入新密码
#用户建好后,用id user命令查看用户信息如下所示
[root@test-01 ~]# id yarn
uid=502(yarn) gid=1002(hadoop) groups=1002(hadoop)

2、创建 kerberos的普通用户及密钥文件,为配置 YARN kerberos security 时,各节点可以相互访问用。
a.在Master节点的root用户下分别执行以下命令:

cd /var/kerberos/krb5kdc/
#登录管理用户
kadmin.local
#创建用户
addprinc -randkey yarn/test-01@HIVE.COM
addprinc -randkey yarn/test-02@HIVE.COM
addprinc -randkey yarn/test-03@HIVE.COM
addprinc -randkey hdfs/test-01@HIVE.COM
addprinc -randkey hdfs/test-02@HIVE.COM
addprinc -randkey hdfs/test-03@HIVE.COM
addprinc -randkey HTTP/test-01@HIVE.COM
addprinc -randkey HTTP/test-02@HIVE.COM
addprinc -randkey HTTP/test-03@HIVE.COM
#生成密钥文件(生成到当前路径下)
kadmin.local -q "xst  -k yarn.keytab  yarn/test-01@HIVE.COM"
kadmin.local -q "xst  -k yarn.keytab  yarn/test-02@HIVE.COM"
kadmin.local -q "xst  -k yarn.keytab  yarn/test-03@HIVE.COM"
 
kadmin.local -q "xst  -k HTTP.keytab  HTTP/test-01@HIVE.COM"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/test-02@HIVE.COM"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/test-03@HIVE.COM"

kadmin.local -q "xst  -k hdfs-unmerged.keytab  HTTP/test-01@HIVE.COM"
kadmin.local -q "xst  -k hdfs-unmerged.keytab  HTTP/test-02@HIVE.COM"
kadmin.local -q "xst  -k hdfs-unmerged.keytab  HTTP/test-03@HIVE.COM"
#合并成一个keytab文件,rkt表示展示,wkt表示写入
$ ktutil
ktutil: rkt hdfs-unmerged.keytab
ktutil: rkt HTTP.keytab
ktutil: rkt yarn.keytab
ktutil: wkt hdfs.keytab
#查看
klist -ket  hdfs.keytab

Keytab name: FILE:hdfs.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (aes128-cts-hmac-sha1-96) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (des3-cbc-sha1) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (arcfour-hmac) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (camellia256-cts-cmac) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (camellia128-cts-cmac) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (des-hmac-sha1) 
   2 01/01/2020 22:44:39 hdfs/yc-test-03@HIVE.COM (des-cbc-md5) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (aes128-cts-hmac-sha1-96) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (des3-cbc-sha1) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (arcfour-hmac) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (camellia256-cts-cmac) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (camellia128-cts-cmac) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (des-hmac-sha1) 
   3 01/01/2020 22:44:46 hdfs/yc-test-01@HIVE.COM (des-cbc-md5) 
   2 01/01/2020 22:44:50 hdfs/yc-test-02@HIVE.COM (aes128-cts-hmac-sha1-96) 
   2 01/01/2020 22:44:50 hdfs/yc-test-02@HIVE.COM (des3-cbc-sha1) 
   2 01/01/2020 22:44:50 hdfs/yc-test-02@HIVE.COM (arcfour-hmac) 
   2 01/01/2020 22:44:50 hdfs/yc-test-02@HIVE.COM (camellia256-cts-cmac) 
   2 01/01/2020 22:44:50 hdfs/yc-test-02@HIVE.COM (camellia128-cts-cmac) 
   2 01/01/2020 22:44:51 hdfs/yc-test-02@HIVE.COM (des-hmac-sha1) 
   2 01/01/2020 22:44:51 hdfs/yc-test-02@HIVE.COM (des-cbc-md5) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (aes128-cts-hmac-sha1-96) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (des3-cbc-sha1) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (arcfour-hmac) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (camellia256-cts-cmac) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (camellia128-cts-cmac) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (des-hmac-sha1) 
   3 01/01/2020 22:44:58 yarn/yc-test-02@HIVE.COM (des-cbc-md5) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (aes128-cts-hmac-sha1-96) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (des3-cbc-sha1) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (arcfour-hmac) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (camellia256-cts-cmac) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (camellia128-cts-cmac) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (des-hmac-sha1) 
   3 01/01/2020 22:45:03 yarn/yc-test-01@HIVE.COM (des-cbc-md5) 
   3 01/01/2020 22:45:08 yarn/yc-test-03@HIVE.COM (aes128-cts-hmac-sha1-96) 
   3 01/01/2020 22:45:08 yarn/yc-test-03@HIVE.COM (des3-cbc-sha1) 
   3 01/01/2020 22:45:08 yarn/yc-test-03@HIVE.COM (arcfour-hmac) 
   3 01/01/2020 22:45:08 yarn/yc-test-03@HIVE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值