Hadoop(HDP)集群kerberos认证实现方案

    xiaoxiao2021-03-25  146

    HadoopHDP)集群kerberos认证实现方案

    !!出于安全问题,本文隐藏了部分系统名称及服务名称,修改了部分可能造成信息泄露的部分。部分配置为虚拟机配置文件副本,相关主机名称仅供参考。

    !!本文适用于HDP部署了ambari平台的kerberos认证操作。其他环境供参考。

    文档中相关图片不上传了。

    部署环境:Hadoop2.7.3 HDP2.5.3

    本文档参考了kerberos官方文档,Hadoop官方文档及HDP官方文档.相关链接如下:

    http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/SecureMode.html

    http://web.mit.edu/kerberos/krb5-current/doc/

    http://docs.hortonworks.com/index.html

    如有错误,请不吝指教。谢谢!!

    HadoopHDP)集群kerberos认证实现方案

    1. 版本选择

    MIT当前版本为 krb5-1.14.4 

    系统自带版本为1.10

    选择自带版本。

    2. 软件安装

    系统环境:

    需要完成IPhostname的配置,在hosts文件中将IP与名称进行配对,一般Hadoop集群已经完成这些步骤,在Hadoop集群的机器的hosts文件中加入认证服务器的IPhostname。在认证服务器上需要将相应的配置复制过来,保证不需要DNS解析也能完成直接ping主机名互通。

    注意:

    Kerberos中的计算机的时钟需要与运行KDC的机器进行同步。建议KDCHadoop集群使用统一的时钟源进行同步。

     

    KDC服务器需要安装以下文件:

    krb5-server-1.10.3-15.1.x86_64.rpm 

    krb5-devel-1.10.3-15.1.x86_64.rpm

    krb5-libs-1.10.3-15.1.x86_64.rpm

    krb5-auth-dialog-0.13-3. x86_64.rpm

    客户机安装:

    krb5-workstation-1.10.3-15. 1.x86_64.rpm 

    krb5-libs-1.10.3-15.1.x86_64.rpm

    krb5-auth-dialog-0.13-3.x86_64.rpm

    3. 系统规划

    Realm 名称、端口、是否使用slave服务器等。 

    Kerberos中有三种角色:客户机、应用服务器、认证服务器。应用服务器是用来为客户提供网络服务的主机,客户机为普通主机,认证服务器为kerberosKDC

    KDC安装在CLUSTER02上面。其他93台服务器根据其提供的服务以及功能,作为应用服务器以及客户机角色,大部分服务器同时具备两种角色。

    设置realm名称为REALM.COM,服务使用kerberos默认端口,避免与其他服务冲突。

    KDCkerberos服务的核心服务器,服务器的安全以及稳定是整个服务安全及稳定的基础。建议使用单独的机器,不安装任何其他服务,只启动kerberos服务。

    但是本环境没有单独主机,暂定使用snamenode服务器安装KDC

     

    4. 环境准备

    Ambari及相关组件已经安装完成。

    安装JCE,在所有的服务器上部署JCE policy

    准备 jce_policy-8.zip文件,同时把文件复制到/var/lib/ambari-server/resources目录下。

    unzip -o -j -q jce_policy-8.zip -d  $jdkdir/jre/lib/security/

    注意jce的版本要对应,部署后,ambari-server重新启动ambari服务

    设置Hadoop用户:

    principalusername进行mapping。(可选)

    core-site.xml文件中

    增加:

    ULE:[1:$1@$0](ambari-qa-cluster@REALM.COM)s/.*/ambari-qa/

    RULE:[1:$1@$0](hdfs-cluster@REALM.COM)s/.*/hdfs/

    RULE:[1:$1@$0](spark-cluster@REALM.COM)s/.*/spark/

    RULE:[1:$1@$0](.*@REALM.COM)s/@.*//

    RULE:[2:$1@$0](amshbase@REALM.COM)s/.*/ams/

    RULE:[2:$1@$0](amszk@REALM.COM)s/.*/ams/

    RULE:[2:$1@$0](dn@REALM.COM)s/.*/hdfs/

    RULE:[2:$1@$0](hive@REALM.COM)s/.*/hive/

    RULE:[2:$1@$0](jhs@REALM.COM)s/.*/mapred/

    RULE:[2:$1@$0](nm@REALM.COM)s/.*/yarn/

    RULE:[2:$1@$0](nn@REALM.COM)s/.*/hdfs/

    RULE:[2:$1@$0](rm@REALM.COM)s/.*/yarn/

    RULE:[2:$1@$0](yarn@REALM.COM)s/.*/yarn/

    DEFAULT

    ###如使用通配符的如下:

    RULE:[1:$1@$0](.*@REALM\.COM)s/@.*//

    RULE:[2:$1@$0](.*@REALM\.COM)s/@.*//

    DEFAULT

    5. KDC配置

    设置全局环境变量(最后一行需要在所有机器上配置):

    /etc/profile末尾增加配置文件的全局环境变量:

    #Export KRB5_CONFIG=/etc/krb5.conf

    #Export KRBT_KDC_PROFILE=/var/kerberos/krb5kdc/kdc.conf

    #export KRB5CCNAME=/hadoop/hadoop/krb5cc_pub_$$

    export KRB5CCNAME=/hadoop/ker/krb5cc_$UID

    最后一行为设定票据的保存目录,如果不设定,则票据保存在/tmp目录下,存在隐患。

    保存后执行

    Source  /etc/profile生效。

    配置文件:

    Kdc的配置文件有三个:krb5.conf  kdc.conf   kadm5.acl 

    其配置步骤如下:

    krb5.conf

    krb5.conf是核心配置文件,一般位于/etc/文件夹下。其配置参考如下:

    [root@namenode Packages]# more /etc/krb5.conf 

    [logging]

     default = FILE:/var/log/krb5libs.log

     kdc = FILE:/var/log/krb5kdc.log

     admin_server = FILE:/var/log/kadmind.log

    #logging文件的位置

    [libdefaults]

     default_realm = REALM.COM

     dns_lookup_realm = false

     dns_lookup_kdc = false

     ticket_lifetime = 300d

     renew_lifetime = 300d

     forwardable = true

    #参数配置,需要修改default_realm 这里定义为HADOOP.COM 这个名称

    #可以自定,保持一致即可。

    由于Hadoop集群一直在运行,所有配置要保证票据的有效期足够长,避免频繁进行kinit授权操作。这里设置为300天,也可以对不同进程在初始化时配置其票据时长

    [realms]

     REALM.COM = {

    #  kdc = kerberos.example.com

     admin_server = 22.224.41.4

        kdc = 22.224.41.4

    #  admin_server = kerberos.example.com

     }

    #kdc admin_server的机器名称 

     [root@namenode Packages]#

    krb5.conf文件配置完成后复制到各个客户机的相同目录下。

    如果集群开启了selinux,需要执行 restorecon -R -v /etc/krb5.conf 

    建议关闭selinux

    kdc.conf

    kdc.conf的配置,文件位于/var/kerberos/krb5kdc/kdc.conf。这个文件是对KDC服务器的相关配置,只需在KDC服务器上配置。

    root@namenode Packages]# more /var/kerberos/krb5kdc/kdc.conf 

    [kdcdefaults]

     kdc_ports = 88

     kdc_tcp_ports = 88

    #配置端口,保证与其他服务没有冲突。

    [realms]

     REALM.COM = {

      #master_key_type = aes256-cts

    max_life = 300d  

    max_renewable_life = 300d  

      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

     }

    #配置realms,只需修改realm的名字即可,其他保持默认。

    [root@namenode Packages]#

    数据库生成:

    kdb5_util  create -r   REALM.COM  -s 

    会运行一定时间,并会要求输入密码,此密码为数据库管理密码。这个密码如果输入错误(两次不匹配,注意,包括任何按键,比如退格键),那么只能重新执行命令。

    完成后检查指定目录下是否存在生成文件,会生成5个文件,一般包括:

    kadm5.keytab  principal  principal.kadm5  principal.kadm5.lock  principal.ok

     

    注意:kadm5.keytab 有些版本不会自动生成,此时无法使用kadmin进行管理,会报错。

    在通过网络启动管理后台服务(kadmind)之前,需要手动创建一个包含密钥的keytab文件,

    需要输入:

    kadmin.local:

    ktadd -k /var/kerberos/krb5kdc/kadm5.keytab   kadmin/admin 

    ktadd -k /var/kerberos/krb5kdc/kadm5.keytab   kadmin/changepw完成kadminkeytab文件的生成。

     

    这个文件必须保证只有root有读权限。(注意,这里要操作修改内置principal krbtgtmaximum ticket life,可在kadmin命令行下用getprinc命令查看默认的最大时长,否则时长被限制在24小时,并且无法renew)

    kadmin.local: addprinc admin/admin@REALM.COM

    modprinc -maxrenewlife 300days K/M

    modprinc -maxlife 300days K/M

    modprinc -maxrenewlife 300days krbtgt/REALM.COM

    modprinc -maxlife 300days krbtgt/REALM.COM

    退出后,重新启动

    service krb5kdc restart

    service  kadmin restart

    kadmind

    kinit admin/admin@REALM.COM

    配置kadm5.acl

    [root@namenode Packages]# more /var/kerberos/krb5kdc/kadm5.acl 

    */admin@HADOOP.COM *

    [root@namenode Packages]#

    #这个文件需要修改realm的名称。

    默认为admin用户能够访问和修改数据库文件。

    将管理员加入kerberos 的数据库

    进入kadmin.local命令模式。

    kadmin.local: addprinc admin/admin@REALM.COM

    会要求输入密码,输入密码后完成用户添加。 

    配置启动kerberos服务

    输入krb5kdc  kadmind,启动服务。

    然后初始化:

    kinit admin/admin@REALM.COM 

    输入认证密码后,即可完成初始化,如果不销毁或过期(过期时间在kdc.conf中设置,Hadoop因为24小时运行,这个值要设置成300天),过期前不需要再次输入。

    在终端输入:klist 可以看到授权的情况。

     

    建议KDC开机启动服务,加入启动项(这需要预先生产stash文件,位置在kdc.conf文件里边确定):

    在终端下输入(需要root权限)

    Chkconfig krb5kdc on

    Chkconfig kadmin on

    查看相关配置:

    [root@namenode ~]# chkconfig

    crond          0:off 1:off 2:on 3:on 4:on 5:on 6:off

    ip6tables      0:off 1:off 2:on 3:on 4:on 5:on 6:off

    iptables       0:off 1:off 2:on 3:on 4:on 5:on 6:off

    kadmin         0:off 1:off 2:on 3:on 4:on 5:on 6:off

    kprop          0:off 1:off 2:off 3:off 4:off 5:off 6:off

    krb5kdc        0:off 1:off 2:on 3:on 4:on 5:on 6:off

    lvm2-monitor   0:off 1:on 2:on 3:on 4:on 5:on 6:off

    ……

    ……

    修正前面的几个文件的SELINUX设置(可选)

        #restorecon -R -V /var/kerberos/krb5kdc/

        #restorecon -R -V /var/log/

    #restorecon -R -V /etc/krb5.conf

    6. 关于时间以及tgt目录问题

    票据缓存目录:

    /tmp改为/Hadoop/krb目录:

    编辑/etc/profile

    export KRB5_CONFIG=/yourdir/krb5.conf(可选)

    export KRB5_KDC_PROFILE=/yourdir/kdc.conf(可选)

    export KRB5CCNAME=/Hadoop/hadoop/krb5cc_$UID

    ticket时间问题:

    4个要注意:

    Krb5.conf中的时间设置

    Kdc.conf中的时间设置

    krbtgt/REALM.COM@REALM.COM的时间设置

    kadmin.local: addprinc admin/admin@REALM.COM

    modprinc -maxrenewlife 300days K/M

    modprinc -maxlife 300days K/M

    modprinc -maxrenewlife 300days krbtgt/REALM.COM

    modprinc -maxlife 300days krbtgt/REALM.COM

    kinit admin/admin@REALM.COM

    ticket lifetime

    Kerberos ticket具有lifetime,超过此时间则ticket就会过期,需要重新申请或renewticket lifetime取决于以下5项设置中的最小值:

        1Kerberos server/var/kerberos/krb5kdc/kdc.confmax_life

        2内置principal krbtgtmaximum ticket life,可在kadmin命令行下用getprinc命令查看

        3你的principalmaximum ticket life,可在kadmin命令行下用getprinc命令查看

        4 Kerberos client/etc/krb5.confticket_lifetime

      5  kinit -l 参数后面指定的时间

    ticket renew lifetime

    ticket过期后,如果想延长,一种方法是重新申请(需要输入密码),另一种是renew(不需要输入密码),每renew一次,就延长一个lifetime。不过renew操作本身也有lifetime,即在ticket renew lifetime,在此lifetime之内,才能进行renew操作。与上面的很相似,ticket renew lifetime取决于5项设置中的最小值:

        Kerberos server/var/kerberos/krb5kdc/kdc.confmax_renewable_life

        内置principal krbtgtmaximum renewable life,可在kadmin命令行下用getprinc命令查看。

        principalmaximum renewable life,可在kadmin命令行下用getprinc命令查看。

        Kerberos client/etc/krb5.confrenew_lifetime

        kinit -r 参数后面指定的时间。

    7. 测试

    在客户端kinit admin/admin

    添加一个测试principal test

    Kinit test  

    Klist 可以查看test的票据

     

    8. 应用服务器端的配置

    保证将集群的所有hosts文件及用户都是一致的。同时时间要与KDC一样。

    KDC/etc/krb5.conf文件复制到集群的各个机器。

    9. 客户端的配置

    保证将集群的所有hosts文件及用户都是一致的。同时时间要与KDC一样。

    KDC/etc/krb5.conf文件复制到集群的各个机器。

    机器输入kinit admin/admin,完成初始化。

    然后输入kadmin,输入密码,可以进入远程管理模式。

    输入klist。查看缓存的票据信息。

    [root@data1 ~]#  klist

    Ticket cache: FILE:/tmp/krb5cc_0

    Default principal: root/admin@HADOOP.COM

    Valid starting     Expires            Service principal

    12/02/16 14:25:18  12/03/16 14:25:17  krbtgt/HADOOP.COM@HADOOP.COM

            renew until 12/02/16 14:25:18

    kinit, klist, and kdestroy

    如果客户机需要访问不同的远程主机,则在KDC中将转发设置为true

     

    10. HadoopHDP)集群配置

    HDP中用户principal名称以及keytab的定义:

     

     

     

     

    使用已经安装好的MIT kerberos系统,系统配置要保存。

    确认具有kdcadmin用户及权限

    确认JCE policy已经部署

    确认所有客户端可以直接连接,时间同步。

    使用ambari平台部署kerberos,在部署过程中会生成不同组件的principal以及keytab

    安装过程根据ambari的页面的指示进行操作,注意在实施时需要填写已经安装的KDC的相关用户名和密码,REALM等。

    需要追加修改相关的时间参数。

    HDP使用ambari部署时会删除yarnlog

    完成部署后需要检查krb5.的配置和KDC的配置中krbtgt的时间参数:

    进入kadmin.local :getprinc krbtgt

    Lifetimerenewtime都没变,则初始化各个主机,如果时间改变,则重新配置其时间为300d,然后进行初始化。

    11. 安装完成后用户操作说明:

    使用一个具有访问相应keytab权限的用户执行:

    例如,在某台datanode上面,要初始化,使用一个用户,具有对datanodekeytab的读取权限,一般来说是hdfs用户,使用hdfs用户,在终端输入:

    kinit -kt /etc/security/keytabs/dn.service.keytab  dn/hostname

    klist

    查看票据的信息。

    如果是hive用户,则对hive对应服务和客户端的keytab有读取权限,所有在使用hive用户的时候,在终端输入:

    kinit -kt /etc/security/keytabs/ spnego.service.keytab  HTTP/hostname

    相关用户及principalkeytab对应见前面10中的对应表格。

    或者对应下表。

    取得票据后,即可进行业务操作。注意部分脚本需要修改后才能在部署认证的服务器上运行。

    注意:

    kerberos不建议使用多用户,但hadoop用户账号众多,kerberos对不同用户是严格区分的,不同的用户有不同的票据,票据不能通用。所以当切换用户后,如果是第一次使用这个用户进行操作,需要进行这个用户的kerberos的认证工作。也就是进行kinit,取得用户合法票据后,才可以使用相应的服务。如果没有进行初始化或没有成功取得认证的票据,则对Hadoop集群的操作会失败,出现连接错误。

    为了保证Hadoop集群的连续运行不受影响,设置了票据的有效期为300天,也就是每个用户在取得票据的情况下,在300天内可以不要再次进行初始化认证,但是当系统票据被删除的时候,则用户的认证会失败,需要重新进行初始化认证,这有可能会造成某些自动化的脚本的失效或者任务运行失败。

    某些脚本的编写是按照没有认证的方式编写的,在启用验证的集群里,建议重新测试并完善脚本,使脚本适合认证集群环境。

     

     

    12. 相关命令说明:

    () Kadmin

    kadmin:  ?

    Available kadmin requests:

    add_principal, addprinc, ank

                             Add principal

    delete_principal, delprinc

                             Delete principal

    modify_principal, modprinc

                             Modify principal

    rename_principal, renprinc

                             Rename principal

    change_password, cpw     Change password

    get_principal, getprinc  Get principal

    list_principals, listprincs, get_principals, getprincs

                             List principals

    add_policy, addpol       Add policy

    modify_policy, modpol    Modify policy

    delete_policy, delpol    Delete policy

    get_policy, getpol       Get policy

    list_policies, listpols, get_policies, getpols

                             List policies

    get_privs, getprivs      Get privileges

    ktadd, xst               Add entry(s) to a keytab

    ktremove, ktrem          Remove entry(s) from a keytab

    lock                     Lock database exclusively (use with extreme caution!)

    unlock                   Release exclusive database lock

    purgekeys                Purge previously retained old keys from a principal

    get_strings, getstrs     Show string attributes on a principal

    set_string, setstr       Set a string attribute on a principal

    del_string, delstr       Delete a string attribute on a principal

    list_requests, lr, ?     List available requests.

    quit, exit, q            Exit program.

    kadmin:  

    kadmin:  listprincs 

    K/M@HADOOP.COM

    admin/admin@HADOOP.COM

    host/namenode.localdomain@HADOOP.COM

    kadmin/admin@HADOOP.COM

    kadmin/changepw@HADOOP.COM

    kadmin/namenode.localdomain@HADOOP.COM

    krbtgt/HADOOP.COM@HADOOP.COM

    root/admin@HADOOP.COM

    kadmin:  

     

    () Klist

    [root@namenode krb5kdc]# klist

    Ticket cache: FILE:/tmp/krb5cc_0

    Default principal: admin/admin@HADOOP.COM

    Valid starting     Expires            Service principal

    12/05/16 08:36:57  12/06/16 08:36:57  krbtgt/HADOOP.COM@HADOOP.COM

            renew until 12/05/16 08:36:57

    [root@namenode krb5kdc]# klist

    Ticket cache: FILE:/tmp/krb5cc_0

    Default principal: admin/admin@HADOOP.COM

    Valid starting     Expires            Service principal

    12/05/16 08:36:57  12/06/16 08:36:57  krbtgt/HADOOP.COM@HADOOP.COM

            renew until 12/05/16 08:36:57

    [root@namenode krb5kdc]# klist -kt

    [root@namenode ~]# klist -kt

    Keytab name: FILE:/etc/krb5.keytab

    KVNO Timestamp         Principal

    ---- ----------------- --------------------------------------------------------

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       2 12/02/16 13:30:21 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:38:49 host/namenode.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       3 12/05/16 09:39:33 host/data1.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       4 12/05/16 15:19:14 host/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       2 12/05/16 15:22:21 ssh/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       5 12/05/16 21:09:24 host/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       2 12/05/16 21:09:31 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       3 12/06/16 13:47:35 ftp/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

       2 12/06/16 14:11:03 vsFTPd/namenode.localdomain@HADOOP.COM

     [root@namenode ~]#

    () Kdestroy

    销毁凭证,再次进入认证模式需要输入认证密码并重新初始化:

    [root@namenode krb5kdc]# kdestroy 

    [root@namenode krb5kdc]# klist

    klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)

    [root@namenode krb5kdc]#

    () kinit

    kinit -k -t /etc/security/keytabs/dn.service.keytab dn/hostname@REALM.COM

    初始化,取得票据

    Kinit -R 更新票据的日期,延长使用时间。

    kinit -l 100d -r 100d my_principal

    可以设定票据过期时长,这里是100

    () kdb5_util

    kdb5_util create -r REALM.COM -s

    创建数据库

            

    13. 关键参数说明:

    关键文件及位置:

    krb5.conf

    krb5.keytab

    位于:/etc/

    kdc.conf

    kadmin5.acl

    位于:/var/kerberos/krb5kdc 

    drwxr-xr-x    3 root     root         4096 Nov 28 09:31 ..

    -rw-------    1 root     root           71 Dec  1 14:00 .k5.HADOOP.COM

    -rw-------    1 root     root            0 Dec  1 13:20 principal.kadm5.lock

    -rw-------    1 root     root            0 Dec  6 14:11 principal.ok

    -rw-------    1 root     root        24576 Dec  6 14:11 principal

    -rw-------    1 root     root           67 Dec  1 09:48 .k5.HADOOP

    -rw-------    1 root     root          404 Nov 28 10:29 kdc.conf

    -rw-------    1 root     root           21 Nov 28 10:27 kadm5.acl

    -rw-------    1 root     root         8192 Dec  6 14:10 principal.kadm5

    -rw-------    1 root     root            1 Dec  5 13:19 slave_datatrans.dump_ok

    -rw-r--r--    1 root     root           71 Dec  5 12:11 kpropd.acl.old

    -rw-------    1 root     root         1160 Dec  5 13:47 kadm5.keytab

    -rw-------    1 root     root        11504 Dec  5 13:19 slave_datatrans

    drwxr-xr-x    2 root     root         4096 Dec  5 13:57 .

    角色:

    三种:KDCAPP server  client

    服务生成顺序:

    A. kdc生成principal

    B. 然后在服务提供主机上生成keytab,并导出到本地。

    C. KDC主机上生成服务提供主机的keytab,并导出到KDC的本地。

    例如:

    KDC增加服务的principal,并且导出生成server自己的钥匙

        server#kadmin

        kadmin:addprinc -randkey host/server.example.com  #krb5-telnetsshprincipal都是host

        kadmin:addprinc -randkey ftp/server.example.com #gssftp principalftp

        导出到本地

        kadmin:ktadd -k /etc/krb5.keytab host/server.example.com

        kadmin:ktadd -k /etc/krb5.keytab ftp/server.example.com

      

        检查防火墙和selinux

        因为要做双向验证,所以我们在kdc上也把sshd服务注册一下,登录到kdc.example.com

        #kadmin.local

        kadmin.local:addprinc -randkey host/server.example.com

        kadmin.local:ktadd -k /etc/krb5.conf host/server.example.com

        检查防火墙和selinux

    Keytab 文件

    Kerberos server需要keytab文件作为KDC认证的凭证,此文件只有使用的用户具有读取权限。

    Principal  

    Kerberos中,Principal是参加认证的基本实体。

    一般来说有两种,一种用来表示Kerberos数据库中的用户, 另一种用来代表某一特定主机。简单来说, Principal是用来表示客户端和服务端身份的实体。

    Principal是由三个部分组成:名字(name),实例(instance),REALM(域)。比如一个标准的 Kerberos的用户是:name/instance@REALM

    Name:第一部分。在代表客户方的情况,它是一个用户名;在代表主机的情况,它是写成host  

    Instance:第二部分。对name的进一步描述,例如name所在的主机名或name的类型等,可省略。它与第一部分之间用‘ / ’分隔,但是作为主机的描述时写成host/Instance  

    Realm:第三部分。是Kerberos在管理上的划分,在 KDC中所负责的一个域数据库称作为Realm

    举例如下:   格式为:name/instance@REALM

    kadmin:  listprincs 

    K/M@HADOOP.COM

    admin/admin@HADOOP.COM ………… admin=NAME,用户名。Admin=instance,对name的描述。第三部分为realm的名称。

    hdfs/data1.localdomain@HADOOP.COM

    hdfs/data2.localdomain@HADOOP.COM

    hdfs/namenode.localdomain@HADOOP.COM

    host/data1.localdomain@HADOOP.COM…………代表主机的时候,namehost

    host/data2.localdomain@HADOOP.COM

    host/namenode.localdomain@HADOOP.COM

    kadmin/admin@HADOOP.COM

    kadmin/changepw@HADOOP.COM

    krbtgt/HADOOP.COM@HADOOP.COM

    mapred/data1.localdomain@HADOOP.COM

    mapred/data2.localdomain@HADOOP.COM

    mapred/namenode.localdomain@HADOOP.COM

    部分默认参数:

    ticket_lifetime (duration string.) Sets the default lifetime for initial ticket requests. The default value is 1 day.

    renew_lifetime (duration string.) Sets the default renewable lifetime for initial ticket requests. The default value is 0.

    max_renewable_life (duration string.) Specifies the maximum time period during which a valid ticket may be renewed in this realm. The default value is 0.

    max_life (duration string.) Specifies the maximum time period for which a ticket may be valid in this realm. The

    default value is 24 hours.

    The keytab file

    All Kerberos server machines need a keytab file to authenticate to the KDC. By default on UNIX-like systems this file

    is named DEFKTNAME. The keytab file is an local copy of the host’s key. The keytab file is a potential point of entry for a break-in, and if compromised, would allow unrestricted access to its host. The keytab file should be readable only

    by root, and should exist only on the machine’s local disk. The file should not be part of any backup of the machine,unless access to the backup data is secured as tightly as access to the machine’s root password.

    In order to generate a keytab for a host, the host must have a principal in the Kerberos database. The procedure for adding hosts to the database is described fully in Adding, modifying and deleting principals. (See Create host keytabs

    for slave KDCs for a brief description.) The keytab is generated by running kadmin and issuing the ktadd command.

    For example, to generate a keytab file to allow the host trillium.mit.edu to authenticate for the services host,

    ftp, and pop, the administrator joeadmin would issue the command (on trillium.mit.edu):

    trillium% kadmin

    kadmin5: ktadd host/trillium.mit.edu ftp/trillium.mit.edu

    pop/trillium.mit.edu

    kadmin: Entry for principal host/trillium.mit.edu@ATHENA.MIT.EDU with

    kvno 3, encryption type DES-CBC-CRC added to keytab

    FILE:/etc/krb5.keytab.

    kadmin: Entry for principal ftp/trillium.mit.edu@ATHENA.MIT.EDU with

    kvno 3, encryption type DES-CBC-CRC added to keytab

    FILE:/etc/krb5.keytab.

    kadmin: Entry for principal pop/trillium.mit.edu@ATHENA.MIT.EDU with

    kvno 3, encryption type DES-CBC-CRC added to keytab

    FILE:/etc/krb5.keytab.

    kadmin5: quit

    trillium%

    安装过程中相关错误提示:

    在安装过程中,配置文件的增加或修改都可能引起错误,错误提示并不能具体说明原因。具体原因要具体分析。

    [root@namenode krb5kdc]# kprop -f slave_datatrans data1.localdomain

    kprop: Server rejected authentication (during sendauth exchange) while authenticating to server

    Generic remote error: Key version number for principal in key table is incorrect

    kprop: Server rejected authentication (during sendauth exchange) while authenticating to server

    Make sure that:

    1. The time is synchronized between the master and slave KDCs.

    2. The master stash file was copied from the master to the expected location on the slave.

    3. The slave has a keytab file in the default location containing a host principal for the slave’s hostname.

    14. 6台测试机

    KDC server :  20.200.40.200   cluster5

    REALM: REALM.COM  REALM.COM

    REALM.COM

    PORT: 11899

    Kerberos已经安装了 而且都装了服务器及客户机

    [root@Cluster2 ~]#    rpm -aq krb*

    …………

    [root@Cluster2 ~]#

    JCE已经安装了

    [root@Cluster4 security]# ll

    total 164

    -rw-r--r-- 1 root root   4054 Sep 23 12:20 blacklist

    -rw-r--r-- 1 root root   1273 Sep 23 12:20 blacklisted.certs

    -rw-r--r-- 1 root root 112860 Sep 23 12:20 cacerts

    -rw-r--r-- 1 root root   2466 Sep 23 12:20 java.policy

    -rw-r--r-- 1 root root  27358 Sep 23 12:20 java.security

    -rw-r--r-- 1 root root     98 Sep 23 12:20 javaws.policy

    -rw-r--r-- 1 root root   3405 Sep 23 12:31 local_policy.jar

    -rw-r--r-- 1 root root      0 Sep 23 12:20 trusted.libraries

    -rw-r--r-- 1 root root   2920 Sep 23 12:31 US_export_policy.jar

    [root@Cluster4 security]# pwd

    /usr/java/jdk1.8.0_112/jre/lib/security

    [root@Cluster4 security]#  

    配置KDC

    [root@Cluster5 krb5kdc]# more kdc.conf

    [kdcdefaults]

     kdc_ports = 88

     kdc_tcp_ports = 88

    [realms]

     REALM.COM = {

      #master_key_type = aes256-cts

      acl_file = /var/kerberos/krb5kdc/kadm5.acl

      max_renewable_life = 7d

    max_life = 5d

      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:norm

    al

     }

    [root@Cluster5 krb5kdc]#

    配置krb5.conf

    [root@Cluster5 etc]# more krb5.conf

    [logging]

     default = FILE:/var/log/krb5libs.log

     kdc = FILE:/var/log/krb5kdc.log

     admin_server = FILE:/var/log/kadmind.log

    [libdefaults]

     default_realm = REALM.COM

     dns_lookup_realm = false

     dns_lookup_kdc = false

     ticket_lifetime = 5d

     renew_lifetime = 7d

     forwardable = true

    [realms]

     REALM.COM = {

      kdc = Cluster5 

      admin_server = Cluster5 

    #  admin_server = kerberos.example.com

     }

     

    [root@Cluster5 etc]#

                                                    

    序号 cluster cluster1 cluster2 cluster3 cluster4 cluster5

    1 App Timeline Server DataNode DataNode DataNode DataNode DataNode

    2 DataNode HCat Client HCat Client HCat Client HCat Client HCat Client

    3 HCat Client HDFS Client HDFS Client HDFS Client HDFS Client HDFS Client

    4 HDFS Client Hive Client Hive Client Hive Client Hive Client Hive Client

    5 History Server Hive Metastore MapReduce2 Client MapReduce2 Client MapReduce2 Client MapReduce2 Client

    6 Hive Client HiveServer2 Metrics Collector Metrics Monitor Metrics Monitor Metrics Monitor

    7 MapReduce2 Client MapReduce2 Client Metrics Monitor NodeManager NodeManager NodeManager

    8 Metrics Monitor Metrics Monitor NodeManager Pig Pig Pig

    9 NameNode NodeManager Pig Spark Client Spark Client Spark Client

    10 NodeManager Pig Spark Client Tez Client Tez Client Tez Client

    11 Pig SNameNode Tez Client YARN Client YARN Client YARN Client

    12 ResourceManager Spark Client YARN Client ZooKeeper Client ZooKeeper Client ZooKeeper Client

    13 Spark Client Tez Client ZooKeeper Client ZooKeeper Server    

    14 Spark History Server WebHCat Server ZooKeeper Server      

    15 Tez Client YARN Client        

    16 YARN Client ZooKeeper Client        

    17 ZooKeeper Client ZooKeeper Server        

    18 ZooKeeper Server          

    Name Value

    Ambari Metrics User ams

    Smoke User ambari-qa

    Hadoop Group hadoop

    HDFS User hdfs

    Proxy User Group users

    HAWQ Admin User gpadmin

    HBase User hbase

    HCat User hcat

    Hive User hive

    WebHCat User hcat

    Infra Solr User infra-solr

    Livy Group livy

    Livy User livy

    Mapreduce User mapred

    Ranger Group ranger

    Ranger User ranger

    Spark Group spark

    Spark User spark

    Spark Group spark

    Spark User spark

    Tez User tez

    Yarn User yarn

    zeppelin_group zeppelin

    zeppelin_user zeppelin

    ZooKeeper User zookeeper

    转载请注明原文地址: https://ju.6miu.com/read-3007.html

    最新回复(0)