网络安全之访问控制

server/2024/11/29 10:45:55/

简介

同一分布式环境下,同一用户可能具有多个应用服务器的访问授权,同一应用服务器也有多个授权访问的用户,同一用户在一次事务中可能需要访问多个授权访问的应用服务器,应用服务器可能还需要对访问用户进行身份鉴别。为了实现这一情况下的访问控制过程,提出了Kerberos

Kerberos是Hadoop用户和服务强身份鉴别和身份传播访问控制的基础。

Hadoop是一个开源框架,允许使用简单的编程模型在跨域计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器拓展到数千个机器,每个都提供本地计算和存储。

用户需要能够可靠地识别自己,然后在整个Hadoop集群中传播该身份。完成此操作后,这些用户可以访问资源(例如文件或目录)或与集群交互。除了用户之外,Hadoop集群资源本身(例如主机或服务)需要相互进行身份验证,以避免潜在威胁,而Kerberos刚好就是这样一种网络认证协议。

Kerberos身份鉴别和访问控制过程

总览

Kerberos将用户身份鉴别和用户访问权限鉴别分开了,所以在Kerberos中可分为四种角色:用户(客户端)C鉴别服务器AS票据授权服务器TGS应用服务器V。使用鉴别服务器实现用户身份鉴别,使用票据授权服务器实现用户访问权限地鉴别。

作为鉴别结果地票据在规定时间内可以重复使用。因此,同一用户访问多个不同的应用服务器时,只需进行一次身份鉴别。同一个用户多次访问同一应用服务器时,也只需要进行一次访问权限鉴别。

当然也会对应用服务器进行鉴别,以防止黑客假冒,也就是说是属于三方鉴别过程。同时,还会减少负荷,提高性能。

其总过程如下图所示

用户身份鉴别过程

  • 用户C发给鉴别服务器AS的身份鉴别请求中包含用户名IDc票据授权服务器名IDtgs和这一次身份鉴别结果的有效时间TIMES1,在有效时间内,用户C可重复使用此次鉴定结果票据Tickettgs

  • 鉴别服务器在收到此次请求后,通过用户名IDc对授权用户列表进行检索,检索到口令PWc后,会根据该口令推测出用户C和鉴别服务之间的共享密钥Kc。使用该共享密钥Kc加密数据包括动态生成的用户C和票据服务器TGS之间的会话密钥Kc,tgs身份鉴别有效时间TIMES1票据服务器名IDtgc。除此之外,还会根据用户发送的票据服务器名检索票据授权信息库找到鉴别服务器和票据服务器之间的共享密钥Kas,tgs,并根据该密钥生成用户访问票据服务器的票据Tickettgs,该票据用于证明用户C的身份是合规的。该票据中包含的数据包括动态生成的用户C和TGS之间的共享密钥Kc,tgs、用户名C和有效时间。服务器会将上诉数据包括用户名IDcTickettgs用Kc加密的数据发送。因为用户C自己是拥有口令PWc的,所以能够根据它生成共享密钥Kc,所以如果是用户C本人的话,就会用该密钥解密数据获取信息,而只要用户C能够解密数据包,那就证明了它的身份,同时也证明了服务器的身份。

获取访问应用服务器票据过程

  • 而用户C拿到共享密钥Kc,tgs后会用它生成鉴别信息AUTHc1,鉴别信息里包括的信息有用户名C时间戳TS1,该时间戳用于证明该鉴别信息是否在票据Tickettgs有效时间段内发送。然后用户C会向票据授权服务器发送访问权限鉴别请求,其内容包括应用服务器名IDv、此次权限访问有效时间TIMES2用户票据Tickettgs鉴别信息AUTHc1

  • 在票据服务器TGS收到该访问权限鉴别请求时,会用鉴别服务器AS和票据授权服务器TGS的共享密钥Kas,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和其他一些字段值。服务器会将上诉用户名IDcTicketv用Kc,tgs加密过的一些数据发送给用户C。

访问应用服务器过程

  • 用户C收到票据授权服务器发送的响应后,会用共享密钥Kc,tgs解密得到用户C跟应用服务器V的共享密钥Kc,v,并用该密钥制作鉴别消息AUTHc2。在该鉴别消息中,除了证明用户C具有访问权限外,假如说想要后续对跟应用服务器交换的数据进行加密的话,就可以设置子密钥Subkey和用与防重放的Seq。用户C会将票据Ticketv鉴别消息AUTHc2作为访问请求一并发给应用服务器V

  • 应用服务器收到的Ticketv证实用户C拥有访问权限,收到鉴别消息AUTHc2则证明确实是用户C本人发来的请求。在应用服务器的返回的响应中,用共享密钥Kc,v加密数据,证明确实应用服务V本V,并在消息中对子密钥Subkey和序号Seq作出约定,并给出时间戳TS2。


http://www.ppmy.cn/server/145888.html

相关文章

【Kubernetes 集群核心概念:Pod】pod生命周期介绍【五】

5.1 Pod生命周期 Pod的生命周期指的是从Pod创建到终止的整个过程。它分为以下两种常见情况: 长期运行Pod: 例如运行HTTP服务的Pod,它在正常情况下会一直运行,但可以手动删除或终止。短期运行Pod: 例如执行计算任务的…

【go】查询某个依赖是否存在于这个代理

1. 使用 go list 命令 go list -m -versions github.com/gin-gonic/gin 如果模块存在,该命令会返回模块及其可用版本: github.com/gin-gonic/gin v1.7.0 v1.7.1 v1.8.0如果模块不存在或无法找到,会返回错误。 2. 使用 curl 查询代理服务 …

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐,生成mp3文件的时候需要等待,需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

学习使用jquery实现在指定div前面增加内容

学习使用jquery实现在指定div前面增加内容 设计思路代码示例 设计思路 选择要添加内容的指定元素‌: 使用jQuery选择器来选择你希望在其前添加内容的元素。例如,如果你有一个 元素,其ID为qipa250,你可以使用$(‘#qipa250’)来选择…

如何使用 Jenkins 集成 Docker 以实现自动化 CI/CD 流程

Jenkins 是一个开源的自动化服务器,通常用于构建和测试软件项目,从而实现持续集成和持续部署。而 Docker 是一种容器技术,用于提供轻量级的虚拟化环境。结合 Jenkins 和 Docker,可以让开发团队更有效地管理应用程序的构建和发布。…

JDK的版本演化,JDK要收费吗?

Java版本演化历史 Java的版本历史可以追溯到1995年,以下是Java语言自诞生以来的主要版本及其关键特性: 一、早期版本 Java 1.0(1996年1月发布) 引入了Java虚拟机(JVM)和Java应用编程接口(API&…

【Docker项目实战】使用Docker部署Enclosed文件分享工具

【Docker项目实战】使用Docker部署Enclosed文件分享工具 一、Enclosed介绍1.1 Enclosed 简介1.2 主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Enclosed镜像五、部署…

C++设计模式——Abstract Factory Pattern抽象工厂模式

一、抽象工厂模式的定义 抽象工厂模式是一种创建型设计模式,它提供了一种将相关/依赖对象组合在一起创建的方式,而无需指定它们的具体类。 抽象工厂模式与工厂方法模式的区别: 工厂方法模式将对象的创建过程延迟到子类中,允许用…