首页 > 代码库 > kerboros安装

kerboros安装

尽管前面尝试了hadoop的simple认证方式,这种方法不是特别安全,在介绍一下hadoop的kerberos方式之前,下面我们尝试一下kerberos。

首先介绍一下Kerboros安装

OS 版本: Centos6.4

Kerberos版本: krb5-1.10.3

环境配置

机器名

Ip地址

功能

安装模块

custom.lllcloud.com

192.168.124.133

Kerberos server

krb5-libs

krb5-server

krb5-workstation

krb5-devel

client.lllcloud.com

192.168.124.141

client

krb5-libs

krb5-workstation

krb5-appl-clients

server.lllcloud.com

192.168.124.142

server

Krb5-libs

Krb5-workstation

krb5-appl-servers

在custom.lllcloud.com上安装kerberos server

yum install krb5-libs

yum install krb5-server

yum install krb5-workstation

yum install krb5-devel

 

在client.lllcloud.com上安装client

yum install krb5-libs

yum install krb5-workstation

yum install krb5-appl-clients

 

在server.lllcloud.com上安装server

yum install krb5-libs

yum install krb5-workstation

yum install krb5-appl-servers

 

关闭防火墙

chkconfig iptables off

service iptables stop

 

在所有的机器上配置/etc/hosts文件,相当于DNS解析

Vi /etc/hosts

192.168.124.133 custom.lllcloud.com custom

192.168.124.142 server.lllcloud.com server

192.168.124.141 client.lllcloud.com client

 

配置kerberos server

vi /etc/krb5.conf 主要修改realm

 

[logging]

 default = FILE:/var/log/krb5libs.log

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

 admin_server = FILE:/var/log/kadmind.log

 

[libdefaults]

 default_realm = LLLCLOUD.COM

 dns_lookup_realm = false

 dns_lookup_kdc = false

 ticket_lifetime = 24h

 renew_lifetime = 7d

 forwardable = true

 

[realms]

 LLLCLOUD.COM = {

  kdc = custom.lllcloud.com

  admin_server = custom.lllcloud.com

  default_domain = lllcloud.com

 }

 

[domain_realm]

 .lllcloud.com = LLLCLOUD.COM

 lllcloud.com = LLLCLOUD.COM

 

vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]

 kdc_ports = 88

 kdc_tcp_ports = 88

 

[realms]

 LLLCLOUD.COM = {

  #master_key_type = aes256-cts

  acl_file = /var/kerberos/krb5kdc/kadm5.acl

  dict_file = /usr/share/dict/words

  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab

  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal

 }

 

vi /var/kerberos/krb5kdc/kadm5.acl

*/admin@LLLCLOUD.COM    *

 

在配置完kerberos的配置文件后,创建kerberos数据库

kdb5_util create -r LLLCLOUD.COM –s

kerberos提供了两个管理工具:kadmin.local, kadmin

kadmin.local 必须运行在kerberos server上

kadmin可以运行在任何机器上,但是必须在kerberos server上启动kadmin服务

这两个管理工具可以创建principal, policy, keytab

对象

创建

删除

修改

查找

列举

principal

addprinc

delprinc

modprinc

getprinc

listprincs

policy

addpol

delpol

modpol

getpol

listpols

keytab

ktadd

ktremove

 

 

 

 

创建管理员

kadmin.local

addprinc admin/admin@LLLCLOUD.COM

getprinc admin/admin@LLLCLOUD.COM

配置kerberos服务随着系统的启动而启动

chkconfig krb5kdc on

chkconfig kadmin on

service krb5kdc start

service kadmin start

 

kerberos认证通常需要两步

第一步获取tgt票据,通常需要用户提供principle和密码

第二步通过该tgt票据来获取某一服务的票据,这个票据用来与服务交互。

在这里,principal都拥有名字和密码,需要通过KDC来认证身份,它和KDC之间共享密钥稍微讲解一下最长使用到的两种principle,一类是普通用户,需要通过KDC认证身份并获取tgt票据,另一类是服务提供者,它需要通过对KDC提供给用户的票据进行确认以信任用户并为用户提供服务。第一类principal在登录系统手动输入密码。第二类principal解密KDC发的票据时需要用到自己的密钥,这个密钥存放在某个.keytab文件里。Keytab文件是通过KDC上的一个工具ktadd来生成的。

Kerberos提供了两个工具来查看票据信息。Kinit和 klist

Kinit 向kdc获取tgt票据

Klist 列出当前获取的所有票据

举一个例子:获取票据 kinit admin/admin

我们将在后面的例子中,看到这两个工具的用法

 

测试kerberos功能

1. 使用kadmin.local创建三个principle

Kadmin.local

Addprinc sample/custom.lllcloud.com@LLLCLOUD.COM

Addprinc test1/custom.lllcloud.com@LLLCLOUD.COM

