红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

Kerberos 和 Apache Sentry 干货实践(上)

  • 2020-08-11
  • 本文字数:4644 字

    阅读完需:约 15 分钟

Kerberos和Apache Sentry干货实践(上)

好大夫在线是一家互联网医疗公司,医疗数据的安全性关乎重大。而现阶段的大数据平台并没有原生的安全认证,Cloudera 公司的开源大数据平台 CDH 在内网实践中,也仅由网络防火墙来解决安全问题。在对数据安全要求极高的医疗领域场景下,这样的安全保障是不够的,它无法保证内网人员对数据访问权限的严格控制,这一缺点如果被人潜入内部利用则会发生灾难。

背景

医疗行为本身决定了患者和医生都不可能隐瞒或者造假,即医疗数据具有普遍的真实性和隐私性,并存在极高的质量和价值。同时,医疗数据覆盖范围广,既是个体的生物学数据,又包含了疾病传播、地区流行病发展等数据,一旦数据泄漏将会带来严重影响。因此,使用网络安全认证和权限管理来对数据资产进行安全加固势在必行。


好大夫在线大数据部门,通过前期的调研和验证,最终决定把 Kerberos 和 Apache Sentry 集成到大数据集群上,用于加固数据安全,防止数据的泄漏。

Kerberos 是什么?

Kerberos 提供了大数据组件之间的身份认证,简单说就是,当 A 组件去访问 B 组件时, B 能够确认来访的 A 就是真的 A,而不是被其他 CDEF 冒充的,A 也能确认自己要访问的 B 就是真的 B,而不是被路由到其他的恶意组件上。


Kerberos 由 MIT 创建,是一种计算机网络安全协议,用于在不可信网络(例如 Internet)上的两个或多个可信主机之间对服务请求进行身份验证,解决网络安全问题。


该协议的名称源于希腊神话中传说中的三头犬 Kerberos,在此协议的架构中 Kerberos 的三个头分别代表了客户端,服务器和密钥分发中心(KDC)。KDC 用作受信任的第三方身份验证服务。


它使用对称密钥加密手段验证客户端-服务器应用程序,使用密钥加密技术对受信任的第三方验证用户的身份。


这意味着未加密的密码不会在网络上传输,客户端可以通过不安全的网络连接向服务器证明其身份,之后,他们还可以加密所有通信,以确保在开展业务时的私密性和数据完整性。


Kerberos 在可靠审核和身份验证功能的安全系统中大量使用。还可以用于 Posix 以及 Active Directory,NFS 和 Samba 的身份验证。

为什么要用 Kerberos?

互联网本身就是一个不安全的环境。Internet 中使用的许多协议都不提供任何安全性。恶意黑客通过嗅探网络来偷取用户的密码。因此,通过网络发送未使用加密密码的应用程序极易受到攻击。


更糟糕的是,客户端/服务器应用程序依靠客户端程序认为正在使用该客户端程序的用户的身份是安全可靠的。

Kerberos 工作流程中涉及的主要概念

1、主体(Principal)

在 Kerberos 系统中,客户端和服务器都有一个唯一的名字即 Principal,组件间相互访问使用 Principal 相互识别身份。每一个主体(Principal)都有自己的密码,且只有主体本身和密钥分发中心 KDC 知道。Principal 由三个部分组成:primary, instance 以及 realm,其组成形式为 primary/instance@realm:


  • primary:可以是 OS 中的 username,也可以是 service name;

  • instance:用于区分属于同一个 user 或者 service 的多个 principals,该项为 optional;

  • realm:类似于 DNS 中的 domain,一个集群内的机器拥有相同的 realm。


Kerberos 中的 Principal 分两种。一种叫用户,例如在 dev 用户对应的 Kerberos 主体叫做 dev@CDH.COM。另一种叫做服务,如 cdh1 机器上的 Impala 服务,对应在 Kerberos 中的主体为 impala/cdh1@CDH.COM。


2、密钥分发中心 KDC(key distribution center)

KDC 包含身份验证服务器(AS)和票证授予服务器(TGS)两部分。


