暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kerberos简介、安装与操作命令

大数据干饭人 2021-09-29
1746

Kerberos简介

Kerberos概述:

Kerberos由麻省理工学院创建,作为解决这些网络安全问题的解决方案。是一种通过网络提供安全验证处理的客户机/服务器体系结构。通过验证,可保证网络事务的发送者和接收者的身份真实。该服务还可以检验来回传递的数据的有效性(完整性),并在传输过程中对数据进行加密(保密性)。

使用 Kerberos 服务,可以安全登录到其他计算机、执行命令、交换数据以及传输文件。此外,该服务还提供授权服务,这样,管理员便可限制对服务和计算机的访问。而且,作为 Kerberos 用户,您还可以控制其他用户对您帐户的访问。


精简总结下就是:Kerberos始于20世纪80年代早期麻省理工学院(MIT)的一个研究项目,是一个网络身份验证系统。Kerberos提供的完整定义是安全的、单点登录的、可信的第三方相互身份验证服务。


Kerberos特点:

1.安全的

Kerberos是安全的,因为它从不在网络上明文传输密码。Kerberos的独特之处在于它使用票据、有时间限制的加密消息,这些消息可以向给定的服务器证明用户的身份,而不需要通过网络发送密码或在本地用户的硬盘上缓存密码。

2.单点登录的

单点登录意味着最终用户只需登录一次,就可以访问支持Kerberos的所有网络资源。一旦用户在登录会话开始时对Kerberos进行了身份验证,那么他的凭证就会透明地传递到他当天访问的所有其他资源。

3.可信的第三方

可信的第三方指的是Kerberos通过一个集中式身份验证服务器工作,网络中的所有系统本质上都信任这个服务器。所有身份验证请求都通过集中式Kerberos服务器路由。

4.相互身份验证

  相互身份验证不仅确保键盘后面的人是他声称的人,而且还证明了与他通信的服务器是他声称的那个人。相互身份验证通过确保与用户通信的服务是真实的,保护了敏感信息的机密性。


Kerberos认证过程:

 使用Kerberos 时,一个客户端需要经过三个步骤来获取服务:

认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的 Ticket-Granting Ticket(TGT)。

授权:客户端使用 TGT 向 Ticket-Granting Server(TGS)请求一个服务 Ticket。

服务请求:客户端向服务器出示服务 Ticket ,以证实自己的合法性。

 


Kerberos相关概念:

(1)KDC(key Distribution Center):密钥分发中心,是统一认证服务,负责管理发放票据,记录授权。

(2)KDC Server:作为密钥分发中心(KDC)的计算机或服务器。

(3)KDC Client:集群中针对KDC进行身份验证的任何计算机。

(4)Realm:kerberos管理的领域的标识。

(5)Principal:用于验证一个用户或者服务的唯一标识,相当于一个账号,需要为其设置密码。

Principal的形式为:主名称/实例名@领域名

主名称可以是用户名或者服务名,标识用于提供各种网络服务(比如hdfs、hive);

实例名,对于用户主体,实例名是可选的,对于服务主体,实例则是必须的。

一些主体名称示例:

主体名称

说明

username@EXAMPLE.COM

普通用户的主体

username/admin@EXAMPLE.COM

admin主体,可用于管理KDC数据库

K/M@EXAMPLE.COM

主密钥名称主体,一个主密钥名称主体可与每个主KDC关联

krbtgt/EXAMPLE.COM@EXAMPLE.COM

生成票证授予票证时使用的主体

kadmin/host1.example.com@EXAMPLE.COM

允许使用kadmin访问KDC的主KDC服务器的主体

ambari-qa-xxx@EXAMPLE.COM

Ambari用于执行服务“冒烟”检查并运行警报健康检查

HTTP/host1.example.com@EXAMPLE.COM

用于访问Hadoop Web UI时用到的principal


Kerberos安装

yum安装:

