尽管前面尝试了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. eclipse中servers(服务器)的配置

    eclipse中servers(服务器)的配置 使用eclipse+tomcat时,很多人喜欢安装tomcat插件,以便一键启动tomcat,但我不喜欢给eclipse安装一些非必须的插件,而ecli ...

  2. dojo 十 ajax dojo/_base/xhr

    官方教程:Ajax with DojoAjax功能:1.从服务器加载静态数据2.从web服务中访问xml或json类型的数据3.将表单(form)数据发送到服务器4.刷新页面内容....Ajax在RI ...

  3. BZOJ 2754 喵星球上的点名(后缀数组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2754 题意:给出n个字典串,m个询问串.输出每个询问串出现在多少个字典串中.最后输出每个 ...

  4. 了解thinkphp(二)

    ThinkPHP的核心文件: Library文件夹下的Think文件夹目录 ThinkPHP的入口文件是: ThinkPHP.php , 我们在创建项目时都要引入这个入口文件!!! 一 , 项目的部署 ...

  5. c#调用系统资源大集合-3

    public static void 打开控制面板多媒体属性音频() { Process.Start("rundll32.exe", " shell32.dll,Cont ...

  6. CSS控制超链接

    一.伪类 CSS控制元素的某种状态---偽类(用于向某些选择器添加特殊的效果)    偽类的语法:元素标签 偽类名称{属性:属性值;} 二.超链接        a:link:未访问的链接       ...

  7. 如何在Android studio中同时打开多个工程? (转载)

    最近学习Android Studio,想同时打开两个Project.但是点击File->Open之后,原有的Project被关闭掉了.怎么在新的窗口中打开Project呢? 解决: 点击Help ...

  8. ASP.NET路由系统实现原理:HttpHandler的动态映射

    我们知道一个请求最终通过一个具体的HttpHandler进行处理,而我们熟悉的用于表示一个Web页面的Page对象就是一个HttpHandler,被用于处理基于某个.aspx文件的请求.我们可以通过H ...

  9. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

  10. Amazium源码分析:(1)基本介绍

    前言 Amazium是一个网格系统的框架,分析该源码的目的是了解网格系统的实现. 网格系统 定义:设计美观页面布局的方式,上图能够很直观的了解什么是网格系统. 基本概念 column: 列. gutt ...