Kerberos 深入详解:原理、认证流程与应用场景

目录

  • 什么是 Kerberos
  • Kerberos 原理解析
  • Kerberos 认证完整流程
  • Kerberos 应用场景
  • 常见问题与最佳实践
  • 参考资料

什么是 Kerberos

Kerberos 是一种广泛应用于计算机网络中的身份认证协议,它基于对称密钥加密思想,核心目标是在不安全的网络中实现安全的身份验证。
Kerberos 由麻省理工学院(MIT)发明,广泛用于企业局域网、云服务、大数据平台等多种场合。

Kerberos 原理解析

Kerberos 通过 可信第三方(KDC) 实现身份认证,全程不会在网络上传输明文密码。其核心优势体现在:

  • 基于对称密钥加密(如 AES,DES)
  • 身份认证 & 授权票据分离
  • 引入时间戳防止重放攻击
  • 支持单点登录(SSO)

主要组件说明

角色说明
用户/客户端需要登录和访问服务的用户/主机
服务端提供资源的服务器,如 HTTP、HDFS、邮箱等
认证服务器(AS)验证用户身份,分发初始票据 TGT(Ticket Granting Ticket)
票据授权服务器(TGS)分发服务访问票据(Service Ticket)
KDC密钥发布中心,包括 AS 和 TGS

Kerberos 认证完整流程

1. 用户认证(AS 阶段)
  • 客户端向 AS 发送用户名
  • AS 查询数据库,返回:
    • 票据授权票(TGT,KDC 私钥加密,只有 TGS 能解)
    • 会话密钥(用用户密码加密,只有用户能解开)
2. 获取服务票据(TGS 阶段)
  • 客户端用解开的 Session Key 生成Authenticator(含时间戳)
  • 用 TGT + Authenticator 申请服务票据
  • TGS 校验,返回:
    • 服务票据(Service Ticket,服务端密钥加密,只能服务端解开)
    • 新会话密钥(用户和服务端通信用)
3. 服务访问(服务端阶段)
  • 客户端向服务端提交 Service Ticket + Authenticator
  • 服务端用自己的密钥解开 Service Ticket,校验 Authenticator
  • 双向认证可选:服务端用新的 Session Key 返回带时间戳的数据,证明身份

时序交互图

用户/客户端 认证服务器(AS) 授权票据服务器(TGS) 服务端 1. 提交用户名,请求TGT 2. 返回加密TGT和session key 3. 用TGT和Authenticator请求服务票据 4. 返回服务票据和服务Session Key 5. 用服务票据和Authenticator访问服务 6. 可选:认证通过(双向认证) 用户/客户端 认证服务器(AS) 授权票据服务器(TGS) 服务端

安全机制说明:
密码只在本地使用,从未通过网络传输;会话密钥和票据时效性控制,结合时间戳阻止重放攻击。


Kerberos 应用场景

场景说明
企业统一认证Window 域登录、Linux 集成认证
大数据平台安全Hadoop、Hive、Spark 集群
邮件/文件/数据库服务MS Exchange、FTP、PostgreSQL等服务认证
单点登录(SSO)Web站点、OA等内部资源
校园/科研集群多终端共享账户,实现安全统一登录

Kerberos 案例详解:在 Hadoop/HDFS 中实现 Kerberos 认证

案例背景

某企业拥有一套 Hadoop 集群,为提升数据安全性,决定集成 Kerberos 实现集群级的统一认证和权限控制。

目标:

  • 所有客户端与 HDFS 通信时,必须经过 Kerberos 认证。
  • 无 Kerberos 票据则无法访问集群数据。

1. 各组件角色与分布

  • KDC(Key Distribution Center)

    • 认证服务器/票据服务器。所有集群主机都“信任”KDC
    • 包含 AS(Authentication Service)和 TGS(Ticket Granting Service)
  • 客户端(Client)用户主机

    • 运行 Hadoop 命令的终端,比如你自己的笔记本、堡垒机或业务应用服务器
  • Hadoop 集群中的主机节点

    • NameNode:管理 HDFS 元数据
    • DataNode:存储具体文件块
    • 每台节点都需配置属于自己的服务 Principal 和 keytab

