• Kerberos(一) 安装


    1、服务器基本信息

    操作系统:centos7

    数量:2

    主机名映射关系

    IP hostname server
    192.168.4.50 manager1 Kerberos server(kdc)
    192.168.0.230 yjt Kerberos client

    2、安装ntp服务

    NTP服务搭建

    3、安装kerber

    3.1、安装

    server端:

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

    client端

    # yum -y install krb5-devel krb5-workstation

    如果想源码编译安装,可下载:https://kerberos.org/dist/index.html

    配置kerberos  server  主要修改三个配置文件,如下:

    (1) /etc/krb5.conf

    (2) /var/kerberos/krb5kdc/kdc.conf

    (3) /var/kerberos/krb5kdc/kadm5.acl

    3.2、配置krb5.conf文件

    修改server端上面的krb5.conf文件

    # cat /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
    default_realm = EXAMPLE.COM
    default_ccache_name = KEYRING:persistent:%{uid}

    [realms]
     EXAMPLE.COM = {
     kdc = kerberos.example.com
     admin_server = kerberos.example.com
     }

    [domain_realm]
    .example.com = EXAMPLE.COM
    example.com = EXAMPLE.COM

    [kdc]

    profile = /var/kerberos/krb5kdc/kdc.conf

    #以上是默认的文件信息。

    配置解释:

    [logging]  这个组里面配置的是一些与日志存放路径相关的信息。

      default: 用于配置krb5libs日志存放路径

      kdc: 用于配置krb5kdc日志存放路径

      admin_server: 用于配置kadmin服务日志存放路径

    [libdefaults] 在使用Kerberos时使用的默认值。

      dns_lookup_realm : 与dns参数有关,猜测用于域名解析,默认是false,当设置为true时,dns参数才起作用,有关dns参数获取其他参数可以查看官方文档。

      ticket_lifetime: 获取到的票据存活时间,也就是该票据可以用多久,默认是1天

      renew_lifetime:票据可更新的时间,也就是说该票据可以延迟到期的天数。默认是7天

      forwardable:票据是否可以被kdc转发, 默认是true。

      rdns :在进行dns解析的时候,正反向都可以,默认是true,如果dns_canonicalize_hostname参数被设置为false,那么rdns这个参数将无效。

      default_realm:默认的领域,当客户端在连接或者获取主体的时候,当没有输入领域的时候,该值为默认值(列如:使用kinit admin/admin 获取主体的凭证时,没有输入领域,而传到kdc服务器的时候,会变成 admin/admin@EXAMPLE.COM ),这个值需要在[realms]中定义,如果有多个领域,都需要在realms中定义。默认以大写书写。

      default_ccache_name:默认缓存的凭据名称,不推荐使用,当在客户端配置该参数的时候,会提示缓存错误信息。

    [realms]   该组主要是配置领域相关的信息,默认只有一个,可以配置多个,如果配置多个(比如:HADOOP.COM, HBASE.COM),但是default_realm值定义为HADOOP.COM,那么客户端在获取与HBASE.COM相关的凭据时,需要指定具体的域名(比如客户端初始化凭据: kinit admin/admin@HBASE.COM).

      EXAMPLE.COM: 简单说就是域名,对应用kerberos来说就是领域,相当于编程里面的namespace。

      kdc : kdc服务器地址。格式  机器:端口, 默认端口是88

      admin_server: admin服务地址 格式 机器:端口, 默认端口749

      default_domain: 指定默认的域名

    [domain_realm]   指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。

    [kdc]:

      kdc的配置信息。即指定kdc.conf的位置。
      profile   :kdc的配置文件路径,默认值下若无文件则需要创建。

     3.3、配置kdc.conf

    #cat /var/kerberos/krb5kdc/kdc.conf 
    [kdcdefaults]
     kdc_ports = 88
     kdc_tcp_ports = 88
    
    [realms]
      EXAMPLE.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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
     }

    #以上是默认的配置信息
    参数解析:

    [
    kdcdefaults] 改组主要是用于配置全局信息。也就是kdc的默认值。
      kdc_ports: kdc默认端口 
      kdc_tcp_ports: kdc默认的tcp端口
    [realms] 该配置项主要是用于配置每个域的具体信息。
    • EXAMPLE.COM: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。
    • master_key_type:和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。
    • acl_file:标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
    • supported_enctypes:支持的校验方式。
    • admin_keytab:KDC 进行校验的 keytab。
    
    

    关于AES-256加密

    对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File。

    下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security (如果已经存在,可以考虑先删除)

    3.4、配置kadm5.acl

    #cat /var/kerberos/krb5kdc/kadm5.acl 
    */admin@EXAMPLE.COM    *

    解析:
    该配置文件主要是用于管理员登陆的acl
    配置格式:
    Kerberos_principal permissions [target_principal] [restrictions]
    第一列: */admin@HADOOP.COM  对应  Kerberos_principal  表示主体(principal)名称
    第二列:* 对应 permissions 表示权限
    上述的配置表示以/admin@WXAMPLE.COM结尾的用户拥有*(all 也就是所有)权限,具体配置可根据项目来是否缩小权限。

    4、Kerberos操作

    4.1、创建数据库

    初始化数据库 -r 指定域名(也就是在krb5.conf文件[realms]组里面定义的域名) -s选项指定将数据库的主节点密钥存储在文件中,从而可以在每次启动KDC时自动重新生成主节点密钥
    #kdb5_util -s create HADOOP.COM

    出现 Loading random data 的时候另开个终端执行点消耗CPU的命令如 cat /dev/sda > /dev/urandom 可以加快随机数采集。

    该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。

    如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。

    #ll /var/kerberos/krb5kdc/  数据库创建完成以后,会在该目录下生成以principal开头的四个文件
    total 48
    -rw------- 1 root root    21 Oct 18 14:28 kadm5.acl                       #kerberos管理员的访问权限控制文件
    -rw------- 1 root root   451 Oct 18 15:01 kdc.conf              #kdc 主配置文件                            
    -rw------- 1 root root 32768 Oct 24 14:41 principal                       # kerberos数据库文件
    -rw------- 1 root root  8192 Oct 23 16:31 principal.kadm5                 #Kerberos数据库管理文件
    -rw------- 1 root root     0 Oct 23 16:31 principal.kadm5.lock            #kerberos 数据库管理的锁文件
    -rw------- 1 root root     0 Oct 24 14:41 principal.ok                    # kerberos数据库文件

    4.2、启动服务

    启动kdc服务

    # systemctl start krb5kdc
    # systemctl enable krb5kdc #开启自启

    启动kadmin服务

    # systemctl start kadmin
    # systemctl enable kadmin #开启自启

    4.3、创建管理员

    关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限:
    
    如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local
    如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin
    说白了一点,在server上使用kadmin.local,在client使用kadmin 在 server 上创建远程管理的管理员: 第一种方法: # kadmin.local #进入控制台
    addprinc admin/admin #创建管理员
    手动输入两次密码,这里密码为123456
    第二种方法: # kadmin.local
    -q "addprinc addmin/admin"
    第三种方法: 不用手动输入密码 # echo
    -e "123456 123456" | kadmin.local -q "addprinc admin/admin" 系统会提示输入密码,密码不能为空,且需妥善保存

    4.4、客户端测试kadmin

    [hduser@yjt ~]$ kinit admin/admin    #获取管理员凭证(TGT)
    Password for admin/admin@HADOOP.COM:   #输入密码,也就是123456
    [hduser@yjt ~]$ kadmin 
    Couldn't open log file /var/log/kadmind.log: 权限不够
    Authenticating as principal admin/admin@HADOOP.COM with password.
    Password for admin/admin@HADOOP.COM:   #输入密码 123456
    kadmin:   #控制台

    5、kerberos常用命令

    服务端操作:

    在控制台输入 ? 可以查看相关命令

    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: addprinc
    usage: add_principal [options] principal
    options are:
    [-randkey|-nokey] [-x db_princ_args]* [-expire expdate] [-pwexpire pwexpdate] [-maxlife maxtixlife]
    [-kvno kvno] [-policy policy] [-clearpolicy]
    [-pw password] [-maxrenewlife maxrenewlife]
    [-e keysaltlist]
    [{+|-}attribute]
    attributes are:
    allow_postdated allow_forwardable allow_tgs_req allow_renewable
    allow_proxiable allow_dup_skey allow_tix requires_preauth
    requires_hwauth needchange allow_svr password_changing_service
    ok_as_delegate ok_to_auth_as_delegate no_auth_data_required
    lockdown_keys

    where,
    [-x db_princ_args]* - any number of database specific arguments.
    Look at each database documentation for supported arguments

    5.1、添加主体(principal)


    add_principal, addprinc, ank 这几个命令都可以创建主体(相当于用户)
    服务器操作测试:
    # kadmin.local 进入到控制台
    控制台是以kadmin开头的,如下:
    kadmin: addprinc yjt/yjt #创建主体(用户)yjt/yjt 需要输入密码
    kadmin: addprinc -pw 123456 yjt/yjt # 创建yjt/yjt主体,密码使用-pw指定
    kadmin: addprinc -randkey yjt/yjt #生成随机密码

    5.2、删除主体

    delete_principal, delprinc # 删除主体,删除的时候会询问是否删除

    kadmin: delprinc yjt/yjt
    Are you sure you want to delete the principal "yjt/yjt@HADOOP.COM"? (yes/no): yes
    Principal "yjt/yjt@HADOOP.COM" deleted.
    Make sure that you have removed this principal from all ACLs before reusing.

    5.3、修改凭证

    modify_principal, modprinc   #修改用户
    比如修改延迟到期时间:

    kadmin: modprinc -maxrenewlife 8days yjt/yjt
    Principal "yjt/yjt@HADOOP.COM" modified.

    5.4、列出当前凭证

    list_principals, listprincs, get_principals, getprincs  #列出当前凭证

    kadmin: listprincs
    HTTP/yjt@HADOOP.COM
    K/M@HADOOP.COM
    admin/admin@HADOOP.COM
    dn/yjt@HADOOP.COM
    hbase/yjt@HADOOP.COM
    hdfs/yjt@HADOOP.COM
    hive/yjt@HADOOP.COM
    host/yjt@HADOOP.COM
    jn/yjt@HADOOP.COM
    kadmin/admin@HADOOP.COM
    kadmin/changepw@HADOOP.COM
    kadmin/manager1@HADOOP.COM
    kiprop/manager1@HADOOP.COM
    krbtgt/HADOOP.COM@HADOOP.COM
    nm/yjt@HADOOP.COM
    nn/yjt@HADOOP.COM
    rm/yjt@HADOOP.COM
    test@HADOOP.COM
    yarn/yjt@HADOOP.COM
    yjt/yjt@HADOOP.COM
    zkcli/yjt@HADOOP.COM
    zkcli@HADOOP.COM
    zkserver/yjt@HADOOP.COM
    zookeeper/yjt@HADOOP.COM

    5.5、生成密钥文件

    ktadd, xst
    kadmin: xst -norandky -k hadoop.keytab jn/yjt nn/yjt # -k指定密钥文件的位置,如果是相对路径,文件生成在当前路径下,可以指定多个认证主体

    如何合并多个密钥文件的信息到一个文件?例如,在当前路径下,存在nn.keytab, dn.keytab ,现在我想把这两个文件里面的密钥合并到hadoop.keytab,操作如下:
    在命令行输入ktutil
    #ktutil #进入到控制台
    read_kt, rkt #这两个命令可以从keytab里面读取出密钥信息
    ktutil:  rkt nn.keytab
    ktutil: rkt dn.keytab
    write_kt, wkt # 这两个命令可以把当前的keylist写入到一个keytab文件,这个keylist信息就是上面使用rkt从keytab读取的信息
    ktutil: wkt hadoop.keytab

    5.6、获取凭据信息

    get_principal, getprinc  # 获取凭据信息的两个命令

    kadmin.local: getprinc yjt/yjt
    Principal: yjt/yjt@HADOOP.COM
    Expiration date: [never]
    Last password change: Thu Oct 24 18:01:22 CST 2019
    Password expiration date: [never]
    Maximum ticket life: 1 day 00:00:00
    Maximum renewable life: 8 days 00:00:00  注意这里:刚才被我们该过
    Last modified: Thu Oct 24 18:07:28 CST 2019 (admin/admin@HADOOP.COM)
    Last successful authentication: [never]
    Last failed authentication: [never]
    Failed password attempts: 0
    Number of keys: 8
    Key: vno 1, aes256-cts-hmac-sha1-96
    Key: vno 1, aes128-cts-hmac-sha1-96
    Key: vno 1, des3-cbc-sha1
    Key: vno 1, arcfour-hmac
    Key: vno 1, camellia256-cts-cmac
    Key: vno 1, camellia128-cts-cmac
    Key: vno 1, des-hmac-sha1
    Key: vno 1, des-cbc-md5
    MKey: vno 1
    Attributes:
    Policy: [none]

    5.7、生成dump文件


    [root@manager1 yjt-test 18:25:39]#kdb5_util dump kerberos_data [root@manager1 yjt-test 18:26:48]#ll total 36-rw------- 1 root root 24867 Oct 24 18:26 kerberos_data -rw------- 1 root root 1 Oct 24 18:26 kerberos_data.dump_ok

    5.8、修改认证主体的密码

    #kpasswd yjt/yjt
    Password for yjt/yjt@HADOOP.COM: 
    Enter new password: 
    Enter it again: 
    Password changed.

    客户端操作:

    5.9、获取凭证

    [root@manager1 yjt-test 18:28:06]#kinit  yjt/yjt    #基于密码,需要输入密码
    [root@manager1 yjt-test 18:28:06]#kinit -kt app.keytab yjt/yjt   #基于密钥的方式验证

    5.9、查看当前的凭证

    [root@manager1 yjt-test 18:31:53]#klist 
    Ticket cache: FILE:/tmp/krb5cc_0
    Default principal: nm/yjt@HADOOP.COM
    
    Valid starting       Expires              Service principal
    10/23/2019 19:49:29  10/24/2019 19:49:29  krbtgt/HADOOP.COM@HADOOP.COM

    5.10、删除当前认证的缓存

    [root@manager1 yjt-test 18:31:55]#kdestroy 

    5.11、查看密钥文件的认证主体列表

    [root@manager1 kerveros_security 18:34:25]#klist -ket hadoop.keytab 
    Keytab name: FILE:hadoop.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des3-cbc-sha1) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (arcfour-hmac) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (camellia256-cts-cmac) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (camellia128-cts-cmac) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des-hmac-sha1) 
       1 10/24/2019 14:41:57 hdfs/yjt@HADOOP.COM (des-cbc-md5) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des3-cbc-sha1) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (arcfour-hmac) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (camellia256-cts-cmac) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (camellia128-cts-cmac) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des-hmac-sha1) 
       1 10/24/2019 14:41:57 yarn/yjt@HADOOP.COM (des-cbc-md5) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des3-cbc-sha1) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (arcfour-hmac) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (camellia256-cts-cmac) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (camellia128-cts-cmac) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des-hmac-sha1) 
       1 10/24/2019 14:41:57 HTTP/yjt@HADOOP.COM (des-cbc-md5) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (aes256-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des3-cbc-sha1) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (arcfour-hmac) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (camellia256-cts-cmac) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (camellia128-cts-cmac) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des-hmac-sha1) 
       1 10/24/2019 14:41:57 host/yjt@HADOOP.COM (des-cbc-md5)

    参考:

    官网

    oracle kerberos 详解

  • 相关阅读:
    关于Quartz .NET(V3.0.7)的简要说明
    .NET实现一个简单的IOC容器
    .NET中的控制反转及AutoFac的简单说明
    .NET异步程序设计——async&await
    .NET异步程序设计——任务并行库
    .NET异步程序设计——异步委托
    .NET异步程序设计——概念引入
    关于C#程序的单元测试
    关于Log4Net的使用及配置方式
    基于.net ,使用几种常见的NoSQL数据库
  • 原文地址:https://www.cnblogs.com/yjt1993/p/11734038.html
Copyright © 2020-2023  润新知