CDH版本Hadoop集成Kerberos

1、环境说明

操作系统:centos 7
CDH版本:CDH 6.0.1
JDK版本:1.8.0_212

2、kerberos简介

  hadoop使用kerberos作为用户和服务的强身份验证和身份传播的基础。kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份kerberos是第三方认证机制,其中用户和服务依赖于第三方(kerberOS服务器)来对彼此进行身份验证。kerberos服务器本身称为秘钥分发中心或KDC。在较高的层面上,它有三个部分:
   一:它知道的用户和服务(称为主体)及其各自的kerberos密码的数据库
   二: 一个认证服务器(AS):验证Client端的身份(确定你是身份证上的本人),验证通过就给一张票证授予票证(TGT)给client。
   三:一个票据授权服务器(TGS):通过TGT获取访问server端的票(server ticket)。ST也有资料称为TGS Ticket.

以平时坐火车举例:
在这里插入图片描述   一个用户注意来自AS请求认证。AS返回使用用户主体的kerberos密码加密的TGT,该密码仅为用户主体和AS所知。用户主体使用其kerberos密码在本地解密TGT,从那时起,直到ticket到期,用户主体可以使用TGT从TGS获取服务票据。服务票据允许委托人访问服务。
  kerberos简单来说就是一个用于安全认证第三方协议。它采用了传统的共享秘钥方式,实现了再网络不一定保证安全的环境下,client和server之间的通信,适用于client/server模型,有MIT开发和实现。
  kerberos服务是单点登录系统,这就意味着您对于每个会话只需要进行一次自我验证,即可自动保护改会话过程中所有后续事务的安全。
  由于每次解密TGT时集群资源都无法提供密码,因此他们使用称为keytab的特殊文件。因此他们使用称为keytab的特殊文件,改文件保护资源主体的身份验证凭据。
  kerberos服务器控制的主机,用户和服务集称为领域。

3、kerberos安装

3.1、server节点需要安装的包
在这里插入图片描述
3.2、client节点需要安装的包
在这里插入图片描述
kerberos服务端
kdc配置 vim /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 HADOOP.COM = {
    
    
  #master_key_type = aes256-cts
  max_renewable_life = 7d
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  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
 }
[logging]
admin_server = FILE:/var/log/kdc_admin.log
kdc = FILE:/var/log/kdc.log

注释
HADOOP.COM:根据设定的reaml更改
acl_file:admin 的用户权限。
admin_keytab:KDC 进行校验的 keytab
supported_enctypes:支持的校验方式。注意把 aes256-cts 去掉,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包,所有这里不用。

3.3、krb5 文件配置 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 = HADOOP.COM
 udp_preference_limit = 1
 #default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 HADOOP.COM = {
    
    
  kdc = node2
  admin_server = node2
 }

[domain_realm]
 .hadoop.com = HADOOP.COM
 hadoop.com = HADOOP.COM

注释
default_realm:默认的realm,设置 Kerberos 应用程序的默认领域,必须跟要配置的realm
的名称一致。如果有多个领域,只需向 [realms] 节添加其他的语句。
ticket_lifetime:表明凭证生效的时限,一般为 24 小时。
renew_lifetime : 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
udp_preference_limit= 1:禁止使用 udp,可以防止一个 Hadoop 中的错误
[realms]:列举使用的 realm。

3.4、kadm5.acl文件配置

vim /var/kerberos/krb5kdc/kadm5.acl
*/[email protected]     *

* :全部的主体
/admin:admin 实例
@HADOOP.COM:领域 最后*:全部权限。

客户端配置:
同步 服务器的krb5.conf 到 Client 节点即可

3.5、生成Kerberos数据库
在server节点执行

 kdb5_util create -s

创建完成后/var/kerberos/krb5kdc 目录下会生成对应的文件

ls /var/kerberos/krb5kdc/
kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok

3.6、创建管理员主体/实例

kadmin.local -q "addprinc admin/admin"

3.7、启动服务

service krb5kdc start
service kadmin start

3.8、设置开机自启

service krb5kdc enable
service kadmin enable

3.9、kinit 管理员验证

kinit admin/admin
Password for admin/[email protected]: (输入密码)

klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/[email protected]
Valid starting Expires Service principal
08/27/19 14:41:39 08/28/19 14:41:39 krbtgt/[email protected]
renew until 06/30/22 14:41:39

4、CDH安装kerberos

4.1、在CDH集群开启kerberos
在这里插入图片描述
4.2、勾选全部
在这里插入图片描述
4.3、填写配置
在这里插入图片描述
kerberos安全领域 、KDC server主机、KDC Admin Server Host根据配置文件krb5.conf文件来。
在这里插入图片描述
4.5、填写主题名和密码
先要在kerberos上创建cloudera-scm/admin 主体
在这里插入图片描述
4.6、等待导入KDC
在这里插入图片描述
4.7、启用主体
在这里插入图片描述
4.8、准备重启集群
在这里插入图片描述
4.9、等待完成
在这里插入图片描述
4.10、查看主体
CHD自动生成一系列主体

 kadmin.local -q "list_principals"
Authenticating as principal cloudera-scm/[email protected] with password.
HTTP/[email protected]
HTTP/[email protected]
HTTP/[email protected]
K/[email protected]
admin/[email protected]
[email protected]
cloudera-scm/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hdfs/[email protected]
hive/[email protected]
hue/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
mapred/[email protected]
oozie/[email protected]
sentry/[email protected]
yarn/[email protected]
yarn/[email protected]
yarn/[email protected]
zookeeper/[email protected]
zookeeper/[email protected]
zookeeper/[email protected]

5、HDFS配置修改

5.1、进入hdfs配置页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、应用场景思考

场景一,针对hadoop/yarn Rest API 未授权漏洞,或者防止恶意访问和操作CDH集群。在CDH集群开启kerberos身份认证。
场景二,针对不同用户授权不同的服务权限,在CHD集群开启kerberos和sentry

8、遇到的坑

1) 由于虚拟机已经安装了低版本的krb5-lib包,所以先要卸载这个低版本的rpm包

2) kadm5.acl文件配置时 文件内容书写格式有要求com与*中间的间隔有要求,间隔太短了,文件内容不生效

*/[email protected]    *

3)kerberos用与客户端身份认证并没有涉及权限管理(如ACL),如果没有开启sentry服务,不要开启或修改HDFS权限相关设置。比如 HDFS配置文件中的dfs.permissions、管理员用户和授权用户

4)CDH安装kerberOS服务时,会自动生成一些主体,比如,hdfs/node1,yarn/node2,容易与数据库中已有的主体冲突,导致CDH开启kerberos服务报错。为了避免这种情况,尽量不要在CHD开启kerberos服务前建立不必要的主体。或者在CHD开启kerberos服务前,删除kerberos数据库,重新创建 数据库。

5)kerberos安装rpm包是相互依赖的,所以版本需要一致,且需要按照顺序安装。先安装krb-lib,再安装libkadm5,再安装krb-server,最后安装krb-workstation。

猜你喜欢

转载自blog.csdn.net/xfp1007907124/article/details/127984502