2. Hadoop Kerberos 认证分层系统架构

Hadoop 集群
Kerberos 认证中心(KDC服务器)
[1] 用户kinit:请求TGT
[2] 返回TGT和会话密钥
[3] 用户用TGT请求服务票据
[4] 返回HDFS服务票据
[5] 携服务票据请求NameNode
[6] 校验通过,授权/返回数据
[7] 携服务票据请求DataNode
[8] 校验、返回数据块
数据同步/心跳
数据同步/心跳
配置hadoop conf
配置hadoop conf
配置hadoop conf
NameNode
(元数据服务)
DataNode1
DataNode2
AS
认证服务
TGS
票据授权服务
客户端(用户终端)

流程解读

  1. [1] 客户端用 kinit 先向 KDC-认证服务(AS)请求 TGT(认证票据)。
  2. [2] AS 返回加密的 TGT 和用于本次会话的密钥。
  3. [3] 客户端用 TGT 向 KDC-票据授权服务(TGS)请求目标服务(如 HDFS)的服务票据。
  4. [4] TGS 返回目标服务(如 NameNode/DataNode)的服务票据。
  5. [5] 客户端带着服务票据去访问 NameNode。
  6. [6] NameNode 验证服务票据,授权并返回数据。
  7. [7】【8] 访问 DataNode 时,流程类似(用服务票据请求,DataNode 验证,返回数据块)。
  • 所有票据都必须向 KDC 申请,任何服务端只认可 KDC 票据。
  • 带序号顺序后,整个系统认证-授权的“闭环”流程清晰可见。

3. 架构分层与关系解释

  • 认证信任链条:

    • KDC 是唯一分发有效认证票据的“根信任”,所有 Hadoop 服务节点(NameNode/DataNode)都以 keytab 文件方式完成与 KDC 的私钥验证。
    • 用户要访问 HDFS 资源,必须先向 KDC 认证拿到“TGT”和“服务票据”,服务端凭票据判断请求者身份。
  • 数据访问路径:

    1. 用户(Client)本地执行 kinit 身份认证,拿 TGT(临时凭证)。
    2. 再用 TGT 向 KDC 申请“目标服务(如 hdfs/hadoop01.example.com)”的访问票据。
    3. 拿到服务票据后,访问 NameNode 或 DataNode;每次访问时都携带服务票据及认证信息在网络上传递。
    4. NameNode/DataNode 用自有 keytab 解密服务票据,成功即认可客户端“身份”,授权 HDFS 操作。
  • 高可用与安全性说明:

    • 每个服务节点均需自己独立的 principal(如 hdfs/hadoop01.example.com)、专用 keytab。
    • KDC 推荐主备容灾,防单点故障。
    • 所有 ticket/keytab 不能暴露在不安全环境,否则会被伪造身份。

4. 结构图小结一览

模块主要作用持有密钥/票据备注
KDC(AS/TGS)身份认证&签发票据用户密码、服务密钥单点容灾建议、重点保护
NameNodeHDFS元数据管控服务服务 keytab、服务票据
DataNode负责数据块存储服务 keytab、服务票据
客户端数据访问发起方用户票据TGT、服务票据在有效期内免密通行

5. 业务流程口语化图例
  • 用户终端向 KDC 认证,获得通行证(TGT)
  • 用户向 KDC 请求具体目标服务的访问门票(Service Ticket)
  • 拿着门票找 NameNode/DataNode,换来访问数据的许可
  • NameNode/DataNode 校验门票和持有人身份,同意/拒绝请求

这个架构分类清楚展示:Kerberos 只是安全认证的“守门人”和“裁判”,所有 Hadoop 节点及用户都要统一接受它的“监督”,最后凭“票据”通行。

安装部署

步骤一:Kerberos 环境准备

  1. 部署 Kerberos 服务
    • 通常使用 MIT Kerberos,部署 KDC(含 AS 和 TGS)。
  2. 添加 Hadoop 服务主体
    sudo kadmin.local -q "addprinc -randkey hdfs/hadoop01.example.com@EXAMPLE.COM"
    
  3. 生成服务 Keytab 文件,分发给 NameNode 和 DataNode
    sudo kadmin.local -q "xst -k /etc/security/keytabs/hdfs.keytab hdfs/hadoop01.example.com@EXAMPLE.COM"
    # 拷贝 hdfs.keytab 到 HDFS 各主机相应目录
    

步骤二:客户端配置

  1. Hadoop core-site.xml 配置 Kerberos 认证

    <property><name>hadoop.security.authentication</name><value>kerberos</value>
    </property>
    <property><name>hadoop.security.authorization</name><value>true</value>
    </property>
    
  2. HDFS-site.xml 配置 NameNode/DataNode 服务 principal

    <property><name>dfs.namenode.kerberos.principal</name><value>hdfs/_HOST@EXAMPLE.COM</value>
    </property>
    <property><name>dfs.namenode.keytab.file</name><value>/etc/security/keytabs/hdfs.keytab</value>
    </property>
    <property><name>dfs.datanode.kerberos.principal</name><value>hdfs/_HOST@EXAMPLE.COM</value>
    </property>
    <property><name>dfs.datanode.keytab.file</name><value>/etc/security/keytabs/hdfs.keytab</value>
    </property>
    
  3. 用户获取认证票据

    kinit hadoopuser@EXAMPLE.COM
    # 会提示输入密码,成功后获得 Kerberos 票据
    
  4. 查看已获取票据

    klist
    

步骤三:Kerberos 认证流程场景操作

1. 客户端登录
  • 用户在客户端执行 kinit,输入密码,获取 TGT 票据。
2. 客户端访问 HDFS
  • 用户执行 hdfs dfs -ls /
  • Hadoop 客户端自动拿 TGT 向 KDC/TGS 请求 NameNode 服务票据;
  • 获得服务票据后,发给 NameNode 完成认证。
3. NameNode 服务端认证
  • NameNode 使用自己的 keytab 解密服务票据
  • 验证 Authenticator,产生一次性 session key
4. 权限校验和文件列表展示
  • 校验通过后,HDFS 返回 / 目录内容;
  • 票据时效内,多次操作无需重复输入密码。

过程可视化时序图
客户端(用户) KDC (AS/TGS) NameNode kinit (用户名/密码) 请求 TGT 返回 TGT 和 Session Key TGT + Authenticator,申请 NameNode 服务票据 返回 NameNode 服务票据 提交服务票据和 Authenticator 验证成功,返回文件列表内容 客户端(用户) KDC (AS/TGS) NameNode

常见问题与解决
  1. kinit 验证失败
    • 检查时间同步(确保 NTP),密码正确,KDC 主机可达。
  2. 未配置 keytab 或 principal 错误
    • 核对 hdfs.keytab 文件及 principal 设置一致。
  3. HDFS 访问提示没有票据
    • 重新运行 kinit 获取新票据,或确认票据未超时。
  4. 服务端报错无法认证
    • 确认服务端 keytab 权限和路径、Kerberos 域名解析一致。

全流程小结
  • 认证通过的用户和服务允许操作 Hadoop 文件系统;
  • 网络不传递明文密码,极大提升数据安全;
  • 多服务/多用户统一权限认证,实现真正的企业级安全管控。

最佳实践
  • 部署 NTP 实现时间自动同步
  • KDC 配置主从容灾/冗余
  • 设定票据较短有效期,定期轮换密钥
  • 服务权限配置最小化
  • keytab 文件妥善保管、定期刷新
  • 重要服务建议启用双向认证

参考资料
  • Kerberos 介绍(维基百科)
  • MIT Kerberos 官方文档
  • Hadoop 集群安全:Kerberos 集成
  • 微软 Kerberos 认证机制介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86972.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac安装node 实测可行

进入nodejs官网&#xff0c;选择mac,选择安装方式&#xff0c;选择版本即可获得安装命令 直接执行即可 具体脚本 # Download and install nvm: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash# in lieu of restarting the shell \. "…

山石网科谈平凡对话中的咒语——提示词注入攻击与防御

现场 2026 年 4 月 25 日上午&#xff0c;A市 初春的街道&#xff0c;阳光普照&#xff0c;鸟语花香&#xff0c;V 君中午要与一个重要的客户见面&#xff0c; 特意预约了人气正旺的星际咖啡馆&#xff0c;他家主打未来科幻风&#xff0c;之前去过几次&#xff0c; 服务周到、…

SpringMVC系列(五)(响应实验以及Restful架构风格(上))

0 引言 作者正在学习SpringMVC相关内容&#xff0c;学到了一些知识&#xff0c;希望分享给需要短时间想要了解SpringMVC的读者朋友们&#xff0c;想用通俗的语言讲述其中的知识&#xff0c;希望与诸位共勉&#xff0c;共同进步&#xff01; 本系列会持续更新&#xff01;&…

Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数

在 Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数&#xff0c;可以通过临时修改或永久修改两种方式实现。以下是具体操作步骤&#xff1a; 一、临时修改&#xff08;无需重启服务&#xff0c;但重启后失效&#xff09; ‌通过命令行动态设置‌ 打开命令提示符&#xf…

Python 中切换镜像源

在 Python 中切换镜像源主要涉及 pip 包管理器 和 conda 环境&#xff08;如 Anaconda、Miniconda&#xff09; 的配置。国内访问 Python 官方源&#xff08;PyPI&#xff09;可能较慢&#xff0c;因此推荐使用国内镜像源&#xff08;如阿里云、清华大学、豆瓣等&#xff09;。…

深入解析拓扑排序算法:从原理到C++实现

