当前位置:网站首页>CDH6.3.2之Kerberos安全认证_大数据培训
CDH6.3.2之Kerberos安全认证_大数据培训
2022-08-10 17:19:00 【尚硅谷铁粉】
Kerberos简介
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。
本篇就介绍如何在CDH集群中开启Kerberos安全认证,让Kerberos为集群数据安全保驾护航。
Kerberos认证原理
1.基本概概念
KDC:Key Distribute Center,密钥分发中心,其中包含认证服务器,票证授权服务器,和数据库
AS:AuthenticationServer,认证服务器
TGS:TicketGranting Server,票证授权服务器
TGT:Ticket Granting Ticket1票证授予票证
Principal:主体,用于在kerberos加密系统中标记一个唯一的身份。主体可以是用户(如zhangsan)或服务(如namenode或hive)。
2.认证流程
(1)客户端执行kinit命令,输入Principal及Password,向AS证明身份,并请求获取TGT。
(2)AS检查Database中是否存有客户端输入的Principal,如有则向客户端返回TGT。
(3)客户端获取TGT后,向TGS请求ServerTicket。
(4)TGS收到请求,检查Database中是否存有客户端所请求服务的Principal,如有则向客户端返回ServerTicket。
(5)客户端收到ServerTicket,则向目标服务发起请求。
(6)目标服务收到请求,响应客户端。
Kerberos部署
1.安装Kerberos相关服务
选择集群中的一台主机(hadoop102.example.com)作为Kerberos服务端,安装KDC,所有主机都需要部署Kerberos客户端。
服务端主机执行以下安装命令
yum install -y krb5-server krb5-workstation krb5-libs
客户端主机执行以下安装命令
yum install -y krb5-workstation krb5-libs
2.修改配置文件
(1)服务端主机(hadoop102.example.com)
修改
/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
max_life = 1d
max_renewable_life = 7d
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
}
(2)客户端主机(所有主机)
修改/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 = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = EXAMPLE.COM
#default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit = 1
[realms]
EXAMPLE.COM = {
kdc = hadoop102.example.com
admin_server = hadoop102.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
3.初始化KDC数据库
在服务端主机(hadoop102.example.com)执行以下命令
kdb5_utilcreate -s
4.修改管理员权限配置文件
在服务端主机(hadoop102.example.com)修改
/var/kerberos/krb5kdc/kadm5.acl文件,内容如下
*/[email protected] *
5.启动Kerberos相关服务
启动KDC
systemctl start krb5kdc
启动Kadmin,该服务为KDC数据库访问入口
systemctl start kadmin
CDH集群启用Kerberos
1.为CM创建Kerberos管理员主体
kadmin.local -q "addprinc cloudera-scm/admin"
2.启用Kerberos
3.环境确认(勾选全部)
4.填写KDC配置
5.继续
6.填写主体名和密码
7.等待导入KDC
8.重启集群
9.完毕
Kerberos安全环境使用
在集群启用Kerberos之后,用户访问各服务都需要先通过Kerberos认证。下面通过访问HFDS,Hive演示具体操作方式。
1.为用户向Kerberos注册账号(Principal)
在Kerberos服务端主机(hadoop102.example.com)执行以下命令,并输入密码,完成注册
kadmin.local -q "addprinc hdfs/[email protected]"
2.用户认证,执行以下命令,并输入密码,完成认证
kinit hdfs/[email protected]
查看当前认证状态
$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs/[email protected]
Valid starting Expires Service principal
11/05/2020 14:29:23 11/06/2020 14:29:23 krbtgt/[email protected]
renew until 11/12/2020 14:29:23
注:如需在非交互环境认证,例如在代码中认证,则可通过以下命令生成密钥文件,在代码中指定密钥文件路径即可。需要注意的是,生成密钥文件之后,密码随之失效。
kadmin.local -q "xst -k /path/to/your/keytab/admin.keytab hdfs/[email protected]"
3.访问HDFS
认证前
$ hadoop fs -ls /
20/11/05 14:28:28 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
ls: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "hadoop102.example.com/172.26.131.1"; destination host is: "hadoop102.example.com":8020;
认证后
$ hadoop fs -ls /
Found 2 items
drwxrwxrwt - hdfs supergroup 0 2020-11-02 15:52 /tmp
drwxr-xr-x - hdfs supergroup 0 2020-11-03 09:23 /user
4.访问Hive
(1)hive客户端
认证前
$ hive
Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "hadoop102.example.com/172.26.131.1"; destination host is: "hadoop102.example.com":8020;
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:604)
at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:545)
认证后
$ hive
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive>
(2)beeline客户端
注:开启Kerberos之后,jdbc的url需增加hiveserver2的principal信息,如下
认证前
$ beeline -u " jdbc:hive2://hadoop102.example.com:10000/;principal=hive/[email protected]"
Connecting to jdbc:hive2://hadoop102.example.com:10000/;principal=hive/[email protected]
20/11/05 14:42:57 [main]: ERROR transport.TSaslTransport: SASL negotiation failure
javax.security.sasl.SaslException: GSS initiate failed
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211) ~[?:1.8.0_181]
认证后
$ beeline -u " jdbc:hive2://hadoop102.example.com:10000/;principal=hive/[email protected]"
Connecting to jdbc:hive2://hadoop102.example.com:10000/;principal=hive/[email protected]
Connected to: Apache Hive (version 2.1.1-cdh6.3.2)
Driver: Hive JDBC (version 2.1.1-cdh6.3.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.1.1-cdh6.3.2 by Apache Hive
0: jdbc:hive2://hadoop102.example.com:10000/>
边栏推荐
猜你喜欢
- [email protected] 7.6"/>
Oracle Install [email protected] 7.6
训练一个神经网络要多久,神经网络训练时间过长
ahx文件转mav文件 工具分享及说明
HDLBits: 在线学习 SystemVerilog(零)-在线“巡礼” HDLBits
重庆新壹汽与一汽集团达成新能源项目战略合作,赋能“碳中和”创造“碳财富”
ARM开发(三)ARM寻址方式,异常中断,异常向量表
自动化测试 RobotFramework安装以及使用教程
神经网络如何提高准确率,神经网络的求解方式
挑战用五行代码轻松集成登录系统,实现单点登录
Alluxio on Amazon EMR 集成实践
随机推荐
R语言创建列表数据(list):根据名称索引列表元素、双方括号访问单个元素、单方括号访问子列表
全新接口——邻家好货 API
挑战用五行代码轻松集成登录系统,实现单点登录
【QT VS项目名称修改】
promise笔记(四)
leetcode:159.最多有两个不同字符的最长子串
mysql包select结果无法同步的问题
Return the next higher prime number
浅析端口扫描原理
自动化测试 RobotFramework安装以及使用教程
等保2.0一个中心三重防护指的是什么?如何理解?
leetcode:1137. 第 N 个泰波那契数
leetcode:340.至多包含K个不同字符的最长子串
BalsnCTF2021
【独立站运营】做社交媒体营销的两大关键点
Quicker+沙拉查词使用
Talk about cloud native data platform
神经网络如何提高准确率,神经网络的求解方式
v-bind指令:设置元素的属性
docker中安装mysql