快速搭建kerberos服务端及入门使用

                                                                                              快速搭建Kerberos服务端及入门使用

      Kerberos是一种网络身份验证协议。它旨在通过使用秘密密钥加密为客户端/服务器应用程序提供强身份验证。麻省理工学院可以免费实施该协议。Kerberos也可用于许多商业产品。 

  尽管有许多配置参数和设置,但配置一个受Kerberos管理的Hadoop集群还是相当简单的。只要清楚地了解在前面部分中介绍的Kerberos概念,就可以自信地使用Kerberos来保护集群。

  总之,Kerberos是解决您的网络安全问题的解决方案。它通过网络提供身份验证和强大加密工具,帮助您保护整个企业的信息系统。kerberos的官方地址:http://web.mit.edu/kerberos/

 

一.搭建Kerberos服务器(node101.yinzhengjie.org.cn)

  要配置Kerberos身份进行验证,就必须先安装和配置Kerberos。此配置需要在使用Kerberos调整Hadoop集群配置前完成。
  首先安装Kerberos软件,这意味着在一个集群节点上安装KDC。然后,在所有集群节点上安装Kerberos客户端。
  配置Kerberos意味着配置KDC管理的各个方面,ticket的生命周期等。在此过程中,可以创建域,用户和服务主体,并开始为Kerberos身份验证调整集群配置。

一.网络安全框架协议Kerberos简介

1>.什么是Kerberos

  Kerberos是一个网络认证的框架协议,它的命名灵感来自于希腊神话中一只三头犬守护兽,寓意其拥有强大的保护能力。Kerberos协议通过强大密钥系统为Server(服务端)和Client(客户端)应用程序之间提供强大的通信加密和认证服务。在使用Kerberos协议认证的集群中,Client不会直接和他的Server服务进行通信认证,而是通过KDC(key Distribution Center)这样一个独立的服务来完成互相之间的认证。同时Kerberos 还能将服务之间的全部通信进行加密以保证其隐私于完整性。

  Kerberos由麻省理工学院创建,作为解决这些网络安全问题解决方案。Kerberos协议使用强加密技术,以便客户端可以通过不安全的网络连接向服务器(反之亦然)证明其身份。在客户端和服务器使用Kerberos证明其身份后,他们还可以加密所有通信,以确保在业务开展时的隐私和数据完整性。详情请参考:https://web.mit.edu/kerberos/

2>.Kerberos核心概念

  Kerberos协议中有一些重要的概念,了解这些概念有助于我们理解Kerberos的认证过程。

  2.1>.KDC(Key Distribution Centor):

      KDC用于验证各个模块,是统一认证服务。

  2.2>.Kerberos KDC Server:

      KDC所在的服务器。

  2.3>.Kerberos Client

      任何一个需要通过KDC认证的机器(或模块)。

  2.4>.Principal

      用于验证一个用户或者一个Service的唯一标识,相当于一个账号,需要为其设置密码。

  2.5>.Keytab

      包含一个或多个Principal以及其密码的文件,可用于用户登录。

  2.6>.Relam

      由KDC以及多个Kerberos Client组成的网络。

  2.7>.KDC Admin Account

      KDC中拥有管理权限的用户(例如添加,修改,删除Principal)。

  2.8>.Authentication Sever(AS)

      用于初始化认证,并生成Ticket Granting Ticket(TGT)。

  2.9>.Ticket Granting Server(TGS)

      在TGT的基础上生成Service Ticket。一般情况下AS和TGS都在KDC的Server上。

