@xtccc
2015-09-22T09:34:46.000000Z
字数 2520
阅读 3253
Kerberos
参考:
+ Kerberos Infrastructure HOWTO
+ What is a keytab, and how do I use one?
Kerberos是一个用于鉴定身份(authentication)的协议, 它采取对称密钥加密(symmetric-key cryptography),这意味着密钥不会在网络上传输。在Kerberos中,未加密的密码(unencrypted password)不会在网络上传输,因此攻击者无法通过嗅探网络来偷取用户的密码。
Kerberos利用对称加密和受信任的第三方(即KDC, key distribution center)来鉴别要求使用网络服务的用户的身份。所有有KDC和secondary KDC管理的主机构成了一个域(realm)。
当一个用户的身份通过了KDC的验证后,KDC会向该用户发送一个证书/票据(该证书/票据是与这次会话绑定的),其他kerberized services会在该用户的主机上搜索该ticket,而不是要求用户使用密码来验证他的身份。
prinicipal
一个用户会以一个独一无二的身份来被KDC认证,该身份被称为principal。一个Principal由三个部分组成:primary, instance以及realm,其组成形式为primary/instance@realm
。
Keytab文件
参考 What is a keytab, and how do I use one?
Kerberos clietnt
Kerberos server
Kerberos KDC
KDC可以有多个,其中1个是master KDC,其余的是secondary KDC,这样可以通过冗余来保证可用性。
通过KDC验证的servers可以被realm中的其他所有主机信任。
当用户在一个kerberos-aware网络中登录到他的workstation之后,authentication server将向KDC发送一个TGT请求(a request for a ticket-granting ticket),而他的principal将作为其中的组成部分。该请求可以由登录程序来负责发送(这样该过程对用户透明),也可以在用户登录后通过执行kinit
来发送。
KDC在其数据库中检查该pricipal。
如果找到了该principal,则KDC将创建一个TGT,并用user key进行加密,然后将加密后的TGT发送给该用户。这里,user key并不是用户的密码,而是由用户密码计算而来(例如hash)。
用户所在主机的Kerberos client的登录程序或者kinit程序在收到加密的TGT后,用该用户的user key进行解密。user key只会在client主机上被使用,绝不会在网络上传输。KDC发送的ticket将被保存在一个本地文件中(credentials cache),它可以被kerberized services查验。
用户的身份验证完成后,servers(运行着kerberized applciations & services)可以查验被识别的principals及其keys(这将被保存在keytab中),而不必用kinit来查验。
TGT有一个可设定的失效期(通常为10~24小时),这会被保存在client所在主机的credential cache中。在ticket过期之前,用户在请求kerberized services的服务时不需要再次输入用户密码,除非他们登出后再登录。
每当用户需要访问一个network service时,client会利用TGT向TGS(ticket-granting server)请求获得针对该特定网络服务的一个新的ticket。之后,用户可以利用该service ticket来向该network service实现authentication。
Name | Description |
---|---|
Cient Applications | |
kinit | obtain and cache a TGT |
kdestroy | destroy Kerberos credentials |
klist | list cached Kerberos credentials |
Administrative Applications | |
kadmin | administer the Kerberos V5 database |
kdb5_util | create and perform low-level administrative fucntions on the Kerberos V5 database |
Server Applications | |
kadmind | start the KADM5 administration server |
Configuration Files | |
krb5.conf | configurations for the Kerberos V5 library |
kdc.conf | configurations for the Kerberos V5 AS and KDC |
KDC就是受信任的第三方(trusted third party arbitrator),KDC上运行着2个重要的Kerberos daemons,即 kadmind 和 krb5kdc。
+ kadmind
: 这是管理Kerberos server的进程,一个名为kadmin 的程序使用 kadmind 来维护principal database和policy configuration。
+ krb5kdc
:在Kerberos authentication的过程中担负trusted third party arbitrator的职责。