kerberos 主体 principal 分成两类:用户主体 UPN 和服务主体 SPN。
KDC由三个组件组成:Kerberos 数据库,认证服务(AS)和票证授予服务(TGS)。
UPN(用户主体名称)的命名规范:
SPN(服务主体名称)的命令规范:
术语 | 名称 | 描述 |
---|---|---|
TGT | Ticket-granting ticket | 一个特殊票据类型,发放给被AS认证成功的用户 |
TGS | Ticket-granting service | 一个验证TGT和授予服务票据的KDC服务 |
服务票据 | service ticket | 用TGT向TGS换取,相当于令牌 |
keytab file | keytab文件保存了实际的加密密码,用于完成给定主体的密码挑战 |
例子使用的数据如下:
Alice为了使用myservice,她需要提交一个有效的服务票据(service ticket)到myservice。下面的步骤显示了她是怎么做的:
当前的版本是 MIT Kerberos V5,或称 krb5。
在之前的例子中,我们提到Alice发送认证请求。在实践中,Alice使用工具kinit做这个。
- [alice@server1 ~]$ kinit
- Enter password for alice@EXAMPLE.COM:
- [alice@server1 ~]$
-
这个例子使用当前Linux用户名alice和默认领域组合成了建议主体alice@EXAMPLE.COM。kinit工具还允许用户显式指定认证主体。
- [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文件可能含有多个主体密码)来进行认证。
- [alice@server1 ~]$ kinit -kt alice.keytab alice/admin@EXAMPLE.COM
- [alice@server1 ~]$
-
另一个有用的MIT Kerberos工具是klist。这个工具允许用户查看在凭据缓存中存在的Kerberos凭据。凭据缓存位于本地文件系统中,当成功被AS认证后,保存TGT。默认地址一般是文件 /tmp/krb5cc_,是本地系统的用户ID。当成功执行kinit,alice可以使用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 ~]$
-
如果在认证之前查看凭据缓存,会显示没有发现凭据。
- [alice@server1 ~]$ klist
- No credentials cache found (ticket cache FILE:/tmp/krb5cc_5000
- [alice@server1 ~]$
-
另一个有用的MIT Kerberos工具是kdestory。就像名称显示的那样,它允许用户删除凭据缓存中的凭据。这个可用于切换用户,或调试新的配置。
- [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 ~]$