`

Hadoop Kerberos安全机制 委托令牌

 
阅读更多

Hadoop 安全问题:

        早起版本的HDFS和HADOOP集群运行在安全环境中,由一组相互合作的用户所操作,因而访问控制措施的目标是防止偶然的数据丢失,而非阻止非授权的数据访问。

例如,HDFS中的文件许可模块回阻止用户由于程序漏洞而毁坏整个文件系统,也会阻止运行不小心输入的hadoop  fs  -rmr  /指令,但却无法阻止某个恶意用户假冒root身份,来访问或删除集群中的某些数据。

 

从安全角度分析,Hadoop缺乏一个安全的认证机制,以确保正在操作集群的用户恰是所声称的安全用户。

 

雅虎公司在2009年遇到了该难题,因此组织了一个工程师团队来实现Hadoop的安全认证:用Kerberos(一个成熟的开源网络认证协议)。

 

Kerberos工作原理介绍

 基本概念

Princal(安全个体):被认证的个体,有一个名字和口令

KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥

Ticket:一个记录,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。

AS (Authentication Server): 认证服务器

TSG(Ticket Granting Server): 许可证服务器

  kerberos 工作原理

  Kerberos协议

Kerberos可以分为两个部分:

  • Client向KDC发送自己的身份信息,KDC从Ticket Granting Service得到TGT(ticket-granting ticket), 并用协议开始前Client与KDC之间的密钥将TGT加密回复给Client。此时只有真正的Client才能利用它与KDC之间的密钥将加密后的TGT解密,从而获得TGT。(此过程避免了Client直接向KDC发送密码,以求通过验证的不安全方式)
  • Client利用之前获得的TGT向KDC请求其他Service的Ticket,从而通过其他Service的身份鉴别

 Kerberos认证过程

Kerberos协议的重点在于第二部分(即认证过程):

(1)Client将之前获得TGT和要请求的服务信息(服务名等)发送给KDC,KDC中的Ticket Granting Service将为Client和Service之间生成一个Session Key用于Service对Client的身份鉴别。然后KDC将这个Session Key和用户名,用户地址(IP),服务名,有效期, 时间戳一起包装成一个Ticket(这些信息最终用于Service对Client的身份鉴别)发送给Service, 不过Kerberos协议并没有直接将Ticket发送给Service,而是通过Client转发给Service,所以有了第二步。

(2)此时KDC将刚才的Ticket转发给Client。由于这个Ticket是要给Service的,不能让Client看到,所以KDC用协议开始前KDC与Service之间的密钥将Ticket加密后再发送给Client。同时为了让Client和Service之间共享那个密钥(KDC在第一步为它们创建的Session Key),KDC用Client与它之间的密钥将Session Key加密随加密的Ticket一起返回给Client。

(3)为了完成Ticket的传递,Client将刚才收到的Ticket转发到Service. 由于Client不知道KDC与Service之间的密钥,所以它无法算改Ticket中的信息。同时Client将收到的Session Key解密出来,然后将自己的用户名,用户地址(IP)打包成Authenticator用Session Key加密也发送给Service。

(4)Service 收到Ticket后利用它与KDC之间的密钥将Ticket中的信息解密出来,从而获得Session Key和用户名,用户地址(IP),服务名,有效期。然后再用Session Key将Authenticator解密从而获得用户名,用户地址(IP)将其与之前Ticket中解密出来的用户名,用户地址(IP)做比较从而验证Client的身份。

(5)如果Service有返回结果,将其返回给Client。

  kerberos在Hadoop上的应用

Hadoop集群内部使用Kerberos进行认证

具体的执行过程可以举例如下:

  使用kerberos进行验证的原因

  • 可靠 Hadoop 本身并没有认证功能和创建用户组功能,使用依靠外围的认证系统
  • 高效 Kerberos使用对称钥匙操作,比SSL的公共密钥快
  • 操作简单 用户可以方便进行操作,不需要很复杂的指令。比如废除一个用户只需要从Kerbores的KDC数据库中删除即可。

 

参考文档:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics