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

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

  • 相关阅读:
    HashMap源码学习
    java线程池
    MySQL的MVCC
    volatile关键字学习
    ArrayList, Vector和CopyOnWriteArrayList对比学习
    曹工说Redis源码(3)-- redis server 启动过程完整解析(中)
    曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
    曹工杂谈:我们的应用,启动就要去其他服务拉数据,那其他服务挂了,我们就起不来了?
    程序员正确的提问方式(个人建议)
    曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
  • 原文地址:https://www.cnblogs.com/easycloud/p/3724361.html
Copyright © 2020-2023  润新知