选择一台机器安装server服务器

    yum -y install krb5-libs krb5-workstation krb5-server

    集群所有机器安装client客户端

      yum -y install krb5-libs krb5-workstation


      配置:

      1 kdc.conf

      默认路径/var/kerberos/krb5kdc/kdc.conf,编辑修改如下:


        [kdcdefaults]
        kdc_ports = 88
        kdc_tcp_ports = 88


        [realms]
        HADOOP.COM = {
        #master_key_type = aes256-cts
        max_renewable_life= 7d 0h 0m 0s
        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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
        }


        注意:在[kdcdefaults]和[realms]前面不能有空格

        说明:

        HADOOP.COM:是自己设定的域,一般为了识别使用大写

        max_renewable_life = 7d 涉及到是否能进行ticket的renwe必须配置。

        master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,更多参考2.2.9关于AES-256加密:。推荐不使用。

        acl_file:标注了admin的用户权限。文件格式是

        Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。

        admin_keytab:KDC进行校验的keytab。后文会提及如何创建。

        supported_enctypes:支持的校验方式。注意把aes256-cts去掉。


        2 krb5.conf

        默认路径/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]
          dns_lookup_realm = false
          ticket_lifetime = 24h
          renew_lifetime = 7d
          forwardable = true
          rdns = false
          pkinit_anchors = etc/pki/tls/certs/ca-bundle.crt
          default_realm = HADOOP.COM
          #default_ccache_name = KEYRING:persistent:%{uid}


          [realms]
          HADOOP.COM = {
          kdc = 10.138.93.202
          admin_server = 10.138.93.202
          }


          [domain_realm]
          .hadoop.com = HADOOP.COM
          hadoop.com = HADOOP.COM


          krb5.conf同步到集群其他节点。

           

          说明:

          [logging]:表示server端的日志的打印位置

          [libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置

          default_realm = HADOOP.COM 默认的realm,必须跟要配置的realm的名称一致。

          udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误

          oticket_lifetime表明凭证生效的时限,一般为24小时。

          orenew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,

          对安全认证的服务的后续访问则会失败。

          kdc:代表要kdc的位置。格式是 机器:端口

          admin_server:代表admin的位置。格式是机器:端口

          default_domain:代表默认的域名


          3 kadm5.acl

          修改服务端的配置文件/var/kerberos/krb5kdc/kadm5.acl,以允许具备匹配条件的admin用户进行远程登录权限:

            */admin@HADOOP.COM *

            说明:

            */admin代表admin实例的全部用户主体

            HADOOP.COM代表领域

            最后一个*代表所有权限

            这里授权的意思就是admin实例的全部主体拥有HADOOP.COM领域的所有权限


            4 创建Kerberos数据库

            在服务端对数据库初始化,默认的数据库路径为/var/kerberos/krb5kdc,这里需要设置数据库初始密码,记起来。

              kdb5_util create -r HADOOP.COM -s

               说明:

              [-r] 用来指定一个realm_name,当krb5.conf配置了多个realm时使用

              [-s] 表示生成 stash file ,并在其中存储master server key(krb5kdc)

              创建成功后在/var/kerberos/krb5kdc可以看到生成的相关principal文件


              5 启动Kerberos

              # 启动服务命令

                systemctl start krb5kdc
                systemctl start kadmin

                # 加入开机启动项

                  systemctl enable krb5kdc
                  systemctl enable kadmin

                  服务对应的日志文件(/var/log/krb5kdc.log 和 var/log/kadmind.log)


                  Kerberos操作

                  创建Kerberos管理员:

                    kadmin.local -q "addprinc admin/admin"

                    # 需要设置两次密码

                    # kadmin.local需在server端即KDC所在服务器执行

                    也可以在server端执行kadmin.local命令先登陆kerberos数据库


                    其他操作:

                    创建一个普通用户test:

                      kadmin.local -q "addprinc test"


                      为test用户生成keytab文件:

                      #方式1:

                        kadmin.local -q "xst -norandkey -k etc/test.keytab test"

                        #方式2:

                          kadmin.local -q "ktadd -norandkey -k /etc/test.keytab test"

                          [-norandkey] 表示创建keytab时,principal的密码不发生改变。如果不使用该参数,直接ktadd -k则会修改principal的密码。


                          查看keytab文件:

                            klist -kte /
                            etc/test.keytab


                            认证用户:

                            方式1:(服务主体)使用keytab来认证

                              kinit -kt /etc/test.keytab test

                              方式2:(用户主体)使用密码来认证

                                kinit test


                                查看认证缓存(当前认证的用户):

                                  klist -e

                                   [-e] 查看当前kerberos账号的加密方式


                                  退出当前认证的用户:

                                    kdestroy

                                    查看所有principal主体:

                                      kadmin.local -q "list_principals"

                                      也可以用kadmin然后输入admin管理员密码,然后list_principals


                                      删除principal主体:

                                        kadmin.local -q "delete_principal test"



                                        文章转载自大数据干饭人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                        评论