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)做比较从而验证客户端的身份,如果服务端有返回结果,将其返回给客户端
举一个例子来说明一下上述的流程
kerboros安装的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- Sublime Text3安装JsHint
介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- gentoo 安装
加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...
- 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. ...
- 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 服务器安装操 ...
- 【原】nodejs全局安装和本地安装的区别
来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...
- tLinux 2.2下安装Mono 4.8
Tlinux2.2发行版基于CentOS 7.2.1511研发而成,内核版本与Tlinux2.0发行版保持完全一致,更加稳定,并保持对Tlinux2.0的完全兼容.Mono 4版本要求CentOS 7 ...
随机推荐
- android sqlite 一次创建多个表
package com.yangguangfu.database; import android.content.Context; import android.database.sqlite.SQL ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)
然后是项目下的文件:完整的项目请看 上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...
- curl 查看网站连接情况
curl -o /dev/null -s -w "nslookup_time :%{time_namelookup}\n time_connect: %{time_connect}\ntim ...
- [HIHO1176]欧拉路·一(欧拉图判定)
题目链接:http://hihocoder.com/problemset/problem/1176 思路:先判是否连通,再判是否有0个或2个度为奇数的点. /* ━━━━━┒ギリギリ♂ eye! ┓┏ ...
- URAL1118. Nontrivial Numbers
1118 优化 1.枚举到sqrt(n)2.区间有质数直接输出最大质数3.a=1 直接输出1 4.边+边与最小值比较 #include <iostream> #include<cst ...
- LA 3213 Ancient Cipher
开始我理解错题意了,应该是这样理解的: 字符串1进行映射后可以做一个置换,若置换后与字符串2相同,也是输出YES的 比如ABCA 和 DDEF 因此我们需要做的就是统计有多少类字母,每一类有多少个,如 ...
- 基于Flume的美团日志收集系统(一)架构和设计
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
- 漫游Kafka设计篇之数据持久化
Kafka大量依赖文件系统去存储和缓存消息.对于硬盘有个传统的观念是硬盘总是很慢,这使很多人怀疑基于文件系统的架构能否提供优异的性能.实际上硬盘的快慢完全取决于使用它的方式.设计良好的硬盘架构可以和内 ...
- bdyyservice.exe 系统错误
现象:开机出现 bdyyservice.exe 系统错误,说: 计算机中丢失log_report.dll 原因:安装百度影音,卸载后出现的问题 解决方法: 所有程序 -> 附件 -> 命令 ...
- 在页面中使用js
JavaScript:用来在页面编写特效的,和HTML\CSS一样当都是由浏览器解析 JavaScript语言 一.JS如何运行(JavaScript,jscript,VbScript,applet ...