一、Kerberos系统原理
Kerberos是一个网络验证协议,它用于基于密钥密码系统的客户/服务器程序的验证。设计Kerberos的目的和F-Secretssh类似。这两个系统最大的不同是当目标服务器使用ssh进行验证的时候,Kerberos验证服务器可以提供由不同服务器提供的,面向大量客户端的多个服务验证。由Kerberos验证数据库实现的多对多的关系使得网络验证过程更新颖而且高效。Kerberos还可以提供在防火墙内部和外部的同时验证,要这样验证原因是很多攻击往往来自内部的可信网络。另外,Kerberos第五版本提出了领域(realms)的概念,可以将它看成是可信的网络。
Kerberos还有一个优点是这个协议已经被发表并被广泛地散布,一个包括源代码的免费程序可以在MIT得到:http://web.mit.edu/network/kerberos-form.html 目前的Kerberos版本是第五版V1.4.2。Solaris 7自带的认证过程是基于Kerberos四版的,而Solaris8和Solaris9和Solaris10都是基于第五版的。Kerberos是以证书授权和验证(certificate-grantingandvalidation)系统的,证书被称为“门票”(tickets)。如果一个客户端机器想要同目标服务器建立一个连接,它首先要从集中验证服务器处申请一张门票(ticket),该服务器物理上可以同目标服务器是同一台机器,但是逻辑上是分开的。
由验证服务器产生的加密后的门票(ticket)准许客户端去请求一个指定主机的指定服务,通常还要有一个指定的时间期限。这点和使用一张允许在一个指定的街道停一两个小时的停车票有些类似。第五版的Kerberos甚至支持将这个门票(ticket)延期续订。服务器请求验证时,它产生一个会话密钥,这个密钥是根据你的用户名获得的密码和说明你请求的服务的一个随机数产生的。这个会话密钥就像是客户端的一个凭证,客户端然后将它发送到门票发放(ticket-granting)服务器,这个服务器然后返回给客户端它将用来访问目标服务器的门票(ticket)。很明显,向验证服务器、门票发放服务器和目标服务器发送请求有一些额外开销。然而,和冒着重要数据被拦截的危险相比,这些开销还是很值得。验证的过程如图1所示。

图1分布式Kerberos5的验证
二、配置实例
1 配置工具
Kerberos包括如下管理工具:
Kerberos 数据库管理守护进程-kadmind
Kerberos 票证处理守护进程-krb5kdc
Kerberos应用管理程序: kadmin
数据库管理程序-kadmin 和 kadmin.local。
Kerberos GUI管理工具: gkadmin ,如图2 。

图2 Kerberos GUI管理工具 gkadmin
2 主文件
如果已知相应的网络资源,Kerberos的设置相当简单。一个包含设置内容的配置文件
/
刚才的配置文件是为一个叫cassowary.net的域写的,这个域有一个逻辑上的管理服务器叫etc/krb5.conf如下:
[libdefaults]
default_realm = CASSOWARY.NET
[realms]
CASSOWARY.NET = ...{
kdc = KERBEROS1.CASSOWARY.NET
KERBEROS2.CASSOWARY.NET
admin_server = KERBEROS1.CASSOWARY.NET
}
[logging]
default = FILE:/var/krb5/kdc.log
kdc = FILE:/var/krb5/kdc.log
kdc_rotate = ...{
period = 1d
versions = 10
}
[appdefaults]
kinit = ...{
renewable = true
forwardable= true
}
gkadmin = ...{
help_url = http://docs.sun.com:80/ab2/coll.384.1/SEAM/
@AB2PageView/1195
}
kerberos1.cassowary.net,还有一个备份服务器叫kerberos2.cassowary.net。
3 配置主kdc
KDC 由文件 /etc/krb5/kdc.conf设置:
[kdcdefaults]
kdc_ports = 88,750
[realms]
CASSOWARY.NET = ...{
profile = /etc/krb5/krb5.conf
database_name = /var/krb5/principal
admin_keytab = /etc/krb5/kadm5.keytab
使用命令/kdb5_util 初始化KDC
# /usr/sbin/kdb5_util create -r CASSOWARY.NET -s
Initializing database '/var/krb5/principal' for realm 'CASSOWARY.NET',
master key name 'K/M@CASSOWARY.NET'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
编辑 Kerberos 访问控制列表文件 (kadm5.acl)。
填充后,/etc/krb5/kadm5.acl 文件应包含允许管理 KDC 的所有主体名称。
pwatters/admin@CASSOWARY.NET *
启动 kadmin.local 命令并添加主体。
接下来的子步骤创建 Kerberos 服务使用的主体。
启动 Kerberos 守护进程。kdc1 # /usr/sbin/kadmin.local
kadmin.local:
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/
kerberos1.cassowary.net
Entry for principal kadmin/kerberos1.cassowary.net with kvno 3,
encryption type
DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc1.example.com
Entry for principal kadmin/kerberos1.cassowary.net with kvno 3,
encryption type
DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw
Entry for principal kadmin/kerberos1.cassowary.net with kvno 3,
encryption type
DES-CBC-CRC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
kadmin.local:quit
# /etc/init.d/kdc start
# /etc/init.d/kdc.master start
三、Kerberos系统的缺点
Kerberos系统的一个缺点是它的加密技术出口的合法性(legalstatus)还不是很明朗。厂商已经得到了出口国际二进制版本产品的许可,然而美国商业部(CommerceDepartment)的原则是一个产品一个产品的审批。详细信息请参考:ftp://ftp.cygnus.com/pub/export/export.html
任何一个安全产品都有一定的危险性,需要先记录日志然后执行。特别的,在基于系统日志(syslog)的验证体系中有一个广为人知的bug,这导致它具有遭受拒绝服务(denial-of-serviceDOS)攻击的可能。在即将发布的版本中,这个错误已被改正,然而对集中服务系统潜在攻击的可能性成为了Kerberos系统的一个弱点。例如,即使验证服务器和目标服务器都在运行,向门票发放(ticket-granting)服务器的持续大量的请求可能中断任何需要验证的网络服务。