3>.Kerberos的认证流程

  Kerberos协议主要由Key分发中心(即KDC,全称“Key Distribution Centor”),服务提供者(Server)和用户(User)三部分组成,它的认证过程如下图所示:

    第 1 步:

      client(一个User或者一个Service)会用Pricipal到Authentication Sever(AS)去认证,希望获取访问server的权限。

    第 2 步:

      kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,返回AS返回TGT给client。

    第 3 步:

      这是只有AS和这个Principal的使用者可以识别该TGT。在拿到加密的TGT之后,client(User或者Service)会使用Principal的Key来解密TGT。并使用解密后的TGT继续向kerberos请求,希望获取访问server的权限。

    第 4 步:

      kerberos又一次得到了这个消息,这时候通过client(User或者Service)消息中的TGT(注意:此时的TGT是第三步中解密后的TGT,并不是第二步的TGT哟!),判断出了client拥有了这个权限,给了client访问server的权限Server Ticket。

    第 5~6 步:

      client得到希望访问的Server Ticket后,终于可以成功访问该Server。需要注意的是,得到的这个Server Ticket只是针对这台Server,其他server需要继续向TGS申请(因为每台服务器都有自己的Server Ticket哟!)。在Kerberos认证的集群中,只有拿着这个Service Ticket才可以访问真正的Server从而实现自己的业务逻辑。

4>.Kerberos的优点

  分析整个Kerberos的认证过程之后,我们来总结一下Kerberos都有哪些优点:

  4.1>.较高的Performance

      虽然我们一再地说Kerberos是一个涉及到3方的认证过程:Client、Server、KDC。但是一旦Client获得用过访问某个Server的Ticket,该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。和传统的基于Windows NT 4.0的每个完全依赖Trusted Third Party的NTLM比较,具有较大的性能提升。

  4.2>.实现了双向验证(Mutual Authentication)

      传统的NTLM认证基于这样一个前提:Client访问的远程的Service是可信的、无需对于进行验证,所以NTLM不曾提供双向验证的功能。这显然有点理想主义,为此Kerberos弥补了这个不足:Client在访问Server的资源之前,可以要求对Server的身份执行认证。

  4.3>.对Delegation的支持

      Impersonation和Delegation是一个分布式环境中两个重要的功能。Impersonation允许Server在本地使用Logon 的Account执行某些操作,Delegation需用Server将logon的Account带入到另过一个Context执行相应的操作。NTLM仅对Impersonation提供支持,而Kerberos通过一种双向的、可传递的(Mutual 、Transitive)信任模式实现了对Delegation的支持。

  4.4>.互操作性(Interoperability)

    Kerberos最初由MIT首创,现在已经成为一行被广泛接受的标准。所以对于不同的平台可以进行广泛的互操作。

