热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

快速搭建Kerberos服务端及入门使用Kerberos是一种网络身份验证协议。它旨在通过使用秘密密钥加密为客户端服务器应用程序提供强身份验证。麻省理工学院可以免费实施该协议。Ke

                                                                                              快速搭建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 functionsalias 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 = 88kdc_tcp_ports = 88[realms]SUPERRED.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_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.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_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.comkdc = kerberos.superred.com:88admin_server = kerberos.superred.com:749default_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.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_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.comkdc = kerberos.superred.com:88admin_server = kerberos.superred.com:749default_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.COMValid 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, ankAdd principal
delete_principal, delprincDelete principal
modify_principal, modprincModify principal
rename_principal, renprincRename principal
change_password, cpw Change password
get_principal, getprinc Get principal
list_principals, listprincs, get_principals, getprincsList 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, getpolsList 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.COMValid 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.COMValid 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: quitscp 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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Harmony 与 Game Space 达成合作,在 Shard1 上扩展 Web3 游戏
    旧金山20 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
author-avatar
书友72177273
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有