KDC 只做两件事:身份验证和票证授予,AS 模块用于给所有用户主体(Principal)授予 TGT, TGS 模块用于验证访问发起方的 TGT,并授予被访问主体的 Ticket。


身份验证服务器 AS(authentication service):AS 执行所需的客户端身份验证。如果身份验证成功完成,则 AS 向客户端颁发一个称为 TGT(票证授予票证)的票证。此票证可确保其他服务器对客户端进行身份验证。


票证授权票证 TGT(ticket granting ticket):由 KDC 的 AS 发放;获得这样一张票据后,以后申请其他应用的服务票据(ST)时,就不需要向 KDC 提交身份认证信息,TGT 具有一定的有效期,就像是 Kerberos 进行用户登陆(Kinit)以后票证具有一个固定时间的有效期,过了有效期需要不断的去 renew 来续约,续约到期需要重新提交身份认证信息。


票证授予服务 TGS(ticket granting service):TGS 以票证授权票证(TGT)为依据,生成服务票证 ST。


服务票证 ST(service ticket):由 KDC 的 TGS 发放,任何一个应用(application)都需要一张有效的服务票据才能访问;如果能正确接受 ST,说明客户端(client)和服务器(server)之间的信任关系已经被建立,通常是一张数字加密的证书。

Kerberos 工作流程

Step 1: 初始客户端身份验证请求。用户(Principal)从身份验证服务器(AS)索取票证授予票证(TGT),该请求包括客户端 ID。


Step 2: KDC 验证客户端的凭据。AS 检查数据库中的客户端和 TGS 的可用性。如果 AS 找到两个值,它将使用用户的密码哈希值生成客户端/用户密钥。然后,AS 计算 TGS 密钥,并创建由客户端/用户密钥加密的会话密钥(SK1)。然后,AS 会生成一个包含客户端 ID,客户端网络地址,时间戳,生存期和 SK1 的 TGT。然后,TGS 密钥对票证进行加密。


Step 3: 客户端解密消息。客户端使用 客户端/用户 密钥对消息解密并提取 SK1 和 TGT,从而生成用于验证客户端 TGS 的身份验证器。


Step 4: 客户端使用 TGT 请求访问。客户端通过将提取的 TGT 和创建的身份验证器发送到 TGS,向提供服务的服务器请求票证。


Step 5: KDC 为文件服务器创建票证。TGS 使用 TGS 密钥解密从客户端收到的 TGT 并提取 SK1。TGS 解密身份验证器,并检查其是否与客户端 ID 和客户端网络地址匹配。TGS 还使用提取的时间戳来确保 TGT 尚未过期。如果该过程成功进行了所有检查,则 KDC 会生成一个服务会话密钥(SK2),该密钥在客户端和目标服务器之间共享。最后,KDC 创建一个服务票证,其中包括客户端 ID、客户端网络地址、时间戳和 SK2、使用从数据库获得的服务器密钥对该票证进行加密。客户端收到一条消息,其中包含服务票证和 SK2,均用 SK1 加密。


Step 6: 客户端使用文件票证进行身份验证。客户端使用 SK1 解密消息并提取 SK2。此过程将生成一个新的身份验证器,其中包含用 SK2 加密的客户端网络地址,客户端 ID 和时间戳,并将其和服务票证发送到目标服务器。


Step 7: 目标服务器接收解密和身份验证。目标服务器使用服务器的密钥来解密服务票证并提取 SK2。服务器使用 SK2 解密身份验证器,执行检查以确保身份验证器中的客户端 ID 和客户端网络地址与服务票证相匹配。服务器还会检查服务票证,看它是否已过期。满足检查要求后,目标服务器将向客户端发送一条消息,以验证客户端和服务器之间是否已通过身份验证。若验证通过,用户就可以进行安全会话。



上述原理是不是已经有点晕了呢,没关系,举个例子就明白了:


假设小明要去游乐场玩,首先需要在大门口检查游客的身份(即检查小明的 ID 和 PASS), 如果小明通过验证,游乐场的门卫 (AS) 则会提供给小明一张门卡 (TGT)。


