信息系统安全实验(七):使用Kerberos实现网络身份认证

这是信息系统安全实验系列的第七篇~

1. 背景知识

(1)概述

       Kerberos又指麻省理工学院为这个协议开发的一套计算机网络安全系统。系统设计上采用客户端/服务器结构与DES加密技术,并且能够进行相互认证,即客户端和服务端均可对对方进行身份认证。

(2)概念

①    **分发中心(KDC)

       Kerberos使用了一个由两个独立的逻辑部分:认证服务器(同身份认证服务器)和票据授权服务器(同服务审批服务器)组成的“可信赖的第三方”,称为**分发中心(KDC)。Kerberos工作在用于证明用户身份的“票据”的基础上。

②    Kerberos域

       Kerberos域(realm)是一组受管节点,它们共享同一 Kerberos 数据库。Kerberos数据库驻留在Kerberos主控计算机系统上,对数据库的所有更改都必须在主控计算机系统进行。更改或访问 Kerberos 数据库要求有 Kerberos 主控密码。

③    Kerberos 主体

       Kerberos 主体(principal)是 Kerberos 系统知道的服务或用户。每个 Kerberos 主体通过主体名称进行标识。主体名称由三部分组成:服务或用户名称、实例名称以及域名,其中实例部分是可选的。

       例如,主体名称可以描述用户主体在特殊域中的用户所拥有的授权角色,例如,[email protected]。主体名称还可以描述服务主体的计算机系统上的服务的位置,例如,[email protected]。Kerberos将不同计算机系统上的同一服务视为不同的服务主体。

       每个主体有主体密码,Kerberos在其认证过程中使用该密码对服务和用户进行相互鉴别。使用 Kerberos,网络中一台计算机系统上的主体可以很有把握地与网络中另一台计算机系统上的主体进行对话,了解服务或用户是什么或谁在说话。

       当用户作为 Kerberos 主体登录时,Kerberos 给用户分配一张票券。每张票券都有生命期,它决定票券有效的时间长度。当票券过期时,该主体不再是可信的,无法执行额外工作,直到获得一张新的票券。

2. 实验目的

       学习Kerberos的安装和配置方法,掌握和了解Kerberos的工作原理和实现原理,使用Kerberos实现网络身份认证。

3. 实验环境

       两台安装了Ubuntu 12.04的主机,Kerberos等软件。

4. 实验过程记录

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                                        图1(身份认证流程图)

(1)Kerberos服务端配置

①    NTP安装及配置

       Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。

  • 输入命令sudo apt-get install ntp,如图2所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                                图2(安装ntp)

  • 输入命令sudo gedit /etc/ntp.conf,将内容替换为如下内容:

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).

server 127.127.1.0

fudge 127.127.1.0 stratum 8

server ntp.time.ac.cn prefer

server cn.pool.ntp.org prefer

server hk.pool.ntp.org prefer

server 0.asia.pool.ntp.org

server 1.asia.pool.ntp.org

restrict -4 default kod notrap nomodify nopeer noquery

restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap

restrict 127.0.0.1

如图3所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                     图3(修改配置文件)

  • 输入sudo service ntp restart和watch ntpq -p,如图4所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                           图4(重启ntp服务)

②    Kerberos安装及配置

  • 新开启一个终端,输入cat /etc/hostname查看主机名称,如图5所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                              图5(查看主机名称)

       输入ifconfig -a查看ip,如图6所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                        图6(查看ip地址)

  • 输入sudo apt-get install krb5-kdc krb5-admin-server安装 Kerberos

       输入域名,如图7所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                             图7(输入域名)

       输入服务器名称,如图8所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                            图8(输入服务器名称)

       输入管理服务器名称,如图9所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                 图9(输入管理服务器名称)

  • 输入sudo krb5_newrealm,使用密码为iss2013。如图10所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                     图10(创建新的域)

  • 输入sudo gedit /etc/krb5kdc/kdc.conf,添加如下信息,使得支持日志功能:

[logging]

          kdc = FILE:/var/log/krb5kdc.log

       如图11所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                      图11(添加日志功能)

       输入sudo kadmin.local,再依次输入如下命令:

kadmin.local: addprinc admin/admin,设置密码为123456(客户端登录密码),如图12-1所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                           图12-1(添加主体-1)

       kadmin.local: ktadd -k /etc/kadm5.keytab kadmin/admin kadmin/changepw,如图12-2所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                         图12-2(添加主体-2)

kadmin.local: addprinc -randkey ftp/服务器域名,如图12-3所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                         图12-3(添加主体-3)

kadmin.local: ktadd -k /etc/ftp.keytab ftp/服务器域名,如图12-4所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                         图12-4(添加主体-4)

