O'reilly Hadoop Security

发布于 2021-04-15 21:08:02 字数 4659 浏览 1293 评论 0

kerberos 主体 principal 分成两类:用户主体 UPN 和服务主体 SPN。

KDC由三个组件组成:Kerberos 数据库,认证服务(AS)和票证授予服务(TGS)。

主体 principal 命名规范

UPN(用户主体名称)的命名规范:

  • alice@EXAMPLE.COM 用户alice在领域EXAMPLE.COM
  • bob/admin@EXAMPLE.COM 管理员用户bob在领域EXAMPLE.COM

SPN(服务主体名称)的命令规范:

  • hdfs/node1.example.com@EXAMPLE.COM 该主体代表了hdfs 服务的SPN ,位于Kerberos领域EXAMPLE.COM 的主机node1.example.com上。(a service name, a hostname, and a realm)

Kerberos 术语

术语名称描述
TGTTicket-granting ticket一个特殊票据类型,发放给被AS认证成功的用户
TGSTicket-granting service一个验证TGT和授予服务票据的KDC服务
服务票据service ticket用TGT向TGS换取,相当于令牌
keytab filekeytab文件保存了实际的加密密码,用于完成给定主体的密码挑战

Kerberos 流程:一个简单例子

例子使用的数据如下:

  • EXAMPLE.COM Kerberos 领域(realm)
  • Alice 一个系统的用户,UPN是alice@EXAMPLE.COM
  • myservice 主机server1.example.com上的一个服务,SPN是myservice/server1.example.com@EXAMPLE.COM
  • kdc.example.com Kerberos领域EXAMPLE.COM的KDC

Alice为了使用myservice,她需要提交一个有效的服务票据(service ticket)到myservice。下面的步骤显示了她是怎么做的:

  1. Alice 需要获得一个 TGT。为了得到它,她发出一个请求到位于kdc.example.com的KDC,以便证明她是主体alice@EXAMPLE.COM。
  2. AS 的响应提供了一个 TGT,TGT 被主体alice@EXAMPLE.COM的密码加密。
  3. 收到加密的消息后,Alice被提示输入主体alice@EXAMPLE.COM的密码,以便解密消息。
  4. 当成功解密包含TGT的消息后,Alice向位于kdc.example.com的TGS请求myservice/server1.exapmle.com@EXAMPLE.COM的服务票据,TGT随请求一起发出。
  5. TGS验证TGT,提供给Alice一个服务票据(service ticket),服务票据使用主体myservice/server.example.com@EXAMPLE.COM的密码(key)进行加密。
  6. Alice现在提交服务票据到myservice,myservice可以随后使用myservice/server1.example.com@EXAMPLE.COM的密码来解密票据。
  7. 服务myservice准许Alice使用服务,因为她已经被成功认证。

MIT Kerberos

MIT Kerberos的官方网站

当前的版本是 MIT Kerberos V5,或称 krb5。

在之前的例子中,我们提到Alice发送认证请求。在实践中,Alice使用工具kinit做这个。

Example 4-1. kinit using the default user

[alice@server1 ~]$ kinit
Enter password for alice@EXAMPLE.COM:
[alice@server1 ~]$

这个例子使用当前Linux用户名alice和默认领域组合成了建议主体alice@EXAMPLE.COM。kinit工具还允许用户显式指定认证主体。

Example 4-2. kinit using a specified user

[alice@server1 ~]$ kinit alice/admin@EXAMPLE.COM
Enter password for alice/admin@EXAMPLE.COM:
[alice@server1 ~]$

另一个认证选线是使用keytab文件。keytab文件保存了实际的加密密码,用于完成给定主体的密码挑战。创建keytab文件对于非交互式主体很有用,如SPN,它经常与长时间运行进程(如Hadoop守护进程)关联。多个不同主体密码(key)可以存放在同一个keytab文件中。用户可以使用kinit附加一个keytab文件和主体名称(因为keytab文件可能含有多个主体密码)来进行认证。

Example 4-3. kinit using a keytab file

[alice@server1 ~]$ kinit -kt alice.keytab alice/admin@EXAMPLE.COM
[alice@server1 ~]$

另一个有用的MIT Kerberos工具是klist。这个工具允许用户查看在凭据缓存中存在的Kerberos凭据。凭据缓存位于本地文件系统中,当成功被AS认证后,保存TGT。默认地址一般是文件 /tmp/krb5cc_,是本地系统的用户ID。当成功执行kinit,alice可以使用klist显示凭据缓存。

Example 4-4. Viewing the credentials cache with klist

[alice@server1 ~]$ kinit
Enter password for alice@EXAMPLE.COM:
[alice@server1 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_5000
Default principal: alice@EXAMPLE.COM
Valid starting Expires Service principal
02/13/14 12:00:27 02/14/14 12:00:27 krbtgt/EXAMPLE.COM@EXAMPLE.COM
 renew until 02/20/14 12:00:27
[alice@server1 ~]$

如果在认证之前查看凭据缓存,会显示没有发现凭据。

Example 4-5. No credentials cache found

[alice@server1 ~]$ klist
No credentials cache found (ticket cache FILE:/tmp/krb5cc_5000
[alice@server1 ~]$

另一个有用的MIT Kerberos工具是kdestory。就像名称显示的那样,它允许用户删除凭据缓存中的凭据。这个可用于切换用户,或调试新的配置。

Example 4-6. Destroying the credentials cache with kdestroy

[alice@server1 ~]$ kinit
Enter password for alice@EXAMPLE.COM:
[alice@server1 ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_5000
Default principal: alice@EXAMPLE.COM
Valid starting Expires Service principal
02/13/14 12:00:27 02/14/14 12:00:27 krbtgt/EXAMPLE.COM@EXAMPLE.COM
 renew until 02/20/14 12:00:27
[alice@server1 ~]$ kdestroy
[alice@server1 ~]$ klist
No credentials cache found (ticket cache FILE:/tmp/krb5cc_5000
[alice@server1 ~]$

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文