尽管前面尝试了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)做比较从而验证客户端的身份,如果服务端有返回结果,将其返回给客户端

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

kerboros安装的更多相关文章

  1. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  2. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  3. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  4. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  5. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

  9. tLinux 2.2下安装Mono 4.8

    Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...

随机推荐

  1. android sqlite 一次创建多个表

    package com.yangguangfu.database; import android.content.Context; import android.database.sqlite.SQL ...

  2. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  3. curl 查看网站连接情况

    curl -o /dev/null -s -w "nslookup_time :%{time_namelookup}\n time_connect: %{time_connect}\ntim ...

  4. [HIHO1176]欧拉路·一(欧拉图判定)

    题目链接:http://hihocoder.com/problemset/problem/1176 思路:先判是否连通,再判是否有0个或2个度为奇数的点. /* ━━━━━┒ギリギリ♂ eye! ┓┏ ...

  5. URAL1118. Nontrivial Numbers

    1118 优化 1.枚举到sqrt(n)2.区间有质数直接输出最大质数3.a=1 直接输出1 4.边+边与最小值比较 #include <iostream> #include<cst ...

  6. LA 3213 Ancient Cipher

    开始我理解错题意了,应该是这样理解的: 字符串1进行映射后可以做一个置换,若置换后与字符串2相同,也是输出YES的 比如ABCA 和 DDEF 因此我们需要做的就是统计有多少类字母,每一类有多少个,如 ...

  7. 基于Flume的美团日志收集系统(一)架构和设计

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  8. 漫游Kafka设计篇之数据持久化

    Kafka大量依赖文件系统去存储和缓存消息.对于硬盘有个传统的观念是硬盘总是很慢,这使很多人怀疑基于文件系统的架构能否提供优异的性能.实际上硬盘的快慢完全取决于使用它的方式.设计良好的硬盘架构可以和内 ...

  9. bdyyservice.exe 系统错误

    现象:开机出现 bdyyservice.exe 系统错误,说: 计算机中丢失log_report.dll 原因:安装百度影音,卸载后出现的问题 解决方法: 所有程序 -> 附件 -> 命令 ...

  10. 在页面中使用js

    JavaScript:用来在页面编写特效的,和HTML\CSS一样当都是由浏览器解析 JavaScript语言 一.JS如何运行(JavaScript,jscript,VbScript,applet ...