大数据系列之:Kerberos
Kerberos 是一种网络认证协议,广泛用于在不安全的网络环境中提供强盛的身份验证服务。它基于对称密钥加密技术,旨在确保客户端和服务端之间的通信安全,防止未经授权的访问。基本概念
KDC (Key Distribution Center): KDC 是 Kerberos 系统的核心组件,负责天生和分发单子(tickets)。
KDC 通常分为两个部分:
[*]AS (Authentication Server): 负责验证用户的身份,并发放 TGT (Ticket-Granting Ticket)。
[*]TGS (Ticket-Granting Service): 使用 TGT 验证用户身份,并发放服务单子(Service Tickets)。
[*]TGT (Ticket-Granting Ticket): TGT 是 AS 发放的一种特殊单子,用于证实用户已经通过了身份验证。用户可以使用 TGT 向 TGS 哀求服务单子。
[*]Service Ticket: 服务单子是 TGS 发放的一种单子,用户可以使用它来访问特定的服务。
工作流程
用户哀求 TGT:
[*]用户向 AS 发送哀求,包含用户名和时间戳。
[*]AS 验证用户身份(通常通过密码),如果验证乐成,AS 天生一个 TGT 并加密后返回给用户。
用户哀求服务单子:
[*]用户使用 TGT 向 TGS 发送哀求,哀求中包含所需服务的名称。
[*]TGS 验证 TGT,如果验证乐成,TGS 天生一个服务单子并加密后返回给用户。
用户访问服务:
[*]用户将服务单子发送给目的服务。
[*]服务验证服务单子,如果验证乐成,答应用户访问服务。
安全特性
[*]对称密钥加密: Kerberos 使用对称密钥加密技术,确保数据在传输过程中不被盗取或篡改。
[*]时间同步: Kerberos 要求客户端和服务器之间的时间同步,以防止重放攻击。
[*]单子有效期: 单子有有限的有效期,逾期后必要重新获取,这增长了系统的安全性。
应用场景
Kerberos 广泛应用于企业级网络环境,特别是在必要高度安全的身份验证和授权的情况下。
常见的应用场景包罗:
[*]Windows 域环境: Windows 域控制器使用 Kerberos 举行身份验证。
[*]Linux 和 Unix 环境: 许多 Linux 和 Unix 系统支持 Kerberos 身份验证。
[*]Web 服务: 一些 Web 服务使用 Kerberos 举行单点登录(SSO)。
总结
[*]Kerberos 是一种强盛而复杂的认证协议,能够有效保护网络资源不受未授权访问。
[*]通过使用对称密钥加密和时间同步机制,Kerberos 提供了高效且安全的身份验证服务。
加密原理
https://i-blog.csdnimg.cn/direct/e7ad70836619400fbc3c38569d047e76.png
Kerberos认证流程
https://i-blog.csdnimg.cn/direct/55a191640b474b94890c3aa461b15805.png
https://i-blog.csdnimg.cn/direct/0e18842c81e04a718df71dc9735fd221.png
https://i-blog.csdnimg.cn/direct/ca23aef437d04265919dd8f8c46c94d9.png
https://i-blog.csdnimg.cn/direct/738d11d8e7744fefb6373727ef3dbbff.png
https://i-blog.csdnimg.cn/direct/bcbe3d2c949d4053bda965e22c19040d.png
https://i-blog.csdnimg.cn/direct/ac0a2a935ad44ee2a90b7012ef7696f5.png
https://i-blog.csdnimg.cn/direct/434f3b39329649bcb79f84e80cd2185e.png
https://i-blog.csdnimg.cn/direct/257578af707942c6b0071e2e16df4bde.png
https://i-blog.csdnimg.cn/direct/cedd68504d7e470d8359aba486c03400.png
https://i-blog.csdnimg.cn/direct/82e7626fb8724a5c8f3fb29931a50c75.png
https://i-blog.csdnimg.cn/direct/85adc6423a394aa8ac42aef44943d524.png
https://i-blog.csdnimg.cn/direct/774b334cf33f40d491892d597253cf39.png
https://i-blog.csdnimg.cn/direct/7eb2d779462948f2b1fe031724da2df5.png
https://i-blog.csdnimg.cn/direct/660e6b0b929b47fc90a4228745642463.png
https://i-blog.csdnimg.cn/direct/1d9e250f858a4b439c9bdc4d4d908fb4.png
https://i-blog.csdnimg.cn/direct/91739006e8bf4642a21bb432905b4697.png
https://i-blog.csdnimg.cn/direct/8b47fb4e498b4c2d8d4856fe9d0e9057.png
https://i-blog.csdnimg.cn/direct/ce6c64647d0a43d9a5c564c2af2d59e0.png
https://i-blog.csdnimg.cn/direct/14fb13764a8a4e4ca3705573177fa3d5.png
https://i-blog.csdnimg.cn/direct/59724fedf0474b95a5400ee76c621058.png
https://i-blog.csdnimg.cn/direct/cecb1cb45b7f4cf0b615fdaea7af6344.png
https://i-blog.csdnimg.cn/direct/2d6d115fb08b421ebb748520efbe3029.png
https://i-blog.csdnimg.cn/direct/62fbe1d2f9634a2da3f2c5a5a8d74685.png
https://i-blog.csdnimg.cn/direct/4f61e059c22244c99b90a6aebcada3d8.png
https://i-blog.csdnimg.cn/direct/daeccd98796e4acd8b7b242c7013d0db.png
https://i-blog.csdnimg.cn/direct/f770401ecda24624a826b340a7d0055b.png
https://i-blog.csdnimg.cn/direct/90e9e09ddccd425e8865f558d5172018.png
https://i-blog.csdnimg.cn/direct/28e75953cbb247f89330b04ee07c1c7a.png
https://i-blog.csdnimg.cn/direct/d4f07393213a48c0844cf13df84fa8bf.png
klist -ket zeppelin1.bigdata.net.keytab
Keytab name: FILE:zeppelin1.bigdata.net.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 2021-03-03T03:48:45 zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM
kinit -kt zeppelin1.bigdata.net.keytab zeppelin/zeppelin1.bigdata.net@OPTICS.bigdata.COM
https://i-blog.csdnimg.cn/direct/db0d73a6b5804511913d1d42af1fdb0d.png
更改您的密码
要更改您的 Kerberos 密码,请使用 kpasswd 命令。它会要求您输入旧密码(以防止其他人趁您不在时走到您的电脑前并更改您的密码),然后两次提示您输入新密码。(要求您输入两次的缘故原由是为了确保您正确输入了密码。)例如,用户 david 会实行以下操作:
kpasswd
Password for david@EXAMPLE.COM:
Enter new password:
Enter new password again:
授予账户访问权限
如果您必要授予某人登录您的账户的权限,可以通过Kerberos来实现,而无需告诉他们您的密码。只需在您的主目录下创建一个名为.k5login的文件。该文件应包含您希望授予访问权限的每个人的Kerberos主体名称,每个主体名称必须单独占一行。以下是一个示例 .k5login 文件:
jennifer@ATHENA
david@EXAMPLE.COM
此文件将答应用户jennifer和david使用您的用户ID,前提是他们各自领域中的Kerberos单子有效。如果您将在网络上的其他主机上登录,您可能希望在这些主机上的每个.k5login文件中包含您自己的Kerberos主体名称。
使用.k5login文件比直接给出密码要安全得多,因为:
您可以随时通过从.k5login文件中移除相应的主体名称来打消访问权限。
虽然用户对特定主机(或如果您的.k5login文件被共享,例如通过NFS,则是一组主机)上的您的账户有完全访问权限,但他们不会继承您的网络特权。
Kerberos记录了谁获取了单子,因此系统管理员可以在须要时查明特定时间哪些用户能够使用您的用户ID。
一个常见的应用场景是在root用户的主目录中放置一个.k5login文件,列出的Kerberos主体将获得对该机器的root访问权限。这使得系统管理员可以在不透露root密码的情况下,答应用户当地提拔为root,大概远程以root身份登录,同时制止了在网络上传输root密码的风险。
票证管理
在许多系统中,Kerberos 被集成到登录程序中,您在登录时会自动获得票证。其他程序(如 ssh)可以将您的票证副本转发到远程主机。这些程序中的大多数在退出时也会自动烧毁您的票证。然而,MIT 建议您在不再必要票证时明确地烧毁它们,以确保安全。一种确保这一点的方法是将 kdestroy 命令添加到您的 .logout 文件中。别的,如果您要脱离盘算机并且担心入侵者使用您的权限,最安全的做法是烧毁所有票证副本,大概使用锁定屏幕的屏保程序。
Kerberos 单子属性
Kerberos 单子可以具有多种属性:
[*]可转发的单子:如果一个单子是可转发的,那么 KDC 可以基于该可转发单子签发一个新的单子(须要时具有差异的网络地点)。这答应在不重新输入密码的情况下举行身份验证转发。例如,如果拥有可转发 TGT 的用户登录到远程系统,KDC 可以为该用户签发新的 TGT,使用远程系统的网络地点,从而使得在该主机上的身份验证像当地登录一样工作。
[*]当 KDC 基于可转发单子创建新单子时,它会在新单子上设置转发标记。任何基于设置了转发标记的单子创建的单子也将具有其转发标记。
[*]可署理的单子:类似于可转发单子,可署理单子答应服务接管客户端的身份。然而,与可转发单子差异的是,可署理单子仅针对特定服务签发。换句话说,不能基于可署理但不可转发的单子签发票证授予单子。
[*]署理单子:基于可署理单子签发的单子。
[*]预设日期的单子:带有无效标记签发的单子。在单子上列出的开始时间之后,它可以提交给 KDC 以获取有效的单子。
[*]带有预设日期标记的票证授予单子可用于获取预设日期的服务单子。
[*]可续期的单子:可以在用户不重新输入密码的情况下用于获取新的会话密钥。可续期单子有两个逾期时间。第一个是此特定单子逾期的时间。第二个是基于此可续期单子签发的任何单子可能的最晚逾期时间。
[*]初始标记单子:基于身份验证协议签发的单子,而不是基于票证授予单子。希望确保用户的密钥近来已提供验证的应用服务器可以指定此标记必须设置才能接受单子。
[*]无效单子:必须被应用服务器拒绝。预设日期的单子通常带有此标记发出,并且在能够使用之前必须由 KDC 验证。
[*]预先认证的单子:只有在哀求单子的客户端向 KDC 自身举行了认证后才会签发的单子。
[*]硬件认证标记:设置在必要使用硬件举行认证的单子上。预计该硬件仅由哀求单子的客户端持有。
[*]传输计谋检查标记:如果单子设置了此标记,则表明签发该单子的 KDC 实行了跨域检查计谋并检查了单子上的跨域列表。跨域列表包含从首次签发单子的 KDC 所属领域到签发当前单子的 KDC 所属领域的所有中间域。如果没有设置此标记,则应用服务器必须自己检查跨域或拒绝单子。
[*]可作为委托方的标记:表示单子中指定的服务器根据该域的计谋恰当作为委托方。一些客户端应用程序可能会使用此标记来决定是否将单子转发到远程主机,尽管许多应用程序并不平从此标记。
[*]匿名单子:其中的命名主体是该域的通用主体;实际上并没有指定将使用单子的具体个人。这种单子的目的仅仅是安全地分发会话密钥。
使用 kinit 获取单子
如果您的站点已经将 Kerberos V5 与登录系统集成,您在登录时会自动获得 Kerberos 单子。否则,您可能必要显式地获取 Kerberos 单子,使用 kinit 程序。同样,如果您的 Kerberos 单子逾期,也请使用 kinit 程序获取新的单子。
要使用 kinit 程序,只需键入 kinit,然后在提示符下输入您的密码。例如,Jennifer(用户名为 jennifer)在 Bleep, Inc.(一个假造的公司,域名是 mit.edu,Kerberos 领域是 ATHENA.MIT.EDU)工作。她会键入:
shell% kinit
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入 Jennifer 的密码。]
shell%
如果您键入了错误的密码,kinit 会给出以下错误消息:
shell% kinit
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入错误的密码。]
kinit: 密码不正确
shell%
这样您就不会获得 Kerberos 单子。
默认情况下,kinit 假设您希望获取默认领域中自己的用户名的单子。假设 Jennifer 的朋侪 David 来访,并希望借用她的窗口检查邮件。David 必要在自己的领域 EXAMPLE.COM 中获取自己的单子。他会键入:
shell% kinit david@EXAMPLE.COM
david@EXAMPLE.COM 的密码: <-- [在这里键入 David 的密码。]
shell%
David 就可以使用这些单子登录到他自己的机器。请注意,他在 Jennifer 的机器上当地输入了自己的密码,但从未通过网络传输。当地主机上的 Kerberos 完成了对另一个领域中的 KDC 的身份验证。
如果您希望将单子转发到另一台主机,必要哀求可转发的单子。您可以通过指定 -f 选项来实现这一点:
shell% kinit -f
jennifer@ATHENA.MIT.EDU 的密码: <-- [在这里键入您的密码。]
shell%
请注意,kinit 不会告诉您它已获取了可转发的单子;您可以使用 klist 命令举行验证(参见 使用 klist 检察单子)。
通常,您的单子有效期为您系统默认的单子生命周期,许多系统默以为十小时。您可以使用 -l 选项指定差异的单子生命周期。在值后添加字母 s 表示秒,m 表示分钟,h 表示小时,d 表示天。例如,要获取有效期为三小时的可转发单子给 david@EXAMPLE.COM,您会键入:
shell% kinit -f -l 3h david@EXAMPLE.COM
david@EXAMPLE.COM 的密码: <-- [在这里键入 David 的密码。]
shell%
注意
您不能混合单元;指定 3h30m 的生命周期会导致错误。别的,请注意大多数系统指定了最大单子生命周期。如果您哀求的单子生命周期超过最大值,它将自动收缩为最大生命周期。
使用 klist 检察单子
klist 命令用于显示您的单子。当您首次获取单子时,通常只会有一个单子授予单子。列表看起来会是这样的:
shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDU
Valid starting Expires Service principal
06/07/04 19:49:2106/08/04 05:49:19krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
shell%
单子缓存是指您的单子文件的位置。在上面的例子中,此文件名为 /tmp/krb5cc_ttypa。默认主体是您的 Kerberos 主体。
“有效开始时间”和“到期时间”字段形貌了单子的有效期间。“服务主体”形貌了每个单子。单子授予单子的第一部分为 krbtgt,第二部分为领域名称。
如今,假设 jennifer 毗连到主机 daffodil.mit.edu,然后再次输入 klist,她将看到以下结果:
shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDU
Valid starting Expires Service principal
06/07/04 19:49:2106/08/04 05:49:19krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:3006/08/04 05:49:19host/daffodil.mit.edu@ATHENA.MIT.EDU
shell%
这里发生了什么:当 jennifer 使用 ssh 毗连到主机 daffodil.mit.edu 时,ssh 程序向 KDC 展示了她的单子授予单子,并哀求了一个针对主机 daffodil.mit.edu 的主机单子。KDC 发送了主机单子,ssh 随后将该单子展示给主机 daffodil.mit.edu,因此她无需输入密码即可登录。
假设您的 Kerberos 单子答应您登录到另一个域中的主机,例如 trillium.example.com,该主机也位于另一个 Kerberos 领域 EXAMPLE.COM。如果您 ssh 到这个主机,您将收到一个针对 EXAMPLE.COM 领域的单子授予单子,以及一个新的针对 trillium.example.com 的主机单子。klist 将显示如下内容:
% klist
shell% klist
Ticket cache: /tmp/krb5cc_ttypa
Default principal: jennifer@ATHENA.MIT.EDU
Valid starting Expires Service principal
06/07/04 19:49:2106/08/04 05:49:19krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
06/07/04 20:22:3006/08/04 05:49:19host/daffodil.mit.edu@ATHENA.MIT.EDU
06/07/04 20:24:1806/08/04 05:49:19krbtgt/EXAMPLE.COM@ATHENA.MIT.EDU
06/07/04 20:24:1806/08/04 05:49:19host/trillium.example.com@EXAMPLE.COM
shell%
根据您的主机和领域的配置,您还可能看到一个服务主体为 host/trillium.example.com@ 的单子。如果是这样,这意味着您的主机不知道 trillium.example.com 所属的领域,因此它向 ATHENA.MIT.EDU KDC 哀求了引荐。下次您毗连到 trillium.example.com 时,这条希奇的记录将用于制止再次哀求引荐。
根据您的主机和域的配置,您可能会看到一个带有服务主体 host/trillium.example.com@ 的单子。如果出现这种情况,这意味着您的主机不知道 trillium.example.com 属于哪个域,因此它向 ATHENA.MIT.EDU 的 KDC 哀求了引荐。下次您毗连到 trillium.example.com 时,这个看起来希奇的条目将被用于制止再次哀求引荐。
您可以使用 -f 选项检察实用于您的单子的标记。这些标记包罗:
F: 可转发(Forwardable)
f: 已转发(forwarded)
P: 可署理(Proxiable)
p: 署理(proxy)
D: 可预设日期(postDateable)
d: 预设日期(postdated)
R: 可续期(Renewable)
I: 初始(Initial)
i: 无效(invalid)
H: 硬件认证(Hardware authenticated)
A: 预认证(preAuthenticated)
T: 转发计谋已检查(Transit policy checked)
O: 可委托(Okay as delegate)
a: 匿名(anonymous)
以下是一个示例列表。在这个例子中,用户 Jennifer 获取了初始单子(I),这些单子是可转发的(F)和预设日期的(d),但尚未验证(i):
shell% klist -f
Ticket cache: /tmp/krb5cc_320
Default principal: jennifer@ATHENA.MIT.EDU
Valid starting Expires Service principal
31/07/05 19:06:2531/07/05 19:16:25krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
Flags: FdiI
shell%
在以下示例中,用户 david 的单子从另一台主机转发(f)到此主机。这些单子是可以再次转发的(F)
shell% klist -f
Ticket cache: /tmp/krb5cc_p11795
Default principal: david@EXAMPLE.COM
Valid starting Expires Service principal
07/31/05 11:52:2907/31/05 21:11:23krbtgt/EXAMPLE.COM@EXAMPLE.COM
Flags: Ff
07/31/05 12:03:4807/31/05 21:11:23host/trillium.example.com@EXAMPLE.COM
Flags: Ff
shell%
使用 kdestroy 烧毁单子
您的 Kerberos 单子是证实您确实是您自己的根据,如果有人获得了存储这些单子的盘算机的访问权限,单子可能会被盗取。一旦发生这种情况,拥有这些单子的人可以在单子逾期之前冒充您。因此,当您脱离盘算机时,应该烧毁您的 Kerberos 单子。
烧毁单子非常简单。只需输入 kdestroy:
shell% kdestroy
shell%
如果 kdestroy 未能烧毁您的单子,它会发出提示音并显示错误消息。例如,如果 kdestroy 找不到任何可烧毁的单子,它会显示以下消息:
shell% kdestroy
kdestroy: 在销毁缓存时未找到凭据缓存文件
shell%
.k5identity 文件形貌
.k5identity 文件位于用户的家目录中,包含了一组规则,用于根据访问的服务器选择客户端主体。这些规则用于在可能的情况下从缓存聚集中选择一个根据缓存。
空缺行和以 # 开头的行将被忽略。每一行的格式如下:
principal_field=value ...
如果服务器主体满足所有字段约束条件,则选择该主体作为客户端主体。以下字段被辨认:
[*]realm
[*]如果已知服务器主体的域(realm),则将其与值举行匹配,该值可以使用 shell 通配符。对于基于主机的服务器主体,通常只有在 krb5.conf 中有主机名映射时,域才会被知道。
[*]service
[*]如果服务器主体是基于主机的主体,则将其服务组件与值举行匹配,该值可以使用 shell 通配符。
[*]host
[*]如果服务器主体是基于主机的主体,则将其主机名组件转换为小写,并与值举行匹配,该值可以使用 shell 通配符。
[*]如果服务器主体符合 .k5identity 文件中的多个行的约束条件,则使用第一个匹配行的主体。如果没有行匹配,则将通过其他方式选择根据,例如域开导式或当前主要缓存。
示例
以下示例 .k5identity 文件在服务器主体属于该领域时选择客户端主体 alice@KRBTEST.COM,在服务器主机位于子域内时选择主体 alice/root@EXAMPLE.COM,以及在访问 mail.example.com 上的 IMAP 服务时选择主体 alice/mail@EXAMPLE.COM:
alice@KRBTEST.COM realm=KRBTEST.COM
alice/root@EXAMPLE.COMhost=*.servers.example.com
alice/mail@EXAMPLE.COMhost=mail.example.com service=imap
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]