1. Kerberos是什么
Kerberos在古希腊神话中是指:一只有三个头的狗。这条狗守护在地狱之门外,防止活人闯入。
Kerberos是一个用于鉴定身份的协议,它采用对称密钥加密。
在我们的CDH平台中,常用来作为一种安全验证,只有经过kerberos认证后的用户才可以访问大数据集群的服务。
2.Kerberos中的一些概念
KDC(key distribution center): kerberos的认证中心,用来鉴别用户的身份的。想访问带kerberos的服务,得先过这个。
Principal: kerberos中账户的概念,用户会以这个账户来被KDC认证。
一个Principal由三个部分组成:primary, instance以及realm,其组成形式为primary/instance@realm。
primary : 可以是OS中的username,也可以是service name;
instance : 用于区分属于同一个user或者service的多个principals,该项为optional;
realm : 类似于DNS中的domain,定义了一组principals
举个栗子:hive/hive@ZHENDAO.COM kafka/kafka@ZHENDAO.COM
KeyTab: 以文件的形式呈现,存储了一个或多个Principal的长期的key,用途和密码类似,用于kerberos认证登录;
其存在的意义在于让用户不需要明文的存储密码,和程序交互时不需要人为交互来输入密码。

TGT: 用户使用principal在KDC中进行认证后,KDC会返回给客户一个TGT,TGT会有过期时间。

Ticket:用户访问具体Server时,KDC会进行一次加密操作,返回给用户一张对应server的门票。
3.Kerberos基本使用
- kerberos管理员创建一个principal, 并生成对应的keytab文件 → 注册一个kerberos的账号,并配置了免密登录
- 拿着keytab去KDC中进行账户的认证 → kinit -kt /var/lib/hive/hive.keytab hive/hive@ZHENDAO.COM
- KDC返回一个这个principal对应的TGT文件 → 默认存放在linux的 /tmp 目录下
- 客户拿着TGT去过带有kerberos的服务端APP
4.Kerberos认证原理
- 客户拿着principal去KDC中进行认证的时候,kerberos会检查其库中是否有对应的principal,如果有的话,返回一个TGT。
- 客户拿着TGT向带有kerberos的服务端app发起请求时,请求会先发到KDC。
- KDC会拿着客户的master key(客户密码的hash)和服务端的master key(比如说hive server的master key)进行加密操作,并返回给客户一个对应hive server的ticket。
- 客户拿着加密后的ticket,去请求hive服务的时候,hive会对ticket进行一个验证。验证通过即可访问hive
5.举个栗子:KAFKA认证过程
- kafka producer拿着principal向KDC认证身份,通过则拿到KDC返回的TGT <这是第一次认证,就好比在游乐园的门口,做一次验票操作>
- producer拿着TGT向KDC请求kafka的服务,KDC验证TGT,看该账号能不能使用kafka,如果可以使用,那么进行加密,并返回一个ticket给producer <这是第二次认证,就好比你想玩游乐园中的具体项目,得看看你买的门票有没有这个资格玩VIP项目>
- producer拿着ticket和kafka server尝试建立连接,kafka server会使用server的master key对ticket进行一次解密操作,来验证producer的身份,通过则建立连接 <玩上具体的项目了>