CDH基于Kerberos开启身份验证实践总结

news2025/1/19 20:25:39

CDH基于Kerberos开启身份验证实践总结

  • 前言
  • 简介
    • Kerberos是什么
    • Kerberos解决什么问题
  • Kerberos基本概念
  • Kerberos认证流程
  • Kerberos基本配置
    • principal
    • keytab
    • krb5.conf
    • kdc.conf
    • kadm5.acl
    • kerberos数据库
  • 访问示例
    • 数据库访问信息
  • 其他
    • kerberos常用命令
    • [Git Bash支持make命令](https://www.eemaker.com/git-bash-make.html)
  • 参考链接

前言

  • 名称来源

    Kerberos,在古希腊神话故事中,指的是一只三头犬守护在地狱之门外,禁止任何人类闯入地狱之中

简介

Kerberos是什么

  • kerberos是一种计算机网络授权协议

    用来在非安全网络中,对个人通信以安全的手段进行身份认证。Kerberos旨在通过密钥加密技术为客户端/服务器应用程序提供身份验证,主要用在域环境下的身份验证。

Kerberos解决什么问题

  • 背景

    通常只有服务器的运维管理人员在配置Active Directory之类的东西时才会接触到Kerberos,但由于整个Hadoop生态圈在安全方面对于Kerberos愈发依赖,同时由于Kerberos认证必须入侵式改造代码的特点,需要深入研究kerberos原理及使用。

  • 作用

    1. 网络中密码明文传输,属于裸奔状态,而Kerberos结合了加密和消息完整性来确保敏感的身份验证数据不会在网络上透明地发送;

    2. 另外无需记住多个密码,只需要记住密码数量和Kerberos密码

Kerberos基本概念

  • KDC(key distribution center)

    是一个网络服务,提供ticket和临时会话密钥

  • AS(Authentication Server)

    认证服务器

  • TGS(Ticket Grantion Server)

    许可证服务器

  • Ticket

    一个记录,客户用它来向服务器证明自己的身份,包括服务的主体名称、用户的主体名称、用户主机的ip地址、时间标记、会话密钥、定义票证生命周期的时间戳

Kerberos认证流程

  • 工作流程

    Client从KDC获取TGT,Client利用获取的TGT向KDC请求其他Service的Ticket(通过获取的session进行访问)。

    kerberos访问流程

② User向KDC中的AS请求身份验证,AS为user和TGS生成一个session key:SK_TGS,并发送{TGT,SK_TGS} K_USER

其中,{TGT,SK_TGS}K_USER表示使用user的密码加密的packet,包含了TGT和用户与TGS的session key;这个请求验证的过程实际上是使用kinit来完成的,kinit将username传给AS,AS查找username的密码,将TGT和SK_TGS使用用户密码加密后发送给kinit,kinit要求用户输入密码,解密后得到TGT和SK;其中,TGT使用TGS的密码加密,信息内容为{user,address,tgs_name,start_time,lisftime,SK_TGS} K_TGS

④ User向KDC中的TGS请求访问某个Service的ST,发送[TGT,Authenticator]

其中,Authenticator用于验证发送该请求的user就是TGT中所声明的user,内容为:{user,address,start_time,lifetime};Authenticator使用的TGS和user之间的session key加密的,防止TGT被盗。TGS先使用自己的密码解开TGT获得它与user之间的session key,然后使用session key解密Authenticator,验证用户和有效期;

⑤ TGS判断无误后,为user和Service之间生成一个新的session key:SK_Service;然后发送给user一个包:[{SK_Service} SK_TGS, ST]

其中,ST是使用Service的密码加密的,SK_Service使用TGS和user之间的session key加密的;ST的内容为:{ user, address, start_time, lifetime, SK_Service } K_Service

⑥ User使用与TGS之间的会话密钥解开包得到与Service之间的会话密钥SK_Service,然后使用SK_Service生成一个Authenticator,向Service发送[ ST,Authenticator]

其中,此处的Authenticator是使用user和service之间的会话密钥加密的,Service收到包后先使用自己的密码解密ST,或者会话密钥SK_Service,然后使用SK_Service解密Authenticator来验证发送请求的用户就是票中所声明的用户。

Kerberos基本配置

principal

  • 主要组成

    kerberos-principal组成

    principal 是Kerberos 世界的用户名,用于标识身份,每个用户都会有一个 principal,如果 principal 失效或者不正确,那么这个用户将无法访问任何资源。principal 主要由三部分构成:primary,instance(可选) 和 realm

    principal示例

  • primary

    主体,每个 principal 都会有的组成部分,代表用户名(username)或服务名(service name)。

  • instance

    用于服务主体以及用来创建用于管理的特殊主体。instance 用于服务主体时的一般会用于区分同一服务在不同服务器上的服务实例,因此与 primary 组成的 principal 一般用于 server 端,如:NameNode,HiverServer2,Presto Coordinator等。

    instance 用来创建用于管理的特殊主体时,一般来区分同一个用户的不同身份,如区分担任管理员角色的 a 用户与担任研发的 a 用户。

  • realm

    realm 是认证管理域名,用来创建认证的边界,只有在同属于一个认证服务的边界内,这个认证服务才有权利认证一个用户、主机或者服务。每个域都会有一个与之对应的 kdc(密钥分发中心key distribution center) 服务用于提供域内的所有服务的认证服务

  • ticket cache

    客户端与 KDC 交互完成后,包含身份认证信息的文件,短期有效,需要不断renew。

    kerberos-ticketcache

keytab

  • 简介

    keytab是包含多个principal和加密principal key的文件,用户可以利用该文件进行身份认证。keytab文件对于每个host是唯一的,因为key中包含hostname。keytab文件用于不需要人工交互和保存纯文本密码,实现到kerberos上验证一个主机上的principal。因为服务器上可以访问keytab文件即可以以principal的身份通过kerberos的认证

krb5.conf

  • 简介

    存放位置 /etc/krb5.conf

    包含Kerberos的配置:例如,KDC的位置,Kerberos的admin realms等。需要所有使用的Kerberos的机器上的配置文件都同步

需替换DOMAIN.COM为自定义域名

  • 默认示例

    
    
        # Configuration snippets may be placed in this directory as well
        includedir /etc/krb5.conf.d/
    
        [logging]
        default = FILE:/var/log/krb5libs.log
        kdc = FILE:/var/log/krb5kdc.log
        admin_server = FILE:/var/log/kadmind.log
    
        [libdefaults]
        dns_lookup_realm = false
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
        default_realm = EXAMPLE.COM
        udp_preference_limit = 1
    
        [realms]
        EXAMPLE.COM = {
            kdc = dbnode1
            admin_server = dbnode1
        }
    
        [domain_realm]
        .example.com = EXAMPLE.COM
        example.com = EXAMPLE.COM
    
    
    
    

    注:这里需要分发krb5.conf至所有client主机

  • [logging]

    表示server端的日志的打印位置

  • [libdefaults]

    每种连接的默认配置,需要注意以下几个关键的小配置:

    default_realm = EXAMPLE.COM 默认的realm,必须跟要配置的realm的名称一致。

    udp_preference_limit = 1 禁止使用udp,可以防止一个Hadoop中的错误

    ticket_lifetime表明凭证生效的时限,一般为24小时

    renew_lifetime表明凭证最长可以被延期的时限,一般为一周。当凭证过期之后,对安全认证的服务的后续访问则会失败。

  • [realms]

    列举使用的realm:

    kdc:代表kdc的位置,格式是:机器hostname或ip地址

    admin_server:代表admin的位置,格式是:机器hostname或ip地址

    default_domain:代表默认的域名

  • [appdefaults]

    可以设定一些针对特定应用的配置,覆盖默认配置。

kdc.conf

  • 存放位置

    默认放在 /var/kerberos/krb5kdc/kdc.conf

  • 示例

    
    
        [kdcdefaults]
        kdc_ports = 88
        kdc_tcp_ports = 88
    
        [realms]
        EXAMPLE.COM = {
            #master_key_type = aes256-cts
            acl_file = /var/kerberos/krb5kdc/kadm5.acl
            dict_file = /usr/share/dict/words
            admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
            supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
            max_life = 25h
            max_renewable_life = 8d
        }
    
    
    
    
  • 参数说明

    EXAMPLE.COM:是设定的realms,名字随意。Kerberos可以支持多个realms,会增加复杂度。一般为大写。

    max_renewable_life = 8d: 涉及到是否能进行ticket的renew必须配置。

    master_key_type:和supported_enctyps默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。

    acl_file:标注了admin的用户权限。文件格式是Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。

    admin_keytab:KDC进行校验的keytab。

    supported_enctypes:支持的校验方式。注意把aes256-cts去掉。

kadm5.acl

  • 配置说明

    存放目录:服务端的配置文件/var/kerberos/krb5kdc/kadm5.acl

  • 样例说明

    
        # 配置以允许具备匹配条件的admin用户进行远程登录权限
        */admin@EXAMPLE.COM	*
    
    
    
    
    

    标注了admin的用户权限,需要用户自己创建。文件格式是Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。最简单的写法是*/admin@EXAMPLE.COM *

    代表名称匹配*/admin@EXAMPLE.COM都认为是admin,权限是*代表全部权限。

kerberos数据库

  • 配置说明

    默认的数据库路径为/var/kerberos/krb5kdc,如果需要重建数据库,将该目录下的principal相关的文件删除即可,请牢记数据库密码。

  • 样例说明

    
        kdb5_util create -r EXAMPLE.COM -s
    
    
    

    [-s] 表示生成stash file,并在其中存储master server key(krb5kdc)

    [-r] 来指定一个realm name,当krb5.conf中定义了多个realm时使用

    当Kerberos database创建好了之后,在/var/kerberos/中可以看到生成的principal相关文件

访问示例

数据库访问信息

  • 配置说明

    krb5.conf路径存放位置

    
        // 自定义路径
        System.setProperty("java.security.krb5.conf", "src/test/resources/krb5.conf");
    
    
    

    Linux系统:/etc/

    其他:${JDK_HOME}/jre/lib/security

  • 访问示例

    数据库类型访问方式访问示例其他
    Hivejdbcjdbc:hive2://127.0.0.1:10000/default;principal=hive/node1@EXAMPLE.COMxxx.keytab文件路径
    Kudujdbcjdbc:hive2://127.0.0.1:21050/default;principal=impala/node2@EXAMPLE.COMxxx.keytab文件路径

其他

kerberos常用命令

  • shell模式

    操作命令备注
    启动kdc服务systemctl start krb5kdc
    启动kadmin服务systemctl start kadmin
    进入kadminkadmin.local / kadmin
    创建数据库kdb5_util create -r EXAMPLE.COM -s
    修改当前密码kpasswd
    测试keytab可用性kinit -k -t /home/xiaobai/xb.keytab xiaobai@EXAMPLE.COM
    查看当前票据klist
    查看keytabklist -e -k -t /home/xiaobai/xb.keytab
    通过keytab文件认证登录kinit -kt /home/xiaobai/xb.keytab xiaobai@EXAMPLE.COM
    通过密码认证登录kinit xiaobai@EXAMPLE.COM / kint xiaobai
    清除缓存kdestroy
  • kadmin模式

    注意:Kerberos进入admin管理模式需要使用root用户

    操作命令备注
    查看principallistprincs
    生成随机key的principaladdprinc -randkey root/admin@EXAMPLE.COM
    生成指定key的principaladdprinc -pw xxx root/admin@EXAMPLE.COM
    修改root/admin的密码cpw -pw xxx root/admin
    添加/删除principaladdprinc/delprinc root/admin
    直接生成到keytabktadd -k /home/xiaobai/xb.keytab xiaobai@EXAMPLE.COM xst -norandkey -k /home/xiaobai/xb.keytab xiaobai@EXAMPLE.COM注意:在生成keytab文件时需要加参数"“-norandkey”",否则导致直接使用kinit xiaobai@EXAMPLE.COM初始化时提示密码错误。
    设置密码策略(policy)addpol -maxlife “90 days” -minlife “75 days” -minlength 8 -minclasses 3 -maxfailure 10 -history 10 user
    修改密码策略modpol -maxlife “90 days” -minlife “75 days” -minlength 8 -minclasses 3 -maxfailure 10 user
    添加带有密码策略addprinc -policy user hello/admin@EXAMPLE.COM
    修改用户的密码策略modprinc -policy user1 hello/admin@EXAMPLE.COM
    删除密码策略delpol [-force] user

Git Bash支持make命令

参考链接

  • MIT Kerberos Documentation

  • 地狱三头犬,Kerberos身份验证在ChunJun中的落地实践

  • Kerberos基本原理、安装部署及用法

  • 配置 KDC 服务器

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

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

相关文章

在线餐饮油烟实时监测系统的设计与实现

安科瑞 华楠 摘 要:为了解决传统油烟检测方法中成本高、效率低、实时性差等问题,设计开发了一种在线油烟实时监测系统;系统由采集、通讯、服务器和用户交互四个模块组成;采集模块采集油烟数据,通过GPRS通讯技术将数据发…

13.元素尺寸与位置

原理:通过js的方式,得到元素在页面中的位置 13.1 元素尺寸与位置-尺寸 1.获取宽高: ●获取元素的自身宽高、包含元素自身设置的宽高、padding、border ● offsetWidth和offsetHeight ●获取出来的是数值,方便计算 ●注意:获取的…

基于DCT变换和huffman编码的语音压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 多通道滤波 4.2 DCT变换 4.3 量化 4.3 哈夫曼编码 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ................................…

HTTP杂谈之Referer和Origin请求头再探

一 关于Referer和Origin的汇总 1) 知识是凌乱的,各位看官看个热闹即可2) 内容不断更新1、理解有盲区,需要及时纠正2、内容交叉有重复,需要适当删减3、扩展视野3) 以下内容都与Referer和Origin请求头有关联 nginx防盗链 HTTP杂谈之Referrer-Policy响应头 iframe标签referre…

