当前位置:   article > 正文

kerberos客户端与服务端搭建操作

kerberos客户端

一、关键字概念

  1. PrincipalPrincipal是用来表示参加认证实体,相当于用户名,用来来表示一个clientserver唯一的身份。Principal是由三个部分组成:名字(name),实例(instance,可选,一般是所需密钥的服务器的主机名或ip),REALM(域)。格式是:name/instance@REALM

  2. name:可以是任意的字符串,比如说可能是操作系统下的用户名等。

  3. instance:定义了用户在不同的role下使用的priciple,或者是在host在不同的service上运行时使用的principle

  4. realm:realm从逻辑上定义了一组object。每个realm可以有私有的配置,包括KDC的地址和加密算法

  5. KDC数据库:存储了所有的用户信息。以一个用户信息为例

    Principal: kafka@HADOOP.COM
    Expiration date: [never]
    Last password change:402 15:58:41 CST 2022
    Password expiration date: [never]
    Maximum ticket life: 1 day 00:00:00
    Maximum renewable life: 7 days 00:00:00
    Last modified:402 15:58:41 CST 2022 (admin/admin@HADOOP.COM)
    Last successful authentication: [never]
    Last failed authentication: [never]
    Failed password attempts: 0
    Number of keys: 8
    Key: vno 4, aes256-cts-hmac-sha1-96
    Key: vno 4, aes128-cts-hmac-sha1-96
    Key: vno 4, des3-cbc-sha1
    Key: vno 4, arcfour-hmac
    Key: vno 4, camellia256-cts-cmac
    Key: vno 4, camellia128-cts-cmac
    Key: vno 4, des-hmac-sha1
    Key: vno 4, des-cbc-md5
    MKey: vno 1
    Attributes:
    Policy: [none]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    1.与entry相关联的principal
    2.principlal的master key
    3.与这个principal相关联的ticket最长可用时间
    4.与这个principal相关联的ticket的最长的renew时间(译注:是指这个ticket通过renew机制累计可55. 用的时间)(只在kerberos 5中可用)
    5.决定这个ticket的具体行为的属性和标志位。
    6.Master key过期时间
    7.这个principal的过期时间,在此之后就不为这个principal分发ticket了。
    为了使得窃取数据库中的密钥更加因难,Kerberos的实现们使用master key来对数据库进行加密,master key被关联在K/M@REALM这个principal上。即使是数据库的dump,备份和master KDC到salve KDC的propagation也会被用这个密钥加密,因此,如果想要重新加载它们,就必须知道这个密钥。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  6. Keytab:Keytab是一个存储于clientserver端的文本文件,包含了kerberos principle和该principlemaster key。所以这个文件需要很小心地保存。

  7. AS(Authentication Server): 认证服务器
    KDC(Key Distribution Center): 密钥分发中心
    TGT(Ticket Granting Ticket): 票据授权票据,票据的票据
    TGS(Ticket Granting Server):票据授权服务器
    SS(Service Server): 特定服务提供端
    Principal: 被认证的个体
    Ticket: 票据, 客户端用来证明身份真实性。包含: 用户名,IP,时间戳,有效期,会话秘钥。

  8. 认证过程,以客户端A访问服务器B为例:
    8.1 A将自己和B的Pricipal发给CA, CA就知道A要访问B, 然后, 查询自己的密码数据库,获取A 和 B对应的密码.
          A—[A_Pricipal, B_Pricipal]----->CA
     8.2 CA生成了一个认证因子(类似于证书), 其中包含时间戳,CA的信息,A的信息(A的IP,A的主机名,等等), 然后生成一个随机密码(RandomKey),并使用A的密码,将 [认证因子 + RandomKey] 加密成"Encryption Client".接着使用B的密码, 将[RandomKey] 加密成 “Encryption Server”.
          CA–[EC, ES]--------------------->A
     8.3 A收到了EC 和 ES, A使用自己的密码将EC解密, 获得了认证因子+RandomKey.A使用Randomkey 对 [认证因子] 加密
          A—[ 加密的认证因子 + ES]-------------->B
     8.4 B收到了来自A的访问请求, 然后 使用自己的密码将ES解密, 获取RandomKey.然后使用RandomKey 解密 加密的认证因子, 获取认证信息, B读取认证信息,知道这是我信任的CA,接着比对访问者提供的信息与CA提供的认证信息是否匹配,匹配则认证通过, 允许访问.
          B-----------[A需要的数据]----------->A