一、拓扑排序概述 拓扑排序(Topological Sorting)是对有向无环图(Directed Acyclic Graph&#xff0c;简称DAG)的顶点进行排序&#xff0c;得到一个线性序列&#xff0c;使得对于图中的任意一对顶点u和v&#xff0c;若存在一条从u到v的路径&#xff0c;则u在排序结果中出现在v…

图像质量对比感悟

具体任务&#xff1a; 在本次任务中&#xff0c;我需要对比两张1080p的yuv图片的清晰度&#xff0c;那么如何判断呢&#xff1f;主要是进行了主观判断和客观psnr的判断。 psnr解释&#xff1a; 定义&#xff1a; PSNR 用于衡量 两幅图像之间的差异&#xff08;通常是原始图像和…

机器学习(ML)-Scikit-Learn--快速入门

专栏:机器学习 个人主页:云端筑梦狮 一.数据集读取方法&#xff08;常用功能用熟即可不用背下来&#xff09; 以例子代表需要的知识点和方法。 1. 导入必要的库 from sklearn.datasets import load_iris import numpy as npload_iris()&#xff1a;用于加载鸢尾花数据集的…

SQL语句四大分类详解:DDL、DML、DQL、DCL

前言 SQL&#xff08;Structured Query Language&#xff09;是用于管理和操作关系型数据库的标准语言。无论是开发人员还是数据库管理员&#xff0c;掌握 SQL 是必不可少的技能。 SQL 根据功能的不同&#xff0c;通常被划分为 四大类&#xff1a; ✅ DDL&#xff08;数据定义…

如何将Word里每页的行数设置成50行

https://www.zhihu.com/question/357856175 本文来自知乎林听晴 第一步&#xff1a;新建一个Word文档 打开“页面布局”&#xff0c;之后点击图片圈起来的小图标&#xff0c;即可出现“页面设置”页面。 ​ ​ 路径&#xff1a;页面设置—文档网络&#xff0c;可以看到默认行…

纯前端本地文件管理器(VSCode风格)(浏览器对本地文件增删改查)

纯前端本地文件管理器&#xff08;VSCode风格&#xff09;(浏览器对本地文件增删改查) 简介 本项目为一个纯前端实现的本地文件管理器网页&#xff08;index.html&#xff09;&#xff0c;可在 Chrome/Edge 浏览器中直接打开&#xff0c;具备类似 VSCode 的本地文件夹操作体验…

windows安装wsl、Ubuntu、docker desktop

以下是Windows安装WSL&#xff08;Windows Subsystem for Linux&#xff09;及在Ubuntu中配置使用Docker的完整流程&#xff0c;整合了最新官方方案和常见问题解决方案&#xff1a; &#x1f527; 一、Windows安装WSL&#xff08;推荐WSL 2&#xff09; &#x1f4cd; 安装前提…

华为云Flexus+DeepSeek征文|云端智能加持:华为云ModelArts Studio提升Chat2DB的AI数据库管理效能

华为云FlexusDeepSeek征文&#xff5c;云端智能加持&#xff1a;华为云ModelArts Studio提升Chat2DB的AI数据库管理效能 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架…

微信小程序封装loading 修改

1. custom-loading.vue <template><view v-if"visible" class"custom-loading-mask" touchmove.stop.prevent><view class"custom-loading-container"><!-- 动态点点 --><text class"loading-text">{…

Windows环境下Docker容器化的安装与设置指南

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; 系统要求与准备工作 在开始安装和配置 Docker 之前&#xff0c;需要确保您的 Windows 系统满足以下要求&#xff1a; 操作系统版本&#xff1a;推荐使用 Windows 10 或更高版本&#xff0c;特别是 64 位版本。对…

0 数学习题本

零 引言 数学错题与好题总结 一 基础阶段 1 高数部分 习题册:武忠祥 660 1️⃣ 函数 极限 连续 2️⃣ 一元微分 3️⃣ 一元积分 4️⃣ 微分方程 5️⃣ 多元微分 6️⃣ 二重积分 7️⃣ 无穷级数 8️⃣ 空间几何 9️⃣ 多元积分 2 线代部分 习题册:汤家凤 1800 1️⃣ 行列式…

USB服务器的5个核心价值

USB服务器&#xff08;USB Server&#xff09;是一款专为企业级环境设计的创新型硬件解决方案&#xff0c;其核心使命在于解决物理USB设备&#xff08;如U盾、加密狗、身份认证Key等&#xff09;在分布式办公、远程协作及复杂IT架构中面临的接入、管理与安全难题。本文以朝天椒…

基于vue3+ByteMD快速搭建自己的Markdown文档编辑器

简介 ByteMD 是一个轻量级、功能丰富的 Markdown 编辑器组件&#xff0c;由稀土掘金&#xff08;juejin.cn&#xff09;团队开发并开源。它采用 Svelte 构建&#xff0c;支持双向编辑&#xff08;所见即所得&#xff09;&#xff0c;并提供了丰富的插件系统。 核心特点 轻量…

“AI大语言模型”助力大气科学:ERA5再分析数据、WRF处理、遥感降水、CMIP6未来气候、天气晴雨预测的完整方法论等

内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等实战案例&#xff0c;将AI技术广泛应用于科研工作。特别关注将GPT与Python结合应用于遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等大气科学关键场景。旨在提升参与者在…

STM32给FPGA的外挂FLASH进行升级

STM32给FPGA的外挂FLASH进行升级 一、电路方案设计二、软件写FLASH三、解决第一次烧录后FPGA无法启动的问题 前言&#xff1a; 一个复杂的嵌入式中&#xff0c;如果对某些实时性要求极高的情况下势必会使用到FPGA来保证&#xff0c;这里面牵扯到给FPGA的程序升级问题&#xff0…