go练习 day01

DTO: note_dto.go package dtoimport "king/model"type NoteAddDTO struct {ID uintTitle string json:"title" form:"title" binding:"required" message:"标题不能为空"Content string json:"conten…

青少年软件编程(Python六级)等级考试试卷(2022年9月)

青少年软件编程(Python六级)等级考试试卷(2022年9月) 第 1 题 单选题 以下关于Python二维数据的描述中,错误的是?( ) A. 表格数据属于二维数据,由整数索引的数据构成 …

[自学记录05|百人计划]Early-Z和Z-Prepass

其实这篇我是不想写的,因为网上资料真的非常非常多很多人都写过,但是我后来想了想,做笔记不就是这样吗,所以就写吧~。前置知识:深度测试Z-Buffer[计算机图形学]可见性与遮挡,Z-Buffer(前瞻预习/复习回顾)__Yhisken的博…

Vue 自定义事件绑定与解绑

绑定自定义事件 说到 Vue 自定义事件,那就需要搞清楚一个问题,为啥有这个玩意。 说到自定义事件之前,需要理解 组件基础的概念。理解了基础概念之后,我们就知道 Vue 的父子之间的通信, 一是 父组件通过 Prop 向子组件…

CK_Label_V1 CK_Label_V9 CK_Label_V11 System Developer‘s Manual

一、Register PTL You should register the PTL to our Management System first; 1、Register CK_Label_V1 Quickly press the side button three times Register ok:The led will turn off after flashing red light and the buzzer will beep once…

一个3年Android的找工作记录

作者:Petterp 这是我最近 1个月 的找工作记录,希望这些经历对你会有所帮助。 有时机会就像一阵风,如果没有握住,那下一阵风什么时候吹来,往往是个运气问题。 写在开始 先说背景: 自考本,3年经验&#xff0…

【JVM】(二)深入理解Java类加载机制与双亲委派模型

文章目录 前言一、类加载过程1.1 加载(Loading)1.2 验证(Verification)1.3 准备(Preparation)1.4 解析(Resolution)1.5 初始化(Initialization) 二、双亲委派…

在线/开源GNSS处理软件/平台介绍

当前,存在较多的GNSS开源/免费软件,可用于质量检核、RTK解算和PPP解算等,本文总结了部分常用的处理软件,其详细信息如表1和表2所示。 表1 常用GNSS预处理(格式转换、质量检核)软件: 软件名称 …

RunnerGo五种压测模式你会配置吗

我们在做性能测试时需要根据性能需求配置不同的压测模式如:阶梯模式。使用jmeter时我们需要安装插件来配置测试模式,为了方便用户使用,RunnerGo内嵌了压测模式这一选项,今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需…

基于各种方式划分 vlan

划分VLAN的方式有:基于接口、基于MAC地址、基于IP子网、基于协议、基于策略(MAC地址、IP地址、接口)。 VLAN(虚拟局域网)可以按照以下几种方式进行划分: 端口划分方式 将交换机端口按照需要划分成不同的…

低碳 Web 实践指南

现状和问题 2023年7月6日,世界迎来有记录以来最热的一天。气候变化是如今人类面临的最大健康威胁。据世界卫生组织预测2030年至2050年期间,气候变化预计每年将造成约25万人死亡。这是人们可以真切感受到的变化,而背后的主要推手是碳排放。 …

软件定时器

Q: 什么是定时器? A: 其实在单片机的学习中,已经接触过无数次定时器了,所谓定时器,简单可以理解为闹钟,到达指定一段时间后,就会响铃。 STM32 芯片自带硬件定时器,精度较高,达到定时…

一年级数学 数一数(一到十)

今天我们来学习数一数 有一些老人 眼睛可能花了 需要我们在动物园数清楚是多少个动物 然后告诉他们 可能有的小朋友 不知道某些数字怎么读 您可以打开地址 https://fanyi.baidu.com/?aldtype16047#zh/en/ 将数字 输入到 输入框内 然后点击 下面的小话筒 系统就会读出来了 小…

Java课题笔记~ MyBatis缓存

为了减少重复查询给数据库带来的压力,MyBatis提供了缓存机制,这种机制能够缓存查询的结果,避免重复的查询。 MyBatis提供了两种缓存方式: 一种为针对于SqlSession的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…

社科院与杜兰大学金融管理硕士为什么值得?来这里一探究竟

金融管理方向是近年来考研的热门专业,越来越多的学生在择校时也会将院校专业作为优先考虑的标准。而社科院与杜兰大学金融管理硕士项目作为热门中的热门,究竟为什么值得读呢?下面我们一起去探个究竟吧 一、中美名校强强联合,顶级师…

解压缩软件WinRAR-bandizip-7z--洛

个人收集的解压软件!后期还会更新 ------------------------------------------------------------------- WinRAR:密码1234WinRARhttps://wwzb.lanzoue.com/b0485ldcj BandiZip:密码1234 Bandizip-Professionalhttps://wwzb.lanzoue.com/…