二.使用FreeIPA安装Kerberos和LDAP

   Kerberos协议只是一种协议标准的框架,而MIT Kerberos则是实现了该协议的认证服务,是Kerberos协议的物理载体。将它于Hadoop服务进行集成便能够很好地解决安全性不足的问题。除了需要安装MIT Kerberos之外,我们还需要安装LDAP。Kerberos和LDAP服务这类基础设施组件虽好,但他们手动安装起来都十分的繁琐。这种手动安装的方式既低效又不利于管理。因此我们可以通过FreeIPA来安装这些基础组件。

  FreeIPA是一个集成的安装信息管理解决方案。它整合了LDAP,Kerberos,NTP,Bind,Apache和Tomcat等核心软件包,从而形成来一个以LDAP为数据存储后端,Kerberos为验证前端,Bind为主机识别,同时还提供统一的命令行管理工具和WEB管理界面的集成信息管理系统。FreeIPA建立在著名的开源组件和标准协议之上,具有易于管理,安装和配置任务自动化的特点。FreeIPA是平台基础设施的一记强力组合拳,它就像大数据版本的XAMPP一样,为我们在基础设施安装于管理上带来了巨大的便利。FreeIPA它不仅继承了LDAP和Kerberos这两个非常重要的组件,并且在这些服务之上还创建了一个CLI接口。通过这层接口我们能够轻松地完成一系列动作,例如对Kerberos用户的管理工作。值得注意的是,当我们通过FreeIPA创建一个Kerberos用户的同时,他还会自动创建一个相同的LADP用户和Linux服务器用户,这意味着什么呢?这意味着从逻辑上来看,我们创建了一个Kerberos用户,而从物理上其实FreeIPA帮我们创建了三个用户,并且它能够保证这三个用户事物的一致性。这是一项非常重要且了不起的特性,它在某种程度上帮我们实现了用户的统一。

   FreeIPA服务分为IPA-Server和IPA-Client两个部分,IPA-Server包含了所有集成的组件以及Web UI管理控制台,可以说它是控制于验证的中心服务。我们需要单独准备一台服务器来安装IPA-Server程序,这台服务器不能属于任何由Ambari管理的集群节点(本篇博客我使用的节点“node100.yinzhengjie.com”来部署)。这是因为安装IPA-Server的程序中,安装程序会将其所在的服务器地址注册到DNS服务中,而Ambari的集群节点也会进行相同的注册动作。如果一台服务器同时安装来IPA-Server并注册成为Ambari节点,就会造成名称的冲突,导致在注册DNS的过程中失败。IP-Server并注册成为Ambari节点,就会造成名称的冲突,导致在注册DNS的过程中失败。IPA-Client于IPA-Server则恰恰相反,Ambari管理的所有集群节点服务器上都必须安装IPA-Client。

  XAMPP是完全免费且易于安装的Apache发行版,其中包含MariaDB、PHP和Perl。XAMPP开放源码包的设置让安装和使用出奇容易。是开源基础组件的一记强力组合拳。官网地址:https://www.apachefriends.org/zh_cn/index.html

  温馨提示:在部署前建议直接关闭到selinux和firewalld服务,FreeIPA文档参考链接为:https://www.globo.tech/learning-center/install-freeipa-centos-7/

1>.扩充密钥长度

  Kerberos需要使用256为的AES加密算法,而JRE默认中的密钥长度比较短,并且不足以支撑。所以我们需要升级集群中所有服务器节点JRE的安全策略,使其能够解除密钥长度的限制。修改的方式是下载并替换JRE中的Unlimited JCEPolicy文件。以JDK1.8为例,下载地址为:https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

 将其解压之后会得到“local_policy.jar”和“US_export_policy.jar”两个jar文件,将它们复制到每台服务器JDK路径下到“jre/lib/security”目录下(例如拷贝到“/yinzhengjie/softwares/jdk/jre/lib/security/”,点击下面的按钮查看详细的操作)即可完成安全策略的升级。

 

主节点上安装Kerberos的步骤如下所示:

1>.安装KDC 服务器

设置主机名

centos系列的

(1) [root@kerberos.superred.com ~]#cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=kerberos.superred.com

