快手、孩子王、华为等专家分享大模型在电商运营、母婴消费、翻译等行业场景的实际应用 了解详情
写点什么

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 万名医生在平台上实名注册,直接向患者提供线上医疗服务。


2020-08-11 08:303665
用户头像
李冬梅 加V:busulishang4668

发布了 926 篇内容, 共 519.9 次阅读, 收获喜欢 1093 次。

关注

评论

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

【论文速读】| ARVO: 开源软件可重现漏洞的全景图

云起无垠

智能BI新突破,看思迈特新品背后的第二增长曲线!

ToB行业头条

智能未来:低代码与AI如何重塑企业应用开发

天津汇柏科技有限公司

低代码 企业级应用程序开发 AI 人工智能

【论文速读】|RO-SVD:一种用于 AIGC 应用的可重构硬件版权保护框架

云起无垠

是什么拖慢了医疗云桌面的部署进程?

上海锐起科技

海外广告投放成功的关键点有哪些?

IPIDEA全球HTTP

工作 6 年,@Transactional 注解用的一塌糊涂

程序员小富

Java 事务回滚

工作太忙没时间学习,怎么办?

老张

职场成长 认知 学习成长

强大的项目管理软件OmniPlan pro for Mac

Mac相关知识分享

项目管理软件 Mac软件

Python IDE 编程工具JetBrains pycharm pro 2024 for mac激活版

Mac相关知识分享

编程 开发 Mac软件

音乐创作软件Ableton Live 11 Suite for Mac

Mac相关知识分享

Mac软件

免费试听 | AI自动化副业创收班手把手带你提升副业收益

测试人

软件测试

保定等保测评机构有吗?在哪里?

行云管家

网络安全 等保 堡垒机 保定

小城酒店也要数智化,火山引擎数据飞轮能带去哪些想象?

字节跳动数据平台

大数据 数字化转型 云服务 数据平台 数据飞轮

在数小时内构建 CRM:你需要了解的顶级无代码/低代码工具

NocoBase

低代码 CRM 无代码

类似咸鱼/转转闲置二手商品交易回收商城系统源码定制开发搭建

网站,小程序,APP开发定制

YETUADMIN 野兔二手交易系统 ThinkPHP8

技术分享丨使用 Knowledge Bases for Amazon Bedrock 制作 RAG 工具

伊克罗德信息科技

大数据 AWS Amazon Bedrock

ps 2022下载:Photoshop 2022 (Win&Mac) 软件直装版下载

你的猪会飞吗

mac软件下载 PS2022下载 ps 2022破解下载

好多kafka难题啊,看看其中的化解之道

王中阳Go

Go kafka 面试 面经

第65期 | GPTSecurity周报

云起无垠

挖掘大模型行业落地潜力,火山引擎发布AI创作者大赛

Geek_2d6073

人工智能图像编辑软件Topaz Gigapixel AI for Mac

Mac相关知识分享

人工智能 图像编辑

TiDB DR-Auto-Sync 同城双中心高可用实践丨银行核心背后的落地工程体系

TiDB 社区干货传送门

RPA项目:RPA工作原理及其应用领域

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

JavaScript 开发工具WebStorm 2024 for Mac激活版

Mac相关知识分享

Mac 软件 集成开发环境

神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?

ClkLog

C++客户端 C#客户端 C++客户端用户分析 C#客户端用户分析 windows客户端用户分析

【行业知识】餐饮业怎么定义?需要堡垒机吗?

行云管家

等保 堡垒机 餐饮

mac电脑可以玩的Red Alert红色警戒:红警2 for Mac合集

你的猪会飞吗

红色警戒 Mac游戏下载 红警游戏下载

海大集团的可观测平台建设实践

秦晓辉

监控 可观测性 Prometheus Nightingale Flashcat

在线文库网站程序系统源码/app/小程序开发定制

网站,小程序,APP开发定制

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