kadmin.local: quit

  • 输入sudo gedit /etc/krb5kdc/kadm5.acl,在最后添加一行:

*/[email protected]服务器域名   *,如图13所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                   图13(管理员用户配置ACL权限)

  • 输入sudo /etc/init.d/krb5-admin-server restart,如图14所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

             图14(重启 krb5-admin-server 使ACL配置生效)

  • 输入kinit admin/admin并输入密码(123456),再输入klist,如图15所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                           图15(验证新添加的管理员用户)

(2)Kerberos客户端配置

①    NTP安装及配置

  • 输入命令sudo apt-get install ntp,如图16所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                              图16(安装ntp

  • 输入命令sudo gedit /etc/ntp.conf,将内容替换为如下内容:

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

statistics loopstats peerstats clockstats

filegen loopstats file loopstats type day enable

filegen peerstats file peerstats type day enable

filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).

server 127.127.1.0

fudge 127.127.1.0 stratum 8

server ntp.time.ac.cn prefer

server cn.pool.ntp.org prefer

server hk.pool.ntp.org prefer

server 0.asia.pool.ntp.org

server 1.asia.pool.ntp.org

restrict -4 default kod notrap nomodify nopeer noquery

restrict 192.168.80.0 mask 255.255.255.0 nomodify notrap

restrict 127.0.0.1

如图17所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                            图17(修改配置文件)

  • 输入sudo service ntp restart和watch ntpq -p,如图18所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                         图18(重启ntp服务)

  • 输入sudo ntpdate -u 服务器IP地址(192.168.80.134),如果 offset 没有降至1秒以下,继续输入上面的命令,直到两台机器时间同步。输入date命令查看时间,如图19所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

信息系统安全实验(七):使用Kerberos实现网络身份认证

          图19(同步服务器时间)

②    Kerberos安装及配置

  • 新开启一个终端,输入sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config安装 Kerberos

       输入服务器域名,如图20所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                 图20(输入服务器域名)

       输入服务器名称,如图21所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                       图21(输入服务器名称)

       输入管理服务器名称,如图22所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                      图22(输入管理服务器名称)

  • 输入sudo gedit /etc/krb5.conf,检查一下Kerberos realm的名字是否和服务器的 realm 一样,如图23所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                  图23(检查域名)

       域名与服务器域名相同。

  • 输入sudo gedit /etc/hosts,把服务器的 IP 地址和对应的主机名添加上去,如图24所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                          图24(绑定主机)

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                      图25(验证客户端配置是否正确)

       有 ticket 信息,说明配置成功。

(3)简答题

①    说明客户机与三类服务器所需完成的任务及以及这种身份认证方式的优缺点?

*流程说明

ⅰ)用户将用户名和口令输入客户机,请求登录;

ⅱ)客户机将用户输入的用户名及其他信息打包为身份认证请求,发给身份认证服务器;

ⅲ)身份认证服务器在确认用户名合法后,生成用于和服务审批服务器对话的会话**Ksess-1和用服务审批服务器的**Kgrant加密过的通行证Tgrant(Tgrant中含有Ksess-1的内容),将它们打包,并用身份认证信息库中对应用户的口令加密这个包,把加密后的包传给客户机;

ⅳ)客户机用用户输入的口令解密身份认证服务器传来的包,如果解密成功(比如时间戳等信息不是乱码)则该用户通过了身份认证,得到了Ksess-1和用Kgrant加密过的Tgrant。客户机向服务审批服务器发送用Ksess-1加密过的服务认证请求Qgrant和用Kgrant加密过的Tgrant

ⅴ)服务审批服务器用自己的**解密得到Tgrant,用Tgrant中的Ksess-1解密得到Qgrant,根据Tgrant和Qgrant的信息判断该用户是否可以使用请求的服务,若可以,则通过了服务认证。服务审批服务器生成服务卡Tserv(Tserv中含有Ksess-2)和用于和应用服务器对话的会话**Ksess-2,把Ksess-2和用应用服务器**Kserv加密过的Tserv打成一个包,用Ksess-1加密后,传给客户机;

ⅵ)客户机用Ksess-1解密服务审批服务器传来的包,如果解密成功(比如时间戳等信息不是乱码)则该用户通过了身份认证,得到Ksess-2和加密过的Tserv。客户机向应用服务器发送用Ksess-2加密过的服务请求Qserv和用Kserv加密过的Tserv

ⅶ)应用服务器用自己的**Kserv解密Tserv,并从Tserv中得到Ksess-2,用Ksess-2解密服务请求,最后启动应用服务。

 

