文章目录
- 前言
- 一、Kerberos原理
- 1.1、数据安全防护(kerberos所属的层次)
- 1.2、Kerberos介绍
- 1.3、Kerberos名词介绍
- 1.4、Kerberos术语
- 1.5、Kerberos认证流程
- 1.5.1、Kerberos流程图
- 1.5.2、第一次通信:客户端与AS
- 1.5.3、第二次通信:客户端与TGS
- 1.5.4、第三次通信:客户端与服务器
- 小结
- 1.6、Kerberos优势
- 二、Kerberos安装与使用
- 2.1、Kerberos常见名词术语(realm、principal、keytab、kadmin)
- 2.2、参数配置文件详解
- ①/var/kerberos/krb5kdc/kdc.conf(服务端)
- ②/etc/krb5.conf(客户端)
- 2.3、Kerberos安装
- 2.3.1、实现scp、rsync以及集群xsync分发
- 2.3.2、详细安装Kerberos(服务端与客户端)
- 1、安装Kerberos服务端
- 2、安装Kerberos客户端
- 3、配置服务端kdc.conf文件(暂不修改)
- 4、所有客户端配置krb5.conf
- 5、服务端配置kadmin5.acl文件(暂不修改)
- 6、服务器初始化Kadmin数据库(暂不修改)
- 2.4、Kerberos使用
- ①kadmin.local(服务器端)
- kadmin.local:登录
- listprincs:查看当前数据库具有的主体
- add_principal、delete_principal等:创建、删除、修改密码、查看与销毁当前票据
- ②?获取帮助文档
- ③kadmin(客户端两种登录方式密码、keytab,含创建keytab操作)
前言
个人介绍
博主介绍:✌目前全网粉丝3W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
当前博客相关内容介绍
学习kerberos主要原因是目前部门里会有测试kerberos连通性的问题bug,所以以此来系统学习下kerberos安全认证,主要是学习在kerberos安全配置下如何去访问各个大数据组件。
Kerberos安全认证系列学习教程(B站):https://www.bilibili.com/video/BV1rr421t7Zt【马士兵的系列课程】
学习配套源码(Gitee):https://gitee.com/changluJava/demo-exer/tree/master/bigdata/kerberos/kerberosAuth
博主kerberos学习系列专栏笔记(可见)上方博客文件索引。
一、Kerberos原理
1.1、数据安全防护(kerberos所属的层次)
企业搭建好集群,如何做安全认证?
数据以及组件被用户最终访问,一般包含四个安全认证:
- 边界安全:如防火墙、安全组。
- 认证:不同的人有不同的角色,是否有权限访问数据。(典型就是kerberos)
- 授权:限制组里的人员不同的操作来进行授权,例如决定哪些用户可以访问哪些表。(典型就是ranger)
- 审计:可以对A用户对集群访问进行日志记录。
- 加密:读取数据可以进行加密传递出去。
一句话来讲:决定一个用户是否有权限访问一个组件,认证是授权的基础,只有通过认证的才会进行授权。
1.2、Kerberos介绍
核心描述:Kerberos是一个网络身份验证协议,一般服务包含有client、server,中间流程client需要先向kerberos俩进行认证,之后才能够去进行访问服务。
官网:https://web.mit.edu/kerberos
核心流程:Kerberos协议通过使用密钥加密为client/Server应用程序提供身份认证,不同于其他网络安全保证整个通信过程传输,Kerberos侧重通信前双方身份认定工作,帮助客户端以及服务端验证是真正的自己而不是别人,从而能够使得 网络通信两端能够完全信任对方身份,在不安全的网络中完成一次安全的身份认证而进行安全通信。
应用:在大数据开发中,很多大数据组件支持Kerberos身份认证,如HDFS、Yarn、Hive、Hbase、Spark、Kafka等。
- 其中HDFS默认就是使用的kerberos来进行认证的。
1.3、Kerberos名词介绍
主要分为对称加密与非对称加密:
- 对称加密:速度快,client、server都存储私钥进行加解密,不安全。
- 非对称加密:速度慢,client有公钥、server有私钥,统一使用公钥来进行加密,在服务器端进行解密。
1.4、Kerberos术语
整个Kerberos认证流程涉及到三种角色:客户端Client、服务端Server、密钥分发中心KDC(Key Distribution Center)
- 客户端(Client):发送请求一方。
- 服务端(Server):接收请求一方。
- 密钥分发中心(Key Distribution Center,KDC):KDC是一个网络服务,提供ticket和临时会话密钥。由三个部分组成:①认证服务器(Authentication Server,AS)。②票证授权服务器(Ticket Grantion Server,TGS)。③Kerberos数据库。
认证服务器AS
:认证服务器,负责认证客户端的身份并发放客户端访问TGS(Ticket Grantion Ticket,票据授予票据)票证授予服务器TGS
:票据授予服务器。用来发放客户端访问服务器端所需的服务授予票据(ticket)。Kerberos数据库
:客户端和服务端添加进kerberos系统时有对应的密钥,数据库负责存储这些密钥,并保存客户端和服务端的基本信息,如:用户名、用户IP地址、服务器端IP、服务端名称等。
1.5、Kerberos认证流程
1.5.1、Kerberos流程图
Kerberos流程图如下所示:
通信的过程如123456,身份验证以及票据授予都在Kerberos中完成,只有认证通过之后才能够去访问服务端。TGS发放的ticket就是加密的内容。
1、首先客户端向KDC中的AS发送验证。
2、AS会给你认证并且发一个ticket票据,用于通信TGS的。
3、拿着ticket来KDC中的TGS来验票。
4、TGS给你访问服务端的ticket。
5、客户端拿着给你的ticket来访问服务端。
6、最终服务器给你响应结果。
核心简述Kerberos认证过程流程:客户端向KDC请求要访问的目标服务器的服务授予票据(ticket),然后客户端拿着从KDC获取的服务授予票据(ticket)访问服务端。
整个过程为了保证客户端和服务端为正确的客户端和服务端,整个Keberos认证包含有三次交互。
1.5.2、第一次通信:客户端与AS
第一次通信:客户端向KDC AS获取TGT
为了获取访问服务端的服务授予票据,客户端首先向KDC向AS获取TGT(票据授予票据),客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)才能够进一步的与服务端通信。
客户端首先向KDC以明文方式发起请求,该请求中携带了访问KDC的用户名、主机IP、当前时间戳。由于客户端是第一次访问KDC,KDC中AS(认证服务器)接收请求后,去kerberos数据库中验证是否存在访问的用户名,这个过程不会判断身份的可靠性。如果没有该用户名,认证失败;若是存在该用户名,AS会返回两部分信息给客户端:
- 第一部分:信息为票据授予票据(TGT),TGT包含客户端的名称、IP、当前时间戳、客户端即将访问TGS的名称、TGT的有效时间。客户端与TGS之间通信的session_key(简称CT_SK),该key后续会用来对客户端向TGS发送的消息加密。
整个TGT使用TGS公钥加密,客户端是解密不了的,后续客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)
- 第二部分是使用客户端公钥加密的信息,该信息中包含客户端和TGS通信的session_key(CT_SK)、客户端将要访问TGS的名称、TGT的有效时间以及当前的时间戳。该部分内容由于是使用客户端密钥进行加密,所以客户端拿到该部分内容可以使自己私钥进行解密,如果这时数据被劫持到假的客户端,由于真正客户端的私钥没有在网络中传输过,所以假的客户端无法对这部分信息进行解密,认证流程中断。只有正确的客户端才能够对这部分信息进行解密,这个过程相当于是对客户端进行认证。【对称加密】
1.5.3、第二次通信:客户端与TGS
第二次通信:客户端向KDC TGS获取目标服务器的服务授予票据ticket
客户端收到了来自KDC AS 返回的两部分信息后,会对第二部分信息进行解密,可以获取与TGS通信的session_key(CT_SK)、将非要访问TGS的名称、时间戳。
校验1:首先会去检查是否与自己返送数据的时间戳相差5分钟,如果大于5分钟则认为该AS是假的,认证中断。如果时延合理,客户端便向TGS发起请求去获取要访问目标服务端的服务授予票据ticket。
校验2:对第三部分解密之后看第二部分和第三部分的客户端名称、客户端IP、时间戳一致,则通过校验。
客户端向KDC TGS请求的信息包括三部分:
1、客户端将要访问的服务端名称。【不加密】
2、客户端从KDC AS中获取的第一部分信息,即:使用TGS密钥加密的TGT,通过TGT客户端可以从TGS中获取访问服务器的服务授予票据ticket。
3、使用CT_SK加密的信息,包括客户端名称、IP、时间戳。
**响应内容两部分:**其中CT_SK可以将CT_SK加密的内容进行解密(第二部分)
1、ST部分,标识server_ticket。【实际就是一张票】
2、使用ST_SK加密内容。其中ST有效时间就是ticket票据有效时间以及CS_SK(用于后面进行加密的)
1.5.4、第三次通信:客户端与服务器
当客户端接收到了KDC TGS的响应后,对第二部分的内容进行解密,获取CS_SK、时间戳、ST有效时间,检查时间戳在时间延迟范围内,向服务端进行请求。
服务端过程:首先对第二部分Server公钥加密内容进行解密,拿到其中的CS_SK之后对第一部分进行解密,然后去校验第一部分解密过后的客户端、客户端IP、时间戳,若是通过则能够进行通信了。
详细过程:
- 客户端会通过CS_SK将客户端名称、时间戳进行加密发送给服务端,还会将服务授予票据ST_发送给服务端。
- 服务端收到来自客户端的请求,使用自己的私钥对ST进行解密获取信息(客户端名称、IP、需要访问的服务端的IP、ST有效时间、时间戳、用于客户端与服务端之间通信的CS_SK),将CS_SK取出对客户端发来的通过CS_SK加密的内容进行解密获取信息(客户端名称、时间戳),如果客户端信息一致说明该客户端是通过KDC认证的客户端,可以进一步提供服务,这是服务端返回通过CS_SK加密的接收请求信息给客户端,客户端接收到该请求后,使用缓存在客户端的CS_SK解密后,也确认了服务端身份,这个过程服务端会通过数字证书证明自己身份。
小结
上述三个步骤代表了整个Kerberos认证的流程,通过的客户端和服务端都确认了双方的身份信息。这个过程使用了各方的密钥,且密钥的种类一直变化,为了防止网络拦截密钥,这些密钥都是临时生成的session key,即只有一次Session会话中起作用,及时密钥被劫持,等待密钥破解后可能会话早就结束了,这为整个Kerberos认证过程保障了较高的安全性。
1.6、Kerberos优势
Kerberos具备如下三点优势:
1、密码无需进行网络传输,基于Ticket实现身份认证,保障安全性。
2、双向认证,整个认证过程,不仅客户端进行认证,待访问的服务也需要进行身份认证。
3、高性能,密钥采用了对称加密方式(整个sessionkey,也可以配置非对称加密),相比于SSL的密钥操作快几个数量级,一旦Client获得用过访问某个Server的Ticket,那么Server就能够根据这个Ticket实现client的验证,而无需KDC的再次参与。
二、Kerberos安装与使用
2.1、Kerberos常见名词术语(realm、principal、keytab、kadmin)
realm
:领域,身份验证。每个用户访问都可以跟上一个领域,表示访问的边界,可以设置多个领域如多个部门,第一个部门、第二个部门。
- 详细解释:领域确定了管理边界,所有主体均属于特定的kerberos域。
principal
:表示的是用户,客户端访问服务端了。主要三个部分组成:名字(name)、实例(instance)、域(realm)。例如我现在要访问hadoop集群。
-
详细解释:主体,Principal主体用于标识身份,每个参与Kerberos认证协议的用户名和服务都需要一个主体来唯一标识自己。Principal由三个部分组成:名字(name)、实例(instance)、域(realm),例如一个标准的kerberos用户/服务表示为:name/instance@REALM。
name
:表示用户名。instance
:对name的进一步描述,例如name所在的主机名或name的类型等,可以省略,与第一个部分使用"/"分割。realm
:表示kerberos在管理上的划分,在KDC中所负责的一个域数据库称作为Realm,这个数据库中存放该网络范围内的所有Principal和它们的密钥,Realm一般都是大写。
-
主体包含两个部分:包含用户主体(某个用户去访问服务可以使用kerberos认证)、服务主体(节点之间服务通信也可以通过kerberos认证)。都是用于认证身份的。
- 举例用户主体命名:zhangsan/admin@EXAMPLE.com,形式为:用户名/角色/releam域,一般这个域是一个公司域名、部分域名。
- 举例服务主体命名:ftp/site.example.com@EXAMPLE.COM,形式为:服务名/地址/releam域。
-
逻辑写法:name/instance@REALM,name就是用户名(服务名称)、instance就是角色(服务主体别名)、REALM表示边界领域。
两个名词:一般kerberos会直接搭建在server服务端中
keytab
:密钥文件,该密钥文件中包含有Principal主体的用户名及密码,那么可以直接使用keytab来完成验证。- 一般认证有两种方式,第一种方式是使用密码方式,用户输入用户名及密码来完成登录验证(kerberos认证)。第二种方式则是使用的kerberos密钥文件来进行身份验证(该密钥文件就是keytab文件)
- 应用场景:一般在服务器上会直接使用用户名、密码方式来进行登录,若是在windows中去访问服务器中的kerberos通常使用keytab文件来进行主体的认证。
kadmin
:高级管理员命令,一般是在kerberos的主节点上使用,使用kadmin可以创建主体,执行kerberos里一些各种命令,操作kerberos入口,也可以在集群任意一台节点执行,常用在主节点执行。主要负责存储KDC数据库,管理principal信息。
2.2、参数配置文件详解
①/var/kerberos/krb5kdc/kdc.conf(服务端)
默认包含参数如下:
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]EXAMPLE.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:normallarcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha11
:normal des-cbc-md5:normal des-cbc-crc:normal}
该配置文件文件中各个配置项可参考:https://web.mit.edu/kerberos/krb5-1.20/doc/admin/conf_files/kdc_conf.html#kdc-conf-5
kdc_ports
:KDC服务监听的端口。EXAMPLE.com
:设定的realms,名字随意。kerberos可以支持多个realms,一般为大写。master_key_type
:指定kerberos主密钥加密算法类型,默认使用aes256-cts。acl_file
:ACL文件路径,Kerberos通过该文件来确定哪些Principal具有哪些权限。dict_file
:存放一个由多行字符串构成的文本文件,该文件中的字符串禁止作为密码使用。admin_keytab
:KDC进行校验的keytab,该keytab用于认证管理员的密钥。supported_enctypes
:支持的加密算法类型。
②/etc/krb5.conf(客户端)
某两个参数:
ticket_lifetime=24h # 一开始申请的票据过期时间为24h
renew_lifetime=7d # 重新续签最多只有7天,7天之后再续没用
关于该配置文件的配置项内容详细参考:https://web/mit.edu/kerberos/krb5-1.20/doc/admin/conf_files/krb5_conf.html#krb5-conf-5
配置文件内容解释:
- logging模块:配置默认即可,KDC和Kadmin服务的log文件录制。
- libdefaults模块:
- dns_loogup_realm:使用主机域名到kerberos domain的映射定位KDC。
- ticket_lifetime:ticket过期时间,超过这个时间ticket需要重新申请活renew。
- renew_lifetime:ticket可进行renew的时间限制。
- forwardable:如果配置为true,在KDC允许的情况下,初始ticket可以被转发。
- rdns:是否可使用逆向DNS。
- pkinit_anchors:签署KDC证书的根证书。
- default_realm:指定默认的realm,需要配置,否则后续Kerberos服务不能正常启动。
- default__ccache_name:默认凭据缓存的明明规则,这里注释掉,否则后续HDFS客户端不能认证操作HDFS。
- realms模块,根据末班配置即可,跟上对应的节点名称即可。
2.3、Kerberos安装
2.3.1、实现scp、rsync以及集群xsync分发
Kerberos架构是客户端/服务端架构方式,安装kerberos包含三个安装包:krb5-server、krb5-workstation、krb5-libs
- krb5-server:Kerberos服务端程序,安装在服务端,如KDC数据库。
- krb5-workstation:安装在客户端,包含基本的Kerberos程序,如kinit、klist、kdestory、kpasswd,所有kerberos节点需要部署。
- krb5-libs:包含Kerberos程序的各种支持类库,所有节点部署。
机子虚拟机:2核4G内存
节点IP | 节点名称 | Kerberos服务端 | Kerberos客户端 |
---|---|---|---|
192.168.10.130 | node1 | * | * |
192.168.10.131 | node2 | * | |
192.168.10.132 | node3 | * | |
192.168.10.133 | node4 | * | |
192.168.10.134 | node5 | * |
实现scp分发:node1可以分发到node2、3、4、5,设置ssh免密登录,只要设置node1就可以
# 生成公钥对(一路回车)在/root/.ssh/目录下生成私钥id_rsa和公钥id_rsa.pub文件
ssh-keygen# 把公钥追加到~/.ssh/authorized_keys中去。只要别的机器有了另一个机器的公钥,也就是在~/.ssh/authorized_keys里存的是目标机器发给你的公钥id_dsa.pub,你就可以通过ssh命令免密登录这台机器
vim id_rsa.pub
# 本机添加密钥操作
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys# 将A的id_rsa.pub追加到B中的authorized_keys,那么之后去分发就无需要输入密码
vim ~/.ssh/authorized_keys
在主服务节点node1机子都配置好域名映射,接着分发到node1-5:
vim /etc/hosts# 映射内容
192.168.10.130 node1
192.168.10.131 node2
192.168.10.132 node3
192.168.10.133 node4
192.168.10.134 node5# 生效网卡
systemctl restart network# 在node1节点服务器编辑好改hosts文件后,分发到node1-5
scp /etc/hosts node5:`pwd`
# 若是拷贝整个文件夹,需要scp后加入参数-r
配置rsync:rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
yum install -y rsync# 测试rsync
rsync
配置xsync集群分发脚本任务:
# 创建脚本文件夹
mkdir /opt/tools/shells# 进入文件夹
cd /opt/tools.shells# 编辑脚本文件
vim xsync.sh
脚本文件如下:
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器
# 也可以采用:
# for host in node{2..5};
for host in node2 node3 node4 node5
doecho ==================== $host ====================#3. 遍历所有目录,挨个发送for file in $@do#4 判断文件是否存在if [ -e $file ]then#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)echo pdir=$pdir#6. 获取当前文件的名称fname=$(basename $file)echo fname=$fname#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)ssh $host "mkdir -p $pdir"#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下rsync -av $pdir/$fname $USER@$host:$pdirelseecho $file does not exists!fidone
done
将脚本文件移入到bin目录下:
# 移动文件到指定bin目录下
mv /opt/tools/shells/xsync.sh /usr/local/bin# 授权
chmod 755 /usr/local/bin/xsync.sh # 将文件名修改去除后缀
mv /usr/local/bin/xsync.sh xsync
之后分发文件,直接进入到指定目录下执行下面命令即可:
xsync 文件名
注意:基本只能是拷贝、复制文件或者文件夹,对于已经删除的无法去同步。
2.3.2、详细安装Kerberos(服务端与客户端)
Kerberos详细安装步骤如下:
1、安装Kerberos服务端
在node1节点上安装kerberos服务端:
yum install -y krb5-server
安装完成之后会在KDC主机上生成配置文件:/var/kerberos/krb5kdc/kdc.conf
# 验证下
cd /var/kerberos/krb5kdc
ll
2、安装Kerberos客户端
在node1-node5节点安装Kerberos客户端:
yum install -y krb5-workstation krb5-libs
安装完成之后会在客户端生成配置文件/etc/krb5.conf。
# 验证下
cat /etc/krb5.conf
3、配置服务端kdc.conf文件(暂不修改)
kdc.conf文件位于node1服务端/var/kerberos/krb5kdc/路径中,可以通过配置改文件来增加realm域信息。
vim /var/kerberos/krb5kdc/kdc.conf
目前以上文件暂时不做修改,使用默认的域就可以。
kdc配置文件说明:
kdc文件主要用于配置realm领域信息,领域可以配置多个
对于kdcdefaults:表示的是默认的kdc服务通信的端口。
EXAMPLE.COM表示一个领域,默认不变的
4、所有客户端配置krb5.conf
krb5.conf文件在客户端/etc/目录下,下面在node1客户端配置/etc/krb5.conf文件,配置完成后分发到node2-node5所有的客户端。
cd /etc/
ls | grep krb5.conf# 编辑配置文件
vim /etc/krb5.conf
完整修改配置如下:
(1)对于[libdefaults]中配置处理
①将default_realm = EXAMPLE.COM解开
原因:官方注释掉的目的你的名字不一样要配置其他名字,若是不解开就没有默认的域名,启动Kerberos的时候就启动不起来。
②将default_ccache_name = KEYRING:persistent:%{uid}注释
原因:若是不注释掉,后续HDFS客户端不能认证操作HDFS。
(2)对于[realms]中配置:配置kdc的服务域名以及管理服务器的域名
操作:都改为域名node1。
# 放开注释
[realms]
EXAMPLE.COM = {kdc = node1admin_server = node1
}
额外:对于[domain_realm]这个是进行映射,我们不再处理。
修改完配置后,我们来将该配置文件进行分发:
cd /etc# 单独分发
scp ./krb5.conf node2:`pwd`
scp ./krb5.conf node3:`pwd`
scp ./krb5.conf node4:`pwd`
scp ./krb5.conf node5:`pwd`# 一次性分发到指定节点服务
xsync krb5.conf
5、服务端配置kadmin5.acl文件(暂不修改)
kadmin5.acl位于服务端/var/kerberos/krb5kdc/kadm5.acl,该ACL文件用于控制kadmin数据库的访问权限,以及那些Principal可以操作其他的Principal,配置如下:
# 编辑配置文件
vim /var/kerberos/krb5kdc/kadm5.acl
配置文件内容:
# 表示任意属于admin角色以及EXAMPLE.COM这个域的(第一个*),那么所有的用户都是可以来操作的(第二个*)
*/admin@EXAMPLE.COM *
以上配置表示名称匹配*/admin@EXAMPLE.COM
的Principal都认为是admin管理员角色,权限是*代表全部权限,可以根据自己配置情况对应的域,这里不做修改。
6、服务器初始化Kadmin数据库(暂不修改)
初始化Kadmin数据库的命令格式为:
# 这里-s表示生成存储文件,-r表示realm name,在服务端执行,执行后默认创建的数据库路径为:/var/kerberos/krb5kdc,如果需要重新建数据库,将该目录下的principal相关文件删除即可,要记得数据库密码
kdb5_util create -s -r EXAMPLE.COM
在node1节点初始化Kadmin数据库:操作如下
可以看到对应/var/kerberos/krb5kdc中生成了principal相关文件:
7、启动Kerberos服务并设置开机自启动
在服务端【node1】启动Kerberos服务:
# 启动Kerberos服务,关闭 stop,状态 status
systemctl start krb5kdc
systemctl start kadmin# 设置开机自启
systemctl enable krb5kdc
systemctl enable kadmin
2.4、Kerberos使用
①kadmin.local(服务器端)
kadmin.local:登录
在Kerberos服务器端执行数据库操作:
# 服务器端
kadmin.local
在客户端也可以进行数据库操作,不过执行的命令不同:
# 客户端执行会直接报错,这里由于我们登录使用的是root账号的管理员角色,目前数据库还没有所以无法操作(主体没有)
kadmin# 注意:这条命令在客户端会失败有问题,在kerberos服务器上执行有效,直接指定主体和密码。
kadmin -p test/admin -w123456
listprincs:查看当前数据库具有的主体
listprincs
add_principal、delete_principal等:创建、删除、修改密码、查看与销毁当前票据
创建一个主体
# 统一设置我们之后设定密码手输入为123456
# 方式一:带指定的域
add_principal test/admin@EXAMPLE.COM# 方式二:不带域,默认目前就是EXAMPLE.COM
add_principal test1/admin# 方式三:不带角色、域,此时就没有角色表示的是普通用户
add_principal test2
快速创建账号使用一条命令:一般服务器可直接创建,客户端需要先认证登录之上了再执行
# 快捷创建账号
kadmin.local -q "addprinc ccc"# 可直接指定密码
kadmin.local -q "addprinc -pw 123456 ddd"
删除一个主体:
# 删除普通用户的账号(只需要用户名即可):删除用户为test2,输入yes即可删除
delete_principal test2# 删除管理员角色的用户必须要带上角色,即用户/角色:否则删除不了
delete_principal test1/admin
修改指定主体密码:
# 修改指定主体的密码
cpw test1/admin
查看当前票据缓存:
# 查看当前票据缓存,一般执行kinit会进行设置票据缓存这里就能够查看到
klist# 销毁当前票据缓存
kdestroy
②?获取帮助文档
获取帮助文档:
# 进入到kadmin命令行窗口执行
?
③kadmin(客户端两种登录方式密码、keytab,含创建keytab操作)
客户端操作kerberos的数据库:
①使用密码方式登录
# 这里我们使用的是之前创建的test管理员账号来进行认证,会输入密码认证
# 此时默认域是EXAMPLE.com,即为test/admin@EXAMPLE.COM
kinit test/admin# 若是没有报错就表示已经验证通过了# 此时我们执行kadmin执行登录,注意此时就会使用已经认证过的账号,就是这个test/admin@EXAMPLE.COM去进行登录
# 输入密码:123456
kadmin
②远程使用keytab方式登录
首先生成一个ktab,
# 建立keytabs文件目录,后续该目录里防止所有keytab文件
mkdir /opt/tools/keytabs# 该命令是在kadmin.local数据库交互界面可执行
# -norandkey:生成密码的时候不要随机生成key(此时就是随机密码方式了)
# -kt:指定生成的文件路径及名字,后面跟上主体
# 提示1:若是原本没有,会生成该文件并追加该主体密码信息
# 提示2:若是已经有该文件,那么会在该文件后进行追加指定主体信息(可以追加多个主体信息)
ktadd -norandkey -kt /opt/tools/keytabs/test.keytab test/admin@EXAMPLE.COM# 集群分发文件
cd /opt/tools
# 执行分发脚本
xsync keytabs/
查看指定的keytab文件内容:
# 查看指定keytab文件
klist -kt /opt/tools/keytabs/test.keytab
若是想要移除keytab中的某个主体:
# 该命令是在kadmin.local数据库交互界面可执行
ktremove -kt /opt/tools/keytabs/test.keytab test/admin@EXAMPLE.COM
若是此时我们有了keytab文件后就,那么我们使用keytab文件来进行认证:
# -kt:可以指定keytab文件,后面也要跟上主体文件
kinit -kt /opt/tools/keytabs/test.keytab test/admin# 若是没有任何报错表示登录成功,此时可以使用klist查看缓存# 登录到kerberos数据库操作,此时会使用当前主体来进行登录,即test/admin上面认证的
kadmin