网络安全之访问控制
简介
同一分布式环境下,同一用户可能具有多个应用服务器的访问授权,同一应用服务器也有多个授权访问的用户,同一用户在一次事务中可能需要访问多个授权访问的应用服务器,应用服务器可能还需要对访问用户进行身份鉴别。为了实现这一情况下的访问控制过程,提出了Kerberos。
Kerberos是Hadoop用户和服务强身份鉴别和身份传播访问控制的基础。
Hadoop是一个开源框架,允许使用简单的编程模型在跨域计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器拓展到数千个机器,每个都提供本地计算和存储。
用户需要能够可靠地识别自己,然后在整个Hadoop集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互。除了用户之外,Hadoop集群资源本身(例如主机或服务)需要相互进行身份验证,以避免潜在威胁,而Kerberos刚好就是这样一种网络认证协议。
Kerberos身份鉴别和访问控制过程
总览
Kerberos将用户身份鉴别和用户访问权限鉴别分开了,所以在Kerberos中可分为四种角色:用户(客户端)C、鉴别服务器AS、票据授权服务器TGS和应用服务器V。使用鉴别服务器实现用户身份鉴别,使用票据授权服务器实现用户访问权限地鉴别。
作为鉴别结果地票据在规定时间内可以重复使用。因此,同一用户访问多个不同的应用服务器时,只需进行一次身份鉴别。同一个用户多次访问同一应用服务器时,也只需要进行一次访问权限鉴别。
当然也会对应用服务器进行鉴别,以防止黑客假冒,也就是说是属于三方鉴别过程。同时,还会减少负荷,提高性能。
其总过程如下图所示
用户身份鉴别过程
-
用户C发给鉴别服务器AS的身份鉴别请求中包含用户名IDc、票据授权服务器名IDtgs和这一次身份鉴别结果的有效时间TIMES1,在有效时间内,用户C可重复使用此次鉴定结果票据Ticket
tgs
。 -
鉴别服务器在收到此次请求后,通过用户名IDc对授权用户列表进行检索,检索到口令PWc后,会根据该口令推测出用户C和鉴别服务之间的共享密钥Kc。使用该共享密钥Kc加密数据包括动态生成的用户C和票据服务器TGS之间的会话密钥K
c,tgs
、身份鉴别有效时间TIMES1和票据服务器名IDtgc
。除此之外,还会根据用户发送的票据服务器名检索票据授权信息库找到鉴别服务器和票据服务器之间的共享密钥Kas,tgs
,并根据该密钥生成用户访问票据服务器的票据Tickettgs
,该票据用于证明用户C的身份是合规的。该票据中包含的数据包括动态生成的用户C和TGS之间的共享密钥Kc,tgs
、用户名C和有效时间。服务器会将上诉数据包括用户名IDc、Tickettgs
、用Kc
加密的数据发送。因为用户C自己是拥有口令PWc
的,所以能够根据它生成共享密钥Kc
,所以如果是用户C本人的话,就会用该密钥解密数据获取信息,而只要用户C能够解密数据包,那就证明了它的身份,同时也证明了服务器的身份。
获取访问应用服务器票据过程
-
而用户C拿到共享密钥K
c,tgs
后会用它生成鉴别信息AUTHc1
,鉴别信息里包括的信息有用户名C和时间戳TS1,该时间戳用于证明该鉴别信息是否在票据Tickettgs
有效时间段内发送。然后用户C会向票据授权服务器发送访问权限鉴别请求,其内容包括应用服务器名IDv、此次权限访问有效时间TIMES2、用户票据Tickettgs
和鉴别信息AUTHc1
。 -
在票据服务器TGS收到该访问权限鉴别请求时,会用鉴别服务器AS和票据授权服务器TGS的共享密钥K
as,tgs
先解密票据Tickettgs
数据,证明用户C确实通过了身份鉴别,并取得该票据授权服务器TGS和用户C之间的共享密钥。然后再用共享密钥解密数据AUTHc1
,证明该请求确实是用户C发来的,并且对照时间戳,确定在有效时间内,用于防止重放攻击。然后票据授权服务器会生成用户C用于访问应用服务器V的票据Ticketv
,用于证明用户C有资格访问该应用服务器。该票据在票据授权服务根据应用服务器IDv
查询到的共享密钥Ktgs,v
加密以下数据得到,包括动态生成的C和V之间的共享密钥Kc,v
、用户名IDc
和有效时间TIMES2。同样,为了用户能够得到该共享密钥,TGS会用它与用户C之间的共享密钥Kc,tgs
加密该共享密钥Kc,v
和其他一些字段值。服务器会将上诉用户名IDc、Ticketv和用Kc,tgs
加密过的一些数据发送给用户C。
访问应用服务器过程
-
用户C收到票据授权服务器发送的响应后,会用共享密钥K
c,tgs
解密得到用户C跟应用服务器V的共享密钥Kc,v
,并用该密钥制作鉴别消息AUTHc2
。在该鉴别消息中,除了证明用户C具有访问权限外,假如说想要后续对跟应用服务器交换的数据进行加密的话,就可以设置子密钥Subkey和用与防重放的Seq。用户C会将票据Ticketv
和鉴别消息AUTHc2
作为访问请求一并发给应用服务器V -
应用服务器收到的Ticket
v
证实用户C拥有访问权限,收到鉴别消息AUTHc2
则证明确实是用户C本人发来的请求。在应用服务器的返回的响应中,用共享密钥Kc,v
加密数据,证明确实应用服务V本V,并在消息中对子密钥Subkey和序号Seq作出约定,并给出时间戳TS2。