*各自的任务

客户机:第ⅱ步中将用户输入的用户名及其他信息打包为身份认证请求,发给身份认证服务器;第ⅳ步中用用户输入的口令解密身份认证服务器传来的包,并向服务审批服务器发送用Ksess-1加密过的服务认证请求Qgrant和用Kgrant加密过的Tgrant;第ⅵ步中用Ksess-1解密服务审批服务器传来的包,并向应用服务器发送用Ksess-2加密过的服务请求Qserv和用Kserv加密过的Tserv;最后,提供用户接受服务的接口。

身份认证服务器(存储用户名及其口令):第ⅲ步中在确认用户名合法后,生成用于和服务审批服务器对话的会话**Ksess-1和用服务审批服务器的**Kgrant加密过的通行证Tgrant(Tgrant中含有Ksess-1的内容),将它们打包,并用身份认证信息库中对应用户的口令加密这个包,把加密后的包传给客户机。

服务审批服务器(存储不同类型的用户分别可以使用什么服务):第ⅴ步中用自己的**解密得到Tgrant,用Tgrant中的Ksess-1解密得到Qgrant,根据Tgrant和Qgrant的信息判断该用户是否可以使用请求的服务,若可以,则通过了服务认证。服务审批服务器生成服务卡Tserv(Tserv中含有Ksess-2)和用于和应用服务器对话的会话**Ksess-2,把Ksess-2和用应用服务器**Kserv加密过的Tserv打成一个包,用Ksess-1加密后,传给客户机;

应用服务器:第ⅶ步中用自己的**Kserv解密Tserv,并从Tserv中得到Ksess-2,用Ksess-2解密服务请求,最后启动应用服务。

 

*优缺点

优点:可以实现面向服务的再度认证,即让不同类型的用户拥有对不同服务的使用权限;在用户通过身份认证后,需要使用不同服务时,无需再进行身份认证,只需进行服务认证即可;用户在使用过程中,仅在登录时要求输入口令,与平常的操作完全一样,Kerberos的存在对于合法用户来说是透明的;可扩展性好:Kerberos为每一个服务提供认证,确保应用的安全;实现了双向认证:Client在访问Server的资源之前,可以要求对Server的身份执行认证;对于不同的平台可以进行广泛的互操作。

缺点:用户名及其口令都存储在身份认证服务器的信息库中,增大了安全风险;采用的是对称加密机制,加密和解密使用的是相同的**,交换**时的安全性比较难以保障;随用户数增加**管理较复杂;AS和TGS是集中式管理,容易形成瓶颈,系统的性能和安全也严重依赖于AS和TGS的性能和安全;服务器在回应时不验证用户的真实性,而是假设只有合法用户拥有口令字,存在一定的安全风险。

 

②    在Kerberos服务端,查询KDC的配置文件,说明KDC支持的加密方式有哪些?

在服务端输入sudo gedit /etc/krb5kdc/kdc.conf,查看文件,如图26所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                       图26(查询KDC的配置文件)

       由文件内容可知,KDC支持的加密方式包括:

aes256-cts:normal

arcfour-hmac:normal

des3-hmac-sha1:normal

des-cbc-crc:normal

des:normal

des:v4

des:norealm

des:onlyrealm

des:afs3

 

③    使用命令# man kadmin,说明在配置服务端时步骤3涉及语句的含义?

语句

含义

kadmin.local

以超级管理员身份进入kadmin

addprinc admin/admin

生成指定口令的用户主体admin(需两次输入口令)

ktadd -k /etc/kadm5.keytab kadmin/admin kadmin/changepw

将kadmin/admin主体和kadmin/changepw主体添加至**表文件/etc/kadm5.keytab

addprinc -randkey ftp/服务器域名

生成服务主体ftp/服务器域名并配以一个随机口令

ktadd -k /etc/ftp.keytab ftp/服务器域名

将ftp/服务器域名主体添加至**表文件/etc/ftp.keytab

quit

退出kadmin

 

④    分别在客户端和服务端输入klist命令,输出结果是什么,说明其含义?

服务端:输入klist命令后如图27所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                          图27(服务端输入klist)

客户端:输入klist命令后如图28所示:

信息系统安全实验(七):使用Kerberos实现网络身份认证

                                                          图28(客户端输入klist)

在不输入任何参数时,klist命令将列出在缺省凭证高速缓存中的所有条目,上图中包括用户主体名称及ticket的基本信息等,如ticket的生效时间、失效时间、服务器主体名称,缓存的更新时间等等。

 

 

*参考资料

http://web.mit.edu/kerberos/krb5-devel/doc/admin/admin_commands/kadmin_local.html