01、Kerberos安全认证之原理及搭建命令使用学习笔记

news/2024/9/13 23:48:05/ 标签: 安全, 学习, 笔记

文章目录

  • 前言
  • 一、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用户对集群访问进行日志记录。
  • 加密:读取数据可以进行加密传递出去。

image-20240612005610870

一句话来讲:决定一个用户是否有权限访问一个组件,认证是授权的基础,只有通过认证的才会进行授权。


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有私钥,统一使用公钥来进行加密,在服务器端进行解密。

image-20240612183345388


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流程图如下所示:

image-20240612183426470

通信的过程如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(服务授予票据)才能够进一步的与服务端通信。

image-20240613073423989

客户端首先向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、时间戳一致,则通过校验。

image-20240613074616508

客户端向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有效时间,检查时间戳在时间延迟范围内,向服务端进行请求。

image-20240616181335791

服务端过程:首先对第二部分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(客户端)

image-20240620163147538

某两个参数:

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.130node1**
192.168.10.131node2*
192.168.10.132node3*
192.168.10.133node4*
192.168.10.134node5*

实现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

image-20240616203504674

2、安装Kerberos客户端

在node1-node5节点安装Kerberos客户端:

yum install -y krb5-workstation krb5-libs

安装完成之后会在客户端生成配置文件/etc/krb5.conf。

# 验证下
cat /etc/krb5.conf

image-20240616203641952

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

完整修改配置如下:

image-20240617011332759

