快速搭建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 |
设置密码策略(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 用户。
感谢