这张卡片的用处就是告诉游乐场的各个场所的服务员,小明是通过正门进来,而不是后门偷爬进来的,同时这张卡片也是小明进入游乐场游玩需要的第一把钥匙。


现在小明有了这张卡,但是小明来游乐场拿这张卡是不能玩游乐项目的。这时小明想玩过山车,过山车的服务员 (client) 拦下小明,向小明要过山车的 (ST) 票据,小明说他只有一个门卡 (TGT), 那小明只要把 TGT 放在一旁的票据授权机 (TGS) 上刷一下。票证授权机 (TGS) 就会根据小明现在所在的过山车项目,给小明一张过山车的门票 (ST), 这样小明有了过山车的票据,验证通过后小明就可以畅通无阻地游玩了。


当然如果小明玩完过山车后,想去游乐场的跳楼机玩,那小明一样只需要带着那张门卡 (TGT),到对应的跳楼机票证授权机 (TGS) 上刷一下,得到跳楼机的票据 (ST) 就可以玩跳楼机了。


但是当小明离开游乐场后,这张门卡(TGT)就作废了,因为小明的 TGT 已经过期了,再想做任何事都会被拒绝,除非重新申请拿到门卡(TGT)。

Kerberos 是如何在大数据平台使用的?

a) 因为要使用超过 128 位的加密密钥,那么必须使用非受限管辖区域策略文件 local_policy.jar,US_export_policy.jar,所以需要在部署 Kerberos 服务的机器上替换 JRE 的加密 jar 包,可自行去Oracle官网下载;


b) Kerberos 的集群节点可以被 DNS 解析或者在 hosts 中配置所有节点的映射关系;


c) 在其中一台机器上安装 KDC:yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation openldap-clients;


d) 剩余机器上安装 Kerberos 的客户端:yum -y install krb5-libs krb5-workstation;


e) 安装完成后,修改 KDC 所在机器的 krb5.conf,主要修改的内容已加注释说明:


[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log
[libdefaults] default_realm = CDH.COM #域名要保持一致 dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h #票证的声明周期 renew_lifetime = 2d #票证的最大续期时间 forwardable = true
[realms] CDH.COM = { kdc = cdh1 admin_server = cdh1 }
[domain_realm] .cdh1.com = CDH.COM cdh1.com = CDH.COM
[kdc] profile=/var/kerberos/krb5kdc/kdc.conf
复制代码


f) 修改 kdc.conf,主要修改内容已加注释说明:


[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88
[realms] CDH.COM = { #与krb5.conf的域名保持一致 #master_key_type = aes256-cts #不使用默认的加密 max_renewable_life= 2d #最大续期时间 acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
复制代码


g) 修改 kadm5.acl,添加管理员权限:/admin@CDH.COM


h) 创建数据库:kdb5_util create -r CDH.COM -s;


i) 创建管理员账户及密码然后启动 Kerberos;


j) 分发 krb5.conf 到其他相同路径的 Kerberos 客户端节点上;


k) CDH 集群配置开启 Kerberos:



全选后点继续:






下一步导入 KDC Account Manager 凭据 命令完成后,点击继续:



默认配置,点击继续:



自动重启集群中的所有服务,校验是否启用成功,并对各角色进行授信:




至此,大数据集群各组件的 Kerberos 认证就完成了!

那么 Kerberos 就一定安全可靠么?

Kerberos 仍然是当今可用的最佳安全访问协议,该协议足够灵活,可以采用更强大的加密算法来帮助抵御新的威胁,如果用户实施了良好的密码选择策略,那么安全级别也会更高。


好了,至此 Kerberos 的背景、原理及搭建过程大致结束。下一篇中,我们将继续讲述 Apache Sentry 相关知识,以及其如何和 Kerberos 一起来进行访问权限控制的,感兴趣的小伙伴欢迎持续关注 Kerberos。


作者介绍:


张博雅:好大夫在线大数据开发工程师,涉猎技术包括分布式实时离线计算,数据仓库建设,数据安全等,喜欢研究解决大数据组件相关问题。


马大芳:好大夫在线大数据开发工程师,专注大数据领域,主要关注 Kafka/Spark/HBase 等开源组件,热爱技术和探索。


