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

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 服务器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】11、网络连通性:ping、traceroute、nslookup

文章目录 一、ping1.1 禁 ping 二、traceroute三、nslookup3.1 非交互模式3.2 交互模式 注意,测试网络连通性时,有的机器无法 ping 通,但可能 telnet 能通。不要因为无法 ping 通就放弃尝试。 一、ping 1.1 禁 ping 禁 ping 是通过忽略 IC…

SpringBoot 统⼀功能处理

目录 前言 1.⽤户登录权限效验 1.1、最初⽤户登录效验 1.2、Spring AOP ⽤户统⼀登录验证的问题 1.3、Spring 拦截器 了解 创建一个 Spring 拦截器 的流程 1、 创建自定义拦截器,实现 HandlerInterceptor 接⼝的preHandle(执⾏具体⽅法之前的预处理…

day17 | 654.最大的二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

文章目录 一、最大的二叉树二、合并二叉树三、二叉搜索树中的搜索四、验证二叉搜索树 一、最大的二叉树 654.最大的二叉树 构建二叉树的题目,都用前序遍历。 因为我们一定要先构建根节点,才能继续向后构建。 递归函数的参数和返回值: Tree…

【MyBatis】MyBatis把空字符串转换成0的问题处理方案(96)

先看问题: Postman入参: MyBatis采用map循环插入: // Mapper接口层void addPar(Param(value "question") Map<String, Object> paramMap);<!-- 新增&#xff1a;参数 --><insert id"addPar" parameterType"map">INSERT IGNO…

小研究 - JVM 垃圾回收方式性能研究(一)

本文从几种JVM垃圾回收方式及原理出发&#xff0c;研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响&#xff0c;并通过最终测试数据对比&#xff0c;给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 1 引言 2 垃圾回收算法 2.1 标记清除法 2.2…

构建语言模型:BERT 分步实施指南

学习目标 了解 BERT 的架构和组件。了解 BERT 输入所需的预处理步骤以及如何处理不同的输入序列长度。获得使用 TensorFlow 或 PyTorch 等流行机器学习框架实施 BERT 的实践知识。了解如何针对特定下游任务(例如文本分类或命名实体识别)微调 BERT。为什么我们需要 BERT? 正…

使用docker部署Wordpress

文章目录 1.创建网络2.创建volume存储3.拉取镜像4.创建mysql容器mysql修改密码 5.创建wordpress容器6.访问localhost:80就可以直接使用啦 1.创建网络 docker network create --subnet172.18.0.0/24 pro-net2.创建volume存储 # mysql 存储 docker volume create volume_mysql…

怎么才能远程控制笔记本电脑?

为什么选择AnyViewer远程控制软件&#xff1f; 为什么AnyViewer是远程控制笔记本电脑软件的首选&#xff1f;以下是选择AnyViewer成为笔记本电脑远程控制软件的主要因素。 跨平台能力 AnyViewer作为一款跨平台远程控制软件&#xff0c;不仅可以用于从一台Windows电…

如何制作VR全景地图,VR全景地图可以用在哪些领域?

引言&#xff1a; 随着科技的迅速进步&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正逐渐渗透到各个领域。VR全景地图作为其中的重要应用之一&#xff0c;为人们提供了身临其境的全新体验。 一.什么是VR全景地图&#xff1f; VR全景地图是一种利用虚拟现实技术&…

PHP8的数据类型-PHP8知识详解

在PHP8中&#xff0c;变量不需要事先声明&#xff0c;赋值即声明。 不同的数据类型其实就是所储存数据的不同种类。在PHP8.0、8.1中都有所增加。以下是PHP8的15种数据类型&#xff1a; 1、字符串&#xff08;String&#xff09;&#xff1a;用于存储文本数据&#xff0c;可以使…

【LeetCode每日一题】——1572.矩阵对角线元素的和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 简单 三【题目编号】 1572.矩阵对角线元素的和 四【题目描述】 给你一…

HTML5网页设计小案例:网页导航栏的设计

什么是导航栏&#xff0c;按我的理解就是位于网页顶部或者侧边一组链接或者按钮&#xff0c;用来指导大家找到网页的不同板块&#xff0c;大家可以一目了然的找到自己想看的板块内容。今天我们设计一个位于网页顶部的的导航栏。按我的生活经验来说&#xff0c;网页的顶部导航栏…

Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查

Django学习记录&#xff1a;使用ORM操作MySQL数据库并完成数据的增删改查 数据库操作 MySQL数据库pymysql Django开发操作数据库更简单&#xff0c;内部提供了ORM框架。 安装第三方模块 pip install mysqlclientORM可以做的事&#xff1a; 1、创建、修改、删除数据库中的…

网络安全进阶学习第八课——信息收集

文章目录 一、什么是信息收集&#xff1f;二、信息收集的原则三、信息收集的分类1.主动信息收集2.被动信息收集 四、资产探测1、Whois查询#常用网站&#xff1a; 2、备案信息查询#常用网站&#xff1a; 3、DNS查询#常用网站&#xff1a; 4、子域名收集#常用网站&#xff1a;#常…

Linux编辑器 - vim使用

1.vim的基本概念 Vim是一个广泛使用的文本编辑器&#xff0c;它是在Unix和Linux系统中常用的命令行文本编辑器之一。 vim的主要三种模式 ( 其实有好多模式&#xff0c;目前掌握这 3 种即可 ), 分别是 命令模式 &#xff08; command mode &#xff09;、 插入模式 &#xff0…

html学习5(表单)

1、表单是一个包含表单元素的区域&#xff0c;用于收集用户的输入信息。 2、表单元素是允许用户在表单中输入内容&#xff0c;比如&#xff1a;文本域&#xff08;textarea&#xff09;、下拉列表&#xff08;select&#xff09;、单选框&#xff08;radio-buttons&#xff09…

MySQL篇

文章目录 一、MySQL-优化1、在MySQL中&#xff0c;如何定位慢查询?2、SQL语句执行很慢, 如何分析呢&#xff1f;3、了解过索引吗&#xff1f;&#xff08;什么是索引&#xff09;4、索引的底层数据结构了解过嘛 ?5、什么是聚簇索引什么是非聚簇索引 ?6、知道什么是回表查询嘛…

go初识iris框架(三) - 路由功能处理方式

继了解get,post后 package mainimport "github.com/kataras/iris/v12"func main(){app : iris.New()//app.Handle(请求方式,url,请求方法)app.Handle("GET","/userinfo",func(ctx iris.Context){path : ctx.Path()app.Logger().Info(path) //获…

CEC2022:CEC2022测试函数及多种智能优化算法求解CEC2022对比

目录 一、CEC2022测试函数 二、多种智能优化算法求解CEC2022 2.1 本文参与求解CEC2022的智能优化算法 2.2 部分测试函数运行结果与收敛曲线 三、带标记收敛曲线代码(获得代码后可自行更改&#xff09; 一、CEC2022测试函数 CEC2022测试集共有12个单目标测试函数&#x…

SpringBoot使用JKS或PKCS12证书实现https

SpringBoot使用JKS或PKCS12证书实现https 生成JKS类型的证书 可以利用jdk自带的keytool工具来生成证书文件&#xff0c; 默认生成的是JKS证书 cmd命令如下: 执行如下命令&#xff0c;并按提示填写证书内容&#xff0c;最后会生成server.keystore文件 keytool -genkey tomcat…