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.pswp.cn/web/44146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44146.shtml
英文地址,請注明出處:http://en.pswp.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…