(2)[root@kerberos.superred.com ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 kerberos
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.3.160 koji.superred.com koji
10.10.3.111 kerberos.superred.com kerberos
10.10.3.135 node1.superred.com node1

或者hostnamectl set-hostname kerberos.superred.com 自动更新信息,但是/etc/hosts不会更新,需要手动

如果想显示全名PS:PS1='[\u@\H \w]\$'   中的H是全名字,h是段名字。

[root@kerberos.superred.com ~]#cat ~/.bashrc 
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PS1='[\u@\H \w]\$'
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi
[root@kerberos.superred.com ~]#yum install -y krb5-server  krb5-libs
Loaded plugins: copr, fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                                                                                                                                                           | 9.4 kB  00:00:00     
 * base: mirrors.aliyun.com
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.huaweicloud.com
base                                                                                                                                                                                                           | 3.6 kB  00:00:00     
copr:copr.fedorainfracloud.org:clime:rpkg-util                                                                                                                                                                 | 3.3 kB  00:00:00     
epel                                                                                                                                                                                                           | 4.7 kB  00:00:00     
extras                                                                                                                                                                                                         | 2.9 kB  00:00:00     
updates                                                                                                                                                                                                        | 2.9 kB  00:00:00     
Package krb5-server-1.15.1-46.el7.x86_64 already installed and latest version
Package krb5-libs-1.15.1-46.el7.x86_64 already installed and latest version
Nothing to do
[root@kerberos.superred.com ~]#rpm -qa | grep krb5
krb5-server-1.15.1-46.el7.x86_64
krb5-libs-1.15.1-46.el7.x86_64

 

2>.修改KDC的配置文件 

[root@kerberos.superred.com ~]#cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 SUPERRED.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_ports               :指定KDC的默认端口。
   kdc_tcp_ports            :指定KDC的TCP协议默认端口。

[realms]
  该部分列出每个领域的配置。
   SUPERRED.COM       : 是设定的 realms。名字随意,推荐为大写!,但须与/etc/krb5.conf保持一致。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感。
   master_key_type       : 默认为禁用,但如果需要256为加密,则可以下载Java加密扩展(JCE)并安装。禁用此参数时,默认使用128位加密。
  acl_file           : 标注了 admin 的用户权限的文件,若文件不存在,需要用户自己创建。即该参数允许为具有对Kerberos数据库的管理访问权限的UPN指定ACL。
   supported_enctypes    : 指定此KDC支持的各种加密类型。
   admin_keytab       : KDC 进行校验的 keytab。
    max_life         :  该参数指定如果指定为2天。这是票据的最长存活时间。
  max_renewable_life   :  该参数指定在多长时间内可重获取票据。
   dict_file         :  该参数指向包含潜在可猜测或可破解密码的文件。

3>.配置KDC服务的权限管理文件

[root@kerberos.superred.com ~]#cat /var/kerberos/krb5kdc/kadm5.acl 
*/admin@SUPERRED.COM	*
#我们指定*/admin@SUPERRED.COM用户为管理员用户!拥有全部权限,注意这个通配符“*”,你懂的。
*/admin@SUPERRED.COM *
以上参数说明:
上述参数只有两列,第一列为用户名,第二列为权限分配。文件格式是:Kerberos_principal permissions [target_principal] [restrictions],下面是对上面的文件编写参数说明。
*/admin@SUPERRED.COM          :表示以"/admin@YINZHENGJIE.COM"结尾的用户。
*                :表示UNP可以执行任何操作,因为权限为所有权限,因此第二个“*”和第一个“*”区别希望大家一定要弄明白哟~

4.修改Kerberos的配置文件信息(包含KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。)

[root@kerberos.superred.com ~]#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
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
default_realm = SUPERRED.COM
#default_ccache_name = KEYRING:persistent:%{uid}
#udp_preferent_limit = 1

[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }
 SUPERRED.COM = {
   #kdc = kerberos.superred.com
   #admin_server = kerberos.superred.com
   kdc = kerberos.superred.com:88
   admin_server = kerberos.superred.com:749
   default_domain = SUPERRED.COM
  }
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
.superred.com = SUPERRED.COM
superred.com = SUPERRED.COM

[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
以上相关配置参数说明:
[logging]:
  Kerberos守护进程的日志记录方式。换句话说,表示 server 端的日志的打印位置。
    default                         :默认的krb5libs.log日志文件存放路径
    kdc                             :默认的krb5kdc.log日志文件存放路径
    admin_server                    :默认的kadmind.log日志文件存放路径

[libdefaults]:
  Kerberos使用的默认值,当进行身份验证而未指定Kerberos域时,则使用default_realm参数指定的Kerberos域。即每种连接的默认配置,需要注意以下几个关键的配置:
    dns_lookup_realm                :DNS查找域名,我们可以理解为DNS的正向解析,该功能我没有去验证过,默认禁用。(我猜测该功能和domain_realm配置有关)
    ticket_lifetime                 :凭证生效的时限,设置为7天。
    rdns                            :我理解是和dns_lookup_realm相反,即反向解析技术,该功能我也没有去验证过,默认禁用即可。(我猜测该功能和domain_realm配置有关)
    pkinit_anchors                  :在KDC中配置pkinit的位置,该参数的具体功能我没有做进一步验证。
    default_realm = SUPERRED.COM :设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。其中YINZHENGJIE.COM可以为任意名字,推荐为大写。必须跟要配置的realm的名称一致。
    default_ccache_name:           :顾名思义,默认的缓存名称,不推荐使用该参数。
   
   renew_lifetime                  :凭证最长可以被延期的时限,一般为7天。当凭证过期之后,对安全认证的服务的后续访问则会失败。
   forwardable                     :如果此参数被设置为true,则可以转发票据,这意味着如果具有TGT的用户登陆到远程系统,则KDC可以颁发新的TGT,而不需要用户再次进行身份验证。
   renewable                       :是否允许票据延迟

[realms]:
  域特定的信息,例如域的Kerberos服务器的位置。可能有几个,每个域一个。可以为KDC和管理服务器指定一个端口。如果没有配置,则KDC使用端口88,管理服务器使用749。即列举使用的 realm域。
  kdc                              :代表要KDC的位置。格式是 机器:端口
  admin_server                     :代表admin的位置。格式是 机器:端口
   default_domain                   :顾名思义,指定默认的域名。

[domain_realm]:
   指定DNS域名和Kerberos域名之间映射关系。指定服务器的FQDN,对应的domain_realm值决定了主机所属的域。
  
[kdc]:
  kdc的配置信息。即指定kdc.conf的位置。
  profile                          :kdc的配置文件路径,默认值下若无文件则需要创建。

5>.初始化KDC数据库

kdb5_util create -r SUPERRED.COM -s    #注意,-s选项指定将数据库的主节点密钥存储在文件中,从而可以在每次启动KDC时自动重新生成主节点密钥。记住主密钥,稍后回使用
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'SUPERRED.COM',
master key name 'K/M@SUPERRED.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:                       #这里需要输入一个管理KDC服务器的密码!千万别忘记了,忘记的话你就只能重新初始化KDC数据库啦!(如果遇到数据库已经存在的提示,可以把/var/kerberos/krb5kdc/目录下的principal的相关文件都删除掉{rm -f /var/kerberos/krb5kdc/principal* }。默认的数据库名字都是principal。可以使用-d指定数据库名字。)
Re-enter KDC database master key to verify: 

kdb5_util: Cannot open DB2 database '/var/kerberos/krb5kdc/principal': File exists while creating database '/var/kerberos/krb5kdc/principal'       #此故障已解决-->{rm -f /var/kerberos/krb5kdc/principal* }

[root@kerberos.superred.com ~]# ll -a /var/kerberos/krb5kdc/ #当我们创建Kerberos数据库成功后,默认会在该目录下创建以下5个文件,我用粉色的颜色标记出来啦~
total 36
drwxr-xr-x  2 root root   151 Nov 11 14:00 .
drwxr-xr-x. 4 root root    33 Nov 10 17:40 ..
-rw-------  1 root root    77 Nov 11 14:00 .k5.SUPERRED.COM  #存储文件k5.YINZHENGJIE.COM,它默认是隐藏文件哟~
-rw-------  1 root root    23 Nov 10 17:48 kadm5.acl   #定义管理员权限的配置文件
-rw-------  1 root root   452 Nov 11 10:19 kdc.conf    #KDC的主配置文件
-rw-------  1 root root 16384 Nov 11 14:24 principal   #Kerberos数据库文件
-rw-------  1 root root  8192 Nov 11 10:42 principal.kadm5    #Kerberos数据库管理文件
-rw-------  1 root root     0 Nov 11 10:42 principal.kadm5.lock  #数据库锁管理文件
-rw-------  1 root root     0 Nov 11 14:24 principal.ok  #Kerberos数据库文件  

6>.启动KDC服务器 

systemctl enable krb5kdc --now

7>.启动Kerberos服务器

systemctl enable kadmin--now

8>.KDC 服务器上添加超级管理员账户 

kadmin.local 
Authenticating as principal root/admin@SUPERRED.COM with password.
kadmin.local:  
kadmin.local:  addprinc root/admin        #我们为KDC添加一个管理员用户,关于管理员规则我们以及在"/var/kerberos/krb5kdc/kadm5.acl"中定义的。细心的小伙伴发现,我们写的是"root/admin",但是创建用户却显示的是"root@admin@SUPERRED.COM"
WARNING: no policy specified for root/admin@SUPERRED.COM; defaulting to no policy
Enter password for principal "root/admin@SUPERRED.COM": 
Re-enter password for principal "root/admin@SUPERRED.COM": 
Principal "root/admin@SUPERRED.COM" created.
kadmin.local:  
kadmin.local:  listprincs 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
kadmin.local:  
kadmin.local:  quit

二.搭建Kerberos客户端环境  我是在另一台服务器操作的

[root@node1.superred.com ~]#yum install krb5-workstation krb5-libs -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.huaweicloud.com
 * updates: mirrors.huaweicloud.com
base                                                                                                                                                                                                           | 3.6 kB  00:00:00     
epel                                                                                                                                                                                                           | 4.7 kB  00:00:00     
extras                                                                                                                                                                                                         | 2.9 kB  00:00:00     
updates                                                                                                                                                                                                        | 2.9 kB  00:00:00     
Package krb5-workstation-1.15.1-46.el7.x86_64 already installed and latest version
Package krb5-libs-1.15.1-46.el7.x86_64 already installed and latest version
Nothing to do
[root@node1.superred.com ~]#rpm -qa | grep krb5
krb5-libs-1.15.1-46.el7.x86_64
krb5-workstation-1.15.1-46.el7.x86_64

2>.将服务端的配置文件拷贝到客户端上,要去除最后俩行

[root@node1.superred.com ~]#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
 pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
default_realm = SUPERRED.COM
#default_ccache_name = KEYRING:persistent:%{uid}
#udp_preferent_limit = 1

[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }
 SUPERRED.COM = {
   #kdc = kerberos.superred.com
   #admin_server = kerberos.superred.com
   kdc = kerberos.superred.com:88
   admin_server = kerberos.superred.com:749
   default_domain = SUPERRED.COM
  }
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
.superred.com = SUPERRED.COM
superred.com = SUPERRED.COM

3>. 客户端配置文件和服务段同步后,进行登陆,验证是否可以成功登陆


[root@node1.superred.com ~]#klist 
klist: No credentials cache found (filename: /tmp/krb5cc_0)
[root@node1.superred.com ~]#kinit root/admin  我们在当前终端使用root/admin@YINZHENGJIE.COM用户登陆成功啦!
Password for root/admin@SUPERRED.COM:   
[root@node1.superred.com ~]#klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root/admin@SUPERRED.COM

Valid starting       Expires              Service principal
11/11/2020 15:01:52  11/12/2020 15:01:50  krbtgt/SUPERRED.COM@SUPERRED.COM

三.Kerberos 一些基本操作命令

1>.使用kadmin.local命令进入本地管理员模式

[root@kerberos.superred.com ~]#kadmin.local 
Authenticating as principal root/admin@SUPERRED.COM with password.
kadmin.local:  ?  #输入“?”可以查看命令列表,如下所示所示。
Available kadmin.local 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.

2>. 查看已经存在的凭据 

kadmin.local:  listprincs 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM
kadmin.local:

3>.创建凭据

kadmin.local:  addprinc -randkey sunzhigang/admin  #生成随机key的凭据
WARNING: no policy specified for sunzhigang/admin@SUPERRED.COM; defaulting to no policy
Principal "sunzhigang/admin@SUPERRED.COM" created.
kadmin.local:  listprincs 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM
kadmin.local: quit 退出
kadmin.local:  addprinc -pw 123456 sunmeiting/admin  #生成指定key的凭据 
WARNING: no policy specified for sunmeiting/admin@SUPERRED.COM; defaulting to no policy
Principal "sunmeiting/admin@SUPERRED.COM" created.
kadmin.local:  list_principals 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunmeiting/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM

4>.删除凭据

kadmin.local:  delete_principal -force sunmeiting/admin@SUPERRED.COM
Principal "sunmeiting/admin@SUPERRED.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
kadmin.local:  list_principals 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM


或者直接
kadmin.local delprinc sunmeiting/admin@SUPERRED.COM

5>.导出某个用户的keytab证书(使用xst命令或者ktadd命令)

kadmin.local:  ktadd|xst   -k  /root/wuqi.keytab-v4 wuqi/admin@SUPERRED.COM
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type des3-cbc-sha1 added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type arcfour-hmac added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type camellia256-cts-cmac added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type camellia128-cts-cmac added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type des-hmac-sha1 added to keytab WRFILE:/root/wuqi.keytab-v4.
Entry for principal wuqi/admin@SUPERRED.COM with kvno 7, encryption type des-cbc-md5 added to keytab WRFILE:/root/wuqi.keytab-v4
klist -k -e -t wuqi.keytab-v4 查看指定信息 默认是查看kinit 之后当前的用户信息

kadmin.local: xst -norandkey -k /root/my.keytab wubo@SUPERRED.COM admin/admin@SUPERRED.COM kadmin/admin@SUPERRED.COM    #将多个principal生产一个keytab

6>.查看当前客户端认真用户 

在客户端查看
[root@node1.superred.com ~]#klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root/admin@SUPERRED.COM

Valid starting       Expires              Service principal
11/11/2020 15:01:52  11/12/2020 15:01:50  krbtgt/SUPERRED.COM@SUPERRED.COM

7>.删除当前的认证的缓存

[root@node1.superred.com ~]#klist 
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root/admin@SUPERRED.COM

Valid starting       Expires              Service principal
11/11/2020 15:01:52  11/12/2020 15:01:50  krbtgt/SUPERRED.COM@SUPERRED.COM
[root@node1.superred.com ~]#kdestroy -A
[root@node1.superred.com ~]#klist 
klist: No credentials cache found (filename: /tmp/krb5cc_0)

8>.认证用户

kadmin.local:  listprincs 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM
kadmin.local:  addprinc test/admin   #创建凭据
WARNING: no policy specified for test/admin@SUPERRED.COM; defaulting to no policy
Enter password for principal "test/admin@SUPERRED.COM": 
Re-enter password for principal "test/admin@SUPERRED.COM": 
Principal "test/admin@SUPERRED.COM" created.
kadmin.local:  listprincs 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
test/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM
kadmin.local:  ktadd -k /root/test.keytab test/admin@SUPERRED.COM  #导出密钥
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/root/test.keytab.
Entry for principal test/admin@SUPERRED.COM with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/root/test.keytab.
kadmin.local:  quit


scp test.keytab 服义务
在客户端

[root@node1.superred.com ~]# kinit -kt test.keytab test/admin #基于密钥的方式进行认证
[root@node1.superred.com ~]#
kinit: Password incorrect while getting initial credentials
遇到上述问题的解决方案(原因:每次生成秘钥文件时,密码可能会进行随机改变,添加"-norandkey"即可解决问题!)

9>.修改Kerberos用户的密码 

kadmin.local:  list_principals 
K/M@SUPERRED.COM
kadmin/admin@SUPERRED.COM
kadmin/changepw@SUPERRED.COM
kadmin/kerberos.superred.com@SUPERRED.COM
kiprop/kerberos.superred.com@SUPERRED.COM
krbtgt/SUPERRED.COM@SUPERRED.COM
root/admin@SUPERRED.COM
sunzhigang/admin@SUPERRED.COM
test/admin@SUPERRED.COM
wubo/admin@SUPERRED.COM
wuqi/admin@SUPERRED.COM
kadmin.local:  change_password -pw 123456 wuqi/admin@SUPERRED.COM
Password for "wuqi/admin@SUPERRED.COM" changed.
kadmin.local

10>.获取凭据信息

kadmin.local:  getprinc wuqi/admin@SUPERRED.COM
Principal: wuqi/admin@SUPERRED.COM
Expiration date: [never]
Last password change: Wed Nov 11 15:20:51 CST 2020
Password expiration date: [never]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Wed Nov 11 15:20:51 CST 2020 (root/admin@SUPERRED.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 8
Key: vno 8, aes256-cts-hmac-sha1-96
Key: vno 8, aes128-cts-hmac-sha1-96
Key: vno 8, des3-cbc-sha1
Key: vno 8, arcfour-hmac
Key: vno 8, camellia256-cts-cmac
Key: vno 8, camellia128-cts-cmac
Key: vno 8, des-hmac-sha1
Key: vno 8, des-cbc-md5
MKey: vno 1
Attributes:
Policy: [none]
kadmin.local:  

11>.查看keytab文件中的帐号列表

[root@node1.superred.com ~]#klist -ket wuqi.keytab
Keytab name: FILE:wuqi.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (aes256-cts-hmac-sha1-96) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (aes128-cts-hmac-sha1-96) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (des3-cbc-sha1) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (arcfour-hmac) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (camellia256-cts-cmac) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (camellia128-cts-cmac) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (des-hmac-sha1) 
   5 11/11/2020 14:23:48 wuqi/admin@SUPERRED.COM (des-cbc-md5)

12>.生成dump文件

[root@kerberos.superred.com ~]#kdb5_util dump ./a
[root@kerberos.superred.com ~]#ls
a  a.dump_ok

 

 

 最近项目组用CDH搭建数据开发环境,有用到Kerberos安全组件。如下是相关命令,请参考:

进入kadmin

kadmin.local / kadmin

创建数据库

kdb5_util create -r HADOOP.COM -s 

启动kdc服务

service krb5kdc start

启动kadmin服务

service kadmin start 

修改当前密码

kpasswd

测试keytab可用性

kinit -k -t /home/chen/cwd.keytab chenweidong@HADOOP.COM

查看keytab

klist -e -k -t /home/chen/cwd.keytab 

清除缓存

kdestroy

通过keytab文件认证登录

kinit -kt /home/chen/cwd.keytab chenweidong@HADOOP.COM

 

 

kadmin模式下:

 

生成随机key的principal

addprinc -randkey root/master@HADOOP.COM

生成指定key的principal

addprinc -pw **** admin/admin@HADOOP.COM

查看principal

listprincs

修改admin/admin的密码

cpw -pw xxxx admin/admin

添加/删除principle

addprinc/delprinc admin/admin

直接生成到keytab

ktadd -k /home/chen/cwd.keytab chenweidong@HADOOP.COM

xst -norandkey -k /home/chen/cwd.keytab chenweidong@HADOOP.COM
#注意:在生成keytab文件时需要加参数”-norandkey”,否则会导致直接使用kinit chenweidong@HADOOP.COM初始化时会提示密码错误。

设置密码策略(policy)

addpol -maxlife "90 days" -minlife "75 days" -minlength 8 -minclasses 3 -maxfailure 10 -history 10 user

添加带有密码策略的用户

addprinc -policy user hello/admin@HADOOP.COM

修改用户的密码策略

modprinc -policy user1 hello/admin@HADOOP.COM

删除密码策略

delpol [-force] user

修改密码策略

modpol -maxlife "90 days" -minlife "75 days" -minlength 8 -minclasses 3 -maxfailure 10 user

 

备注:Kerberos 进入amdin 管理模式需要使用 root 用户。

感谢

https://blog.csdn.net/weixin_34320159/article/details/94659721

https://www.cnblogs.com/yinzhengjie/p/10100098.html

https://blog.csdn.net/weixin_34205826/article/details/92775919

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值