二、服务端搭建

  1. 下载插件:yum install -y krb5-server krb5-libs krb5-workstation krb5-devel krb5-auth-dialog openldap-clients

  2. 修改配置:vi /var/kerberos/krb5kdc/kdc.conf

    [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
     
    [realms]
     HADOOP.COM = {  
      acl_file = /var/kerberos/krb5kdc/kadm5.acl
      dict_file = /usr/share/dict/words
      max_life = 24h 0m 0s
      max_renewable_life = 7d
      max_life = 1d
      admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
      supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
     }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  3. 修改配置:vi /etc/krb5.conf

    # Configuration snippets may be placed in this directory as well
    includedir /etc/krb5.conf.d/
    
    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = HADOOP.COM
     dns_lookup_realm = false
     ticket_lifetime = 24h
     renew_lifetime = 7d
     forwardable = true
     rdns = false
     pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
    # default_realm = EXAMPLE.COM
     default_ccache_name = KEYRING:persistent:%{uid}
    
    [realms]
     HADOOP.COM = {
      kdc = 192.168.248.10
      admin_server = 192.168.248.10
     }
    
    [domain_realm]
     .hadoop.com = HADOOP.COM
     hadoop.com = HADOOP.COM
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  4. 初始化数据库:/usr/sbin/kdb5_util create -s -r HADOOP.COM。密码设为:ffcsict123

  5. 查看生成文件:cd /var/kerberos/krb5kdc --> ls
    在这里插入图片描述

  6. 创建数据库管理员:/usr/sbin/kadmin.local -q "addprinc admin/admin",密码为ffcsict123

  7. 管理员设置ACL权限:vi /var/kerberos/krb5kdc/kadm5.acl,即所有以“/admin”结尾的用户都是管理员

    */admin@HADOOP.COM      *
    
    • 1
  8. 设置启动和开机自启动:systemctl enable kadmin -->systemctl start kadmin --> systemctl status kadmin

  9. 设置启动和开机自启动:systemctl enable krb5kdc -->systemctl start krb5kdc --> systemctl status krb5kdc

  10. 登录管理员:kadmin.local
    ps:如果在非服务器上登录管理员(客户端),则需要kinit admin/admin -->kadmin

  11. 管理员操作
    11.1 登录:kinit admin/admin --> kadmin。注:服务端登录可直接输入 kadmin.local进入。
    11.2 查看用户:listprincs
    11.3 创建用户:addprinc 用户名。注:管理员帐户配置用户名以“/admin”结尾即可,如第7点。
    11.4 修改密码:kpasswd 用户名,先输入旧密码,在输入新密码。注:忘记密码,可用kadmin.local登录,change_password 用户名,直接输入新密码。
    11.5 删除用户:delprinc 用户名
    11.6 查看用户信息:getprinc 用户名
    11.7 查看所有命令:?

  12. 管理员创建kafka用户凭据(凭证登录)
    12.1 创建用户:addprinc -randkey kafka/192.168.248.100
    ​12.2 创建导出凭据:ktadd -k /root/kerberos/kafka.keytab kafka/192.168.248.100或者 xst -k /root/kerberos/kafka.keytab kafka/192.168.248.100
    ​12.3 查看凭据信息:klist -ket /root/kerberos/kafka.keytab
    ​12.4 将生成的“kafka.keytab”凭据给客户端,客户端可凭借该凭据登录。

  13. 管理员创建kafka用户凭据(账号密码登录)
    13.1 创建用户:addprinc kafka/192.168.248.100 ,然后输入密码即可
    13.2 将账号密码给客户端,客户端可以凭借账号密码登录。
    13.3 创建凭据:这种方法创建的用户也可以凭借导出凭据登录,但是需要注意的是,在导出凭据的时候需要加上“-norandkey ”关键字,否则每次导出密码会变动。这种情况下,只能在服务端的kadmin.local登录环境在操作。 如:ktadd -k /root/kerberos/kafka.keytab -norandkey kafka

  14. 导出联合凭据:xst -norandkey -k /root/kerberos/kafka.keytab-all kafka kadmin/admin (仅支持服务端的kadmin.local登录环境)

  15. 将用户信息全部导出: kdb5_util dump ./slava_data,将会生成slava_dataslava_data.dump_ok两个文件,信息都存在slava_data 里。

三、客户端搭建

  1. 在服务端提前创建好账户,我这里以第一点创建的kafka/192.168.248.100用户为例。
  2. 下载客户端:yum install -y krb5-lib krb5-workstation
  3. 将服务端的/etc/krb5.conf替换相同路径下的/krb5.conf
  4. 将服务端的kafka.keytab拉过来放在/root/kerberos/kafka.keytab
  5. 账号密码登录:kinit kafka/192.168.248.100 -->klist
    ps:这里应该是kafka/192.168.248.100@HADOOP.COM的,图片忘记换过来了
    在这里插入图片描述
  6. 删除当前认证用户的缓存:kdestroy --> klist
    在这里插入图片描述
  7. 凭据登录:kinit -kt /root/kerberos/kafka.keytab kafka/192.168.248.100
    在这里插入图片描述
  8. 说明成功!!!
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/178245
推荐阅读
相关标签
  

闽ICP备14008679号