好大夫在线创立于 2006 年,是一家互联网医疗平台。已收录国内 10496 家正规医院的 69.2 万名医生信息。其中,23 万名医生在平台上实名注册,直接向患者提供线上医疗服务。


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2020-08-11 08:303521
用户头像
李冬梅 加V:busulishang4668

发布了 785 篇内容, 共 362.3 次阅读, 收获喜欢 990 次。

关注

评论

发布
暂无评论
发现更多内容

原创逼真实时互动“青否数字人”是如何生产出来的?

青否数字人

数字人

Office2019 for Mac(办公套件全家桶) v16.78正式激活版

mac

苹果mac Windows软件 office 2019

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致?(Staking 玩法)

长安区块链

软件开发给外包公司,开发需求功能纸面合同化有多重要

软件开发-梦幻运营部

DevOps|产研运协作工具链上的皇冠-项目管理工具

laofo

项目管理 DevOps cicd 敏捷开发 研发效能

最大输出 18W,集成 Type-C PD 输出和各种快充输出协议

攻城狮Wayne

分布式系统设计: 从1千到10亿用户的跨越

俞凡

架构

服务器日志处理,文件截取关键字教程。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 ECS

重庆大学OpenHarmony技术俱乐部成立:产学研紧密合作,共创数智生态新篇章

科技热闻

解读 $mash 通证 “Fair Launch” 规则,公平的极致?(Staking 玩法)

EOSdreamer111

文心一言 VS 讯飞星火 VS chatgpt (173)-- 算法导论13.3 2题

福大大架构师每日一题

福大大架构师每日一题

【Java技术深入解析】「核心技术提升」最流行的Java模拟框架Mockito入门指南(Java单元测试)

洛神灬殇

Java Mock 服务 技术分析 2024年第四篇文章

YouTube音乐转MP3转换器 MediaHuman YouTube to MP3 Converter 中文

mac大玩家j

Mac软件 音频格式转换器

解读 $mash 通证 “Fair Launch” 规则,公平的极致?(Staking 玩法)

股市老人

项目经验还写外卖和商城?来看看异构数据源数据流转服务DatalinkX

李晓飞

flink springboot

macos三国策略游戏:三国志11威力加强版最新中文版

胖墩儿不胖y

mac游戏 游戏推荐 好玩的游戏分享

有什么安全处理方案可以有效防护恶意爬虫

德迅云安全杨德俊

爬虫 安全 CDN

clickhouse重启,以及修改数据存储目录后重启失败的解决办法

百度搜索:蓝易云

云计算 Linux 运维 Clickhouse 服务器

Helm vs Kustomize 深度比较

俞凡

Kubernetes 云原生 Helm Kustomize

如何避免购买体育直播系统源码时隐藏费用陷阱

软件开发-梦幻运营部

2024-01-06:用go语言,在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧 在桥上有一些石子,青蛙很讨厌踩在这些石子上 由于桥的长度和青蛙一次跳过的距离都是正整数 我们可以把独木桥

福大大架构师每日一题

福大大架构师每日一题

技术写作概述:内容分析、平台和转化追踪以及内容老化

小万哥

程序人生 软件工程 后端开发 技术写作 内容分析

交互式数字人将取代全球3亿人工岗位!

青否数字人

数字人

分层架构最佳实践

俞凡

架构

小红书 X WSDM 2024「对话式多文档问答挑战赛」火热开赛!

小红书技术REDtech

人工智能 数据挖掘 搜索 信息检索 WSDM

通过聚道云软件连接器实现钉钉与自研主数据系统的完美融合

聚道云软件连接器

案例分享

IDC报告:网心科技以11.8%的市场份额位居中国边缘公有云第三

网心科技

关于在容器中,nignx代理后端多个服务如何保证后端服务的地址不变呢?

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

数字人分身让企业更高效!

青否数字人

Ulysses 27 for Mac(markdown编辑软件) v27.3中文完整激活版

mac

苹果mac Windows软件 Ulysses Markdown写作工具

Kerberos和Apache Sentry干货实践(上)_文化 & 方法_好大夫在线技术团队_InfoQ精选文章