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

文章目录

  • 前言
  • 一、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.mzph.cn/web/44146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cpp使用第三方库

使用第三方库在C中进行编程是一种常见的做法,因为它可以让利用现成的代码来实现更复杂的功能,而不必从头开始编写。下面是一个示例,演示如何在C项目中引入并使用一个第三方库。这个例子将使用Boost库,它是C中广泛使用的一个库&…

60、基于浅层神经网络的数据拟合(matlab)

1、基于浅层神经网络的数据拟合的简介、原理以及matlab实现 1)内容说明 基于浅层神经网络的数据拟合是一种常见的机器学习方法,用于通过输入数据来拟合一个非线性函数。这种方法通常包括一个输入层、一个或多个隐藏层和一个输出层。神经网络通过学习权…

广电日志分析系统

需求 广电集团中有若干个系统都产生日志信息,目前大约分布与70到80台服务器中,分别是windows与Linux操作系统。需要将服务器上产生的日志文件利用我们的技术进行解析 设计 每个日志工作站负责30-50个服务器的日志解析工作。可以根据实际需求进行设置&…

ENSP实现防火墙区域策略与用户管理

目录 实验拓扑与要求​编辑 交换机与防火墙接口的配置 交换机: 创建vlan 接口配置 防火墙配置及接口配置 防火墙IP地址配置 云配置​编辑​编辑​编辑 在浏览器上使用https协议登陆防火墙,并操作 访问网址:https://192.168.100.1:844…

51单片机嵌入式开发:9、 STC89C52RC 操作LCD1602技巧

STC89C52RC 操作LCD1602技巧 1 代码工程2 LCD1602使用2.1 LCD1602字库2.2 巧妙使用sprintf2.3 光标显示2.4 写固定长度的字符2.5 所以引入固定长度写入方式: 3 LCD1602操作总结 1 代码工程 承接上文,在原有工程基础上,新建关于lcd1602的c和h…

linux中如何设置多个redis进程并且设置独立密码?

在Linux中设置多个Redis进程(实例)并为每个实例设置独立密码,你需要为每个Redis实例配置不同的配置文件,并在这些配置文件中指定不同的端口、数据目录、密码等。Redis本身并不直接支持在配置文件中设置“密码”来阻止未授权访问&a…

ArduPilot开源飞控之AP_Mount_Backend_Serial

ArduPilot开源飞控之AP_Mount_Backend_Serial 1. 源由2. 框架设计2.1 类定义2.2 构造函数2.3 init 方法2.4 受保护成员 3. 重要方法4. 总结5. 参考资料 1. 源由 AP_Mount_Backend_Serial是AP_Mount_Backend基于串口的通信的一个扩展模版。 2. 框架设计 继承自 AP_Mount_Back…

Sentieon应用教程:本地使用-Quick_start

1、准备工作: License下载链接:http://www.sentieon.com/eula/b703e839c8c7c5b8fa73238277fd5da23a0276be54712edb46ee8f4d4f3d873fbf 软件下载地址: https://insvast-download.oss-cn-shanghai.aliyuncs.com/Sentieon/release/sentieon-gen…

11-《风信子》

风信子 风信子(学名:Hyacinthus orientalis L.):是多年草本球根类植物,鳞茎卵形,有膜质外皮,皮膜颜色与花色成正相关,未开花时形如大蒜,原产地中海沿岸及小亚细亚一带&am…

【Vue】vue-element-admin组件化功能

1. 组件的封装 在vue-element-admin中,每个功能区域或UI元素都被封装成一个或多个Vue组件。这些组件可以是简单的按钮、输入框,也可以是复杂的表格、表单或页面布局。每个组件都包含了其模板(HTML结构)、逻辑(JavaScr…

【论文精读】Exploring the Causality of End-to-End Autonomous Driving

背景信息 团队:百度 代码:https://github.com/bdvisl/DriveInsight 论文思想简述:这篇论文并不是提出SOTA模型,而是提出了一些评估模型的方法。 目前已有的分析方法 大语言模型。VAQ来提供解释性,比如DriveVLM&…

C++基础(二)

目录 1.类和对象 1.1类的定义 1.2访问限定符 1.3类域 2.实例化 2.1实例化概念 2.2对象大小 3.this指针 4.类的默认成员函数 4.1构造函数 4.2析构函数 4.5运算符重载 1.类和对象 1.1类的定义 类的定义格式 class为定义类的关键字,Stack为类的名字&…

7月11日学习打卡,数据结构栈

大家好呀,本博客目的在于记录暑假学习打卡,后续会整理成一个专栏,主要打算在暑假学习完数据结构,因此会发一些相关的数据结构实现的博客和一些刷的题,个人学习使用,也希望大家多多支持,有不足之…

dataX入门

下载dataX https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 然后 下载后解压至本地某个目录,进入bin目录,即可运行同步作业: $ cd {YOUR_DATAX_HOME}/bin $ python datax.py {YOUR_JOB.json} 要求你有python…

vue-grid-layout详解

vue-grid-layout 教程 vue-grid-layout 是一个用于 Vue.js 的响应式拖放网格布局组件,允许开发者创建可调整大小、可拖放的布局,广泛用于仪表板、管理面板等复杂布局需求。本教程将介绍如何安装、配置和使用 vue-grid-layout。 目录 安装基本使用 布局…

怎样在 C 语言中进行类型转换?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会! 📙C 语言百万年薪修炼课程 通俗易懂,深入浅出,匠心打磨,死磕细节,6年迭代,看过的人都说好。 文章目…

暑假自律日记九

7.10 (半小时日记打卡之——暑假第九天) 前言:或许是累了,今天的效率和进度可以说是历史最低了,调休了一天,算是歇会 日程 八点二十起床,在床上赖了一会 九点二十抵达逸夫楼,开始补…

kafka发送消息流程

配置props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); public Map<String,Object> producerConfigs(){Map<String,Object> props new HashMap<>();props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers…

Spring Boot中的安全配置与实现

Spring Boot中的安全配置与实现 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Spring Boot中的安全配置与实现&#xff0c;看看如何保护你的…

在表格中把tab换成enter键------ivx

为了方便用户输入&#xff0c;把tab键替换成enter回车 方法如下&#xff1a; 添加一个fx函数 document.addEventListener(‘keydown’, function(event) { if (event.key ‘Enter’ && !event.shiftKey) { event.preventDefault(); var focusableElements document.q…