Addprinc test2/custom.lllcloud.com@LLLCLOUD.COM

ktadd -k /etc/krb5.keytab sample/custom.lllcloud.com@LLLCLOUD.COM

 

2. 测试ssserver和sclient

启动ssserver: sserver -p 8899 -s sample -S /etc/krb5.keytab

kinit test1/custom.lllcloud.com@LLLCLOUD.COM

klist

运行sclient : sclient custom.lllcloud.com 8899 sample

再运行klist

我们将发现多了一条记录,显然它是sample/custom.lllcloud.com@LLLCLOUD.COM的票据

 

3. 测试sim_client和sim_server程序

可以使用前面2中的票据来访问sim_server服务

启动sim_server程序:sim_server -p 8899 -s sample -S /etc/krb5.keytab

启动sim_client程序:sim_client -p 8899 -h custome.lllcloud.com -m hello

而server 端也得到了响应

4. 测试uuserver和uuclient程序

启动uuserver: uuserver 8899

启动uuclient: uuclient custom "good" 8899

server同样也作出响应

5. 测试krsh和krlogin

使用admin.local创建一个新的principle

 addprinc host/server.lllcloud.com@LLLCLOUD.COM

生成krb5.keytab文件 ktadd /root/krb5.keytab host/server.lllcloud.com@LLLCLOUD.COM

scp /root/ krb5.keytab root@server:/etc/ krb5.keytab

再生成一个winston的principle

addprinc krb5/192.168.124.142@LLLCLOUD.COM

在server上新建一个用户

groupadd krb5

useradd –g krb5 krb5

passwd krb5

Vi /home/krb5/.k5login 增加登录principle

krb5/192.168.124.142@LLLCLOUD.COM

 启动klogin, kshell,krb5-telnet服务

chkconfig klogin on

chkconfig kshell on

chkconfig krb5-telnet

service xinetd restart

 

在客户端上先运行 kinit krb5/192.168.124.142@LLLCLOUD.COM

klist查看一下票据

运行 krsh 命令: krsh -l krb5 server.lllcloud.com ls –al

结果如下

运行krlogin: krlogin -l krb5 server.lllcloud.com

结果如下:成功登录到server上

最后我们来看一下klist结果

如果一步步的做到这一步,应该对kerberos系统大致有一个了解,在文档的最后,我们来介绍一下Kerberos工作原理

erberos协议主要用于计算机网络的身份鉴别,其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据访问多个服务

Kerberos系统存在三种角色:

KDC:密钥分配中心(起到分发密钥的作用)

Client:客户端(被服务的对象)

Service:服务端(提供服务的主机)

验证步骤

步骤一:获取原始票据

客户端向密钥分配中心发送自己的身份信息,密钥分配中心从授予票据服务(Ticket Granting Service)得到可用的票据(ticket-granting ticket),并用协议开始前客户端与密钥分配中心之间的密钥将票据加密回复给客户端,客户端收到密钥分配中心回复的加密票据后利用与密钥分配中心先前协议的密钥将票据解密,从而获得票据,此步骤主要是允许客户端进行Kerberos的验证,是进行访问服务的先决条件

步骤二:获取服务票据以及访问服务

客户端利用之前获得的票据向密钥分配中心请求其他服务的票据,从而通过其他服务的身份验证

获取其他服务票据以及访问服务总共有如下四步:

1. 客户端将之前获得的票据和请求的服务信息发送给KDC,KDC中的授予票据服务将客户端和服务端之间生成一个会话密钥(Session Key)用于服务器与客户端的身份验证。然后KDC将这个会话密钥和用户名,用户地址(IP),服务名,有效期,时间戳一起包装成一个票据(这张票据用于服务端对客户端的身份验证)发送给服务端,Kerberos协议并没有直接将票据发送给服务端,而是通过客户端转发给服务端

2. KDC将刚才的票据转发给客户端。由于这个票据是要给服务端的,不能让客户端看到,所以KDC用服务端的密钥将票据加密后再发给客户端,同时为了让客户端与服务端之间共享那个会话密钥,KDC用客户端的密钥将会话密钥加密返回给客户端

3. 为了完成票据的传递,客户端将刚才收到的票据转发到服务端,由于客户端不知道密钥分配中心与服务端的密钥,所以它无法修改票据的信息,同时客户端将收到的会话密钥解压出来,然后将自己的用户名,用户地址(IP)打包成验证包用会话密钥加密也发给服务端

4. 服务端收到票据后利用的密钥将票据中的信息解密出来,从而获得会话密钥和用户名,用户地址(IP),服务名,有效期。然后再用会话密钥将验证包解密从而获得用户名,用户地址(IP)将其与之前票据中解密出来的用户名,用户地址(IP)做比较从而验证客户端的身份,如果服务端有返回结果,将其返回给客户端

举一个例子来说明一下上述的流程