(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数据库:操作如下

image-20240620164553541

可以看到对应/var/kerberos/krb5kdc中生成了principal相关文件:

image-20240620164637742

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

image-20240620165529723

在客户端也可以进行数据库操作,不过执行的命令不同:

# 客户端执行会直接报错,这里由于我们登录使用的是root账号的管理员角色,目前数据库还没有所以无法操作(主体没有)
kadmin# 注意:这条命令在客户端会失败有问题,在kerberos服务器上执行有效,直接指定主体和密码。
kadmin -p test/admin -w123456

image-20240620165542007


listprincs:查看当前数据库具有的主体
listprincs

image-20240620170051152


add_principal、delete_principal等:创建、删除、修改密码、查看与销毁当前票据

创建一个主体

# 统一设置我们之后设定密码手输入为123456
# 方式一:带指定的域
add_principal test/admin@EXAMPLE.COM# 方式二:不带域,默认目前就是EXAMPLE.COM
add_principal test1/admin# 方式三:不带角色、域,此时就没有角色表示的是普通用户
add_principal test2

image-20240620172710946

快速创建账号使用一条命令:一般服务器可直接创建,客户端需要先认证登录之上了再执行

# 快捷创建账号
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

http://www.ppmy.cn/news/1475447.html

相关文章

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏,以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级,逐步增强自己的角色实力,最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 命令行界面开发工具

构建交互式命令行:JavaScript 中的 CLI 开发利器 前言 在现代软件开发中,命令行界面(CLI)和终端应用程序的开发变得越来越重要。为了提高用户体验和交互性,使用合适的工具和库是至关重要的。本文将介绍一些用于构建命…

基于Python进行分类算法实验(人工智能)的设计与实现

基于Python进行分类算法实验(人工智能)的设计与实现 “Design and Implementation of Python-based Classification Algorithm Experiment in Artificial Intelligence” 完整下载链接:基于Python进行分类算法实验(人工智能)的设计与实现 文章目录 基于Python进行分类算法实验…

数据建设实践之大数据平台(二)安装zookeeper

安装zookeeper 上传安装包到/opt/software目录并解压 [bigdatanode101 software]$ tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/services/ 重命名文件 [bigdatanode101 services]$ mv apache-zookeeper-3.5.7-bin zookeeper-3.5.7 配置环境变量 export JAVA_H…

RabbitMq,通过prefetchCount限制消费并发数

1.问题:项目瓶颈,通过rabbitMq来异步上传图片,由于并发上传的图片过多导致阿里OSS异常, 解决方法:通过prefetchCount限制图片上传OSS的并发数量 2.定义消费者 Component AllArgsConstructor Slf4j public class ReceiveFaceImageEvent {private final UPloadService uploadSe…

ES索引模板

在Elasticsearch中,索引模板(Index Templates)是用来预定义新创建索引的设置和映射的一种机制。当你创建了一个索引模板,它会包含一系列的默认设置和映射规则,这些规则会在满足一定条件的新索引被创建时自动应用。 索…

使用 Azure DevOps Pipelines 生成 .NET Core WebJob 控制台应用 CI/CD

Web 应用程序通常需要作为后台任务运行的进程,并在特定时间间隔进行计划或在事件中触发。它们不需要花哨的 IO 接口,因为重点是过程而不是输出。Azure WebJobs 提供了出色的支持,通常在云环境中通过 Web 控制台应用程序来实现此目的。WebJob …

基于全国产复旦微JFM7K325T+ARM人工智能数据处理平台

复旦微可以配合的ARM平台有:RK3588/TI AM62X/ NXP IMX.8P/飞腾FT2000等。 产品概述 基于PCIE总线架构的高性能数据预处理FMC载板,板卡采用复旦微的JFM7K325T FPGA作为实时处理器,实现各个接口之间的互联。该板卡可以实现100%国产化。 板卡具…

爬虫怎么实现抓取的

1.4爬虫工程师常用的库通过图1-3我们了解到,爬虫程序的完整链条包括整理需求、分析目标、发出网络请求、文本解析、数据入库和数据出库。其中与代码紧密相关的有:发出网络请求、文本解析、数据入库和数据出库,接下来我们将学习不同阶段中爬虫…

keepalive+nginx/haproxy+keepalive 高可用

keepalive: 调度器的高可用 vip地址在主备之间的切换,主在工作时,vip地址只在主;主停止工作,vip飘到备上。 在主备的优先级不变的情况下,主恢复工作,vip会飘会主服务器 1、配优先级 2、配v…

LLM推理优化笔记1:KV cache、Grouped-query attention等

KV cache 对于decoder-only 模型比如现在如火如荼的大模型,其在生成内容的过程中,为了避免冗余计算,会将Transformer里的self-attention的K和V矩阵给缓存起来,这个过程即为KV cache。 decoder-only模型的生成过程是自回归的&…

c++课后作业

把字符串转换为整数 int main() {char pn[21];cout << "请输入一个由数字组成的字符串&#xff1a; ";cin >> pn;int last 0;int res[10];int j strlen(pn);int idx 2;cout << "请选择&#xff08;2-二进制&#xff0c;10-十进制&#xf…

项目/代码规范与Apifox介绍使用

目录 目录 一、项目规范&#xff1a; &#xff08;一&#xff09;项目结构&#xff1a; &#xff08;二&#xff09;传送的数据对象体 二、代码规范&#xff1a; &#xff08;一&#xff09;数据库命名规范&#xff1a; &#xff08;二&#xff09;注释规范&#xff1a; …

JavaSE 面向对象程序设计进阶 IO流练习 字节缓冲流 字符缓冲流 底层原理

目录 字节缓冲流 字节缓冲流底层原理 字符缓冲流 字节缓冲流 刚刚学习的四个流是基本流 对四个基本流进行封装&#xff0c;添加了新的功能&#xff0c;叫做缓冲流 底层自带长度为8192的缓冲区 import java.io.*;public class Main {public static void main(String[] args) …

xcode中对项目或者文件文件夹重命名操作

提起揭秘答案&#xff1a;选中文件后&#xff0c;按下回车键就可以了 如果在项目中对新建的文件夹或者文件名称不满意或者输入错误了&#xff0c;想要修改一下名称该怎么办&#xff1f;如果是在文件或文件夹上右键是没有rename选项的&#xff1a; 其实想要重命名&#xff0c;很…

红日靶场----(三)1.漏洞利用

上期已经信息收集阶段已经完成&#xff0c;接下来是漏洞利用。 靶场思路 通过信息收集得到两个吧靶场的思路 1、http://192.168.195.33/phpmyadmin/&#xff08;数据库的管理界面&#xff09; root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

自定义波形图View,LayoutInflater动态加载控件保存为本地图片

效果图&#xff1a; 页面布局&#xff1a; <?xml version"1.0" encoding"utf-8"?><LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:la…

AirPods Pro新功能前瞻:iOS 18的五大创新亮点

随着科技的不断进步&#xff0c;苹果公司一直在探索如何通过创新提升用户体验。iOS 18的推出&#xff0c;不仅仅是iPhone的一次系统更新&#xff0c;更是苹果生态链中重要一环——AirPods Pro的一次重大升级。 据悉&#xff0c;iOS 18将为AirPods Pro带来五项新功能&#xff0…

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App

电子签章 签到 互动 打卡 创意印章 支持小程序 H5 App 定制化

iOS 开发中不常见的专业术语

乐此不疲地把简单的问题复杂化&#xff0c;并把这种XX行为叫作专业 APM 在 iOS 开发中&#xff0c;APM 代表 Application Performance Management&#xff08;应用性能管理&#xff09;。APM 是一套监控和管理应用程序性能的工具和技术&#xff0c;旨在确保应用程序运行平稳、…