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,一经查实,立即删除!

相关文章

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…

11-《风信子》

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

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…

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

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

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…

在表格中把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…

【C++BFS】690. 员工的重要性

本文涉及知识点 CBFS算法 LeetCode690. 员工的重要性 你有一个保存员工信息的数据结构&#xff0c;它包含了员工唯一的 id &#xff0c;重要度和直系下属的 id 。 给定一个员工数组 employees&#xff0c;其中&#xff1a; employees[i].id 是第 i 个员工的 ID。 employees[…

软件架构之嵌入式系统设计(2)

软件架构之嵌入式系统设计&#xff08;2&#xff09; 12.4 嵌入式网络系统12.4.1 现场总线网12.4.2 家庭信息网11.4.3 无线数据通信网12.4.4 嵌入式 Internet 12.5 嵌入式数据库管理系统12.5.1 使用环境的特点12.5.2 系统组成与关键技术 12.6 实时系统与嵌入式操作系统12.6.1 嵌…

Linux 忘记root密码,通过单用户模式修改

银河麒麟桌面操作系统 V10&#xff08;sp1&#xff09;”忘记用户密码&#xff0c;需要修改用户密码所写&#xff0c;可用于 X86 架构和 arm 架构。 2. 选择第一项&#xff0c;在上图界面按“e”键进行编辑修改。 3. 在以 linux 开头这行的行末&#xff0c;添加“init/bin/bas…

SSE(Server-Send-Event)服务端推送数据技术

SSE&#xff08;Server-Send-Event&#xff09;服务端推送数据技术 大家是否遇到过服务端需要主动传输数据到客户端的情况&#xff0c;目前有三种解决方案。 客户端轮询更新数据。服务端与客户端建立 Socket 连接双向通信服务端与客户建立 SSE 连接单向通信 几种方案的比较&…

Nginx上配置多个网站

一、需求描述 我们只有一台安装了Nginx的服务器,但是我们需要实现在这台服务器上部署多个网站,用以对外提供服务。 二、Nginx上配置多个网站分析 一般网站的格式为:【http://ip地址:端口号/URI】(比如:http://192.168.3.201:80),IP地址也可用域名表示;那么要实现在Nginx…

i18n、L10n、G11N 和 T9N 的含义

注&#xff1a;机翻&#xff0c;未校对。 Looking into localization for the first time can be terrifying, if only due to all of the abbreviations. But the meaning of i18n, L10n, G11N, and T9N, are all very easy to understand. 第一次研究本地化可能会很可怕&…

如何做一个迟钝不受伤的打工人?

一、背景 在当前激烈的职场环境中&#xff0c;想要成为一个相对“迟钝”且不易受伤的打工人&#xff0c;以下是一些建议&#xff0c;但请注意&#xff0c;这里的“迟钝”并非指智力上的迟钝&#xff0c;而是指在应对复杂人际关系和压力时展现出的豁达与钝感力&#xff1a; 尊重…

【测开能力提升-fastapi框架】fastapi路由分发

1.7 路由分发 apps/app01.py from fastapi import APIRouterapp01 APIRouter()app01.get("/food") async def shop_food():return {"shop": "food"}app01.get("/bed") async def shop_food():return {"shop": "bed&…

js前端隐藏列 并且获取值,列表复选框

列表框 <div class"block" id"psi_wh_allocation_m"><table id"result" class"list auto hover fixed" style"width:100%;border-collapse:collapse"><thead><